OmniAICreator/Qiita-1.07M huggingface dataset:
CSSfmtをつくった話、もしくは本質的な問題解決とは

[CSSfmt](https://github.com/morishitter/cssfmt)という、CSSとSCSSのコードを自動整形するツールをつくった。
使い方はREADMEを見たらわかると思う。Atom, Sublime Text, Vim, Emacs用のプラグインがあるので、エディタで使うのがおすすめ。コマンドラインからも使える。

- [atom-cssfmt](https://github.com/1000ch/atom-cssfmt)
- [sublime-cssfmt](https://github.com/dmnsgn/sublime-cssfmt)
- [vim-cssfmt](https://github.com/kewah/vim-cssfmt)
- [cssfmt.el](https://github.com/KeenS/cssfmt.el)

AtomでCSSfmtが動いている様子：

![atom-cssfmt](https://raw.githubusercontent.com/1000ch/atom-stylefmt/master/stylefmt.gif)

## なぜつくったのか

チーム開発において、コードのフォーマットが統一されていないことがある。
フォーマットの小さな違いはわざわざ指摘するのもめんどうだし、指摘されても嫌な気分になる。なので、コードをあるルールに従って自動で整形するツールの導入は必須だと思う。

CSSコードの整形ツールはいくつかある。[CSS Beautify](https://github.com/senchalabs/cssbeautify)や[CSScomb](https://github.com/csscomb/csscomb)、[stylelint](https://github.com/stylelint/stylelint)でも可能だ。

これらのツールとCSSfmtの違いは以下の3点である。

- Custom propertiesや`color()`等の未来のCSSの記法に対応
- SassのSCSS記法に対応
- **フォーマッティングのオプションが一切ない**

CSSfmtはパーサーにPostCSSを使っていて、それゆえに未来のCSSの記法やSCSSに対応することができた。今後はSASSやStylusのようなインデントでブロックを表現するような記法にも対応できるだろう。

CSSfmtの最大の特徴は、フォーマッティングのオプションが一切ないことだ。
CSScombや、特にstylelintではかなり詳細にフォーマットを指定することができる。しかし、そのために巨大な専用の設定ファイルを用意しなければいけない。

CSSfmtも始めはいろいろとオプションを指定できるように実装していたが、 **読みやすいCSSのコード** にするにはそんなに細かく設定する必要はないのでは、と感じて一切の実装をやめた。

読みやすい例：

```css
div > p {
  font-size: 12px;
  line-height: 1.5;
}
```

このようなコードを読みやすいと感じる人はいない：

```css
div  >p
{
font-size:12px;line-height:1.5
}
```

インデントだけは好みが別れるので、[editorconfig](http://editorconfig.org/)を使っていて、プロジェクトのディレクトリに`.editorconfig`があるときはそちらに合わせることにした。（editorconfigを使っていないと2スペースのインデントになる）

セレクタと`{`の間は1スペースか改行か等、他にも好みが別れるところがあるとは思う。フォーマッティングのためのオプションを実装してくれとissueも立ったが、CSSfmtではただ1つのフォーマットに統一した。ほとんどの人がこの[フォーマットルール](https://github.com/morishitter/cssfmt/blob/master/README.md#rules)に従ってCSSを書いてるんじゃないかと思う。

CSSfmtがGofmtのようにCSSのフォーマッターとしてみんなが当たり前に使ってもらえたら、という気持ちでつくった。

## 本質的な問題解決

ここまで書いてきたCSSfmtをつくった理由は嘘ではないが、後づけでこじつけなところがある。

CSSfmtは、何かの問題を解決するためだったり、需要があって生まれたものではない。何かしらのアウトプットをし続けないといけないという、強迫観念のようなものから作られた。ソフトウェアエンジニアならこのような気持ちからアウトプットをしている人も少なくないと思う。CSSfmtのGitHubのスター数はもうすぐ700になるが、これは本当に運が良かったからとしか言えない。

僕は「本質的な問題解決」という言葉をよく口に出す。
本当にいいモノは、セルフブランディングのためや、手当たり次第に、作れるからという理由で作っても生まれないと思う。GitHubで草を生やすために無意味なcommitをしたくない。今抱えている問題について正確に理解し、需要からトップダウンなプロセスで作られ、解決に導くものが、ホンモノだ。

これから来る老いに備えて、もっと全体を俯瞰し、本質を見極める目を養っていきたい。

---

若者からは以上です。
PostgreSQLをコマンドラインで使うときの小技


## psqlを設定する
### 縦に整列する
selectの結果が長い時、1カラムが複数行にわたって表示されてしまい見づらい。
そこでexpanded display modeをonにすることで結果が縦に整列して表示されるようになる。

```
db=# \x auto
```

### nullを表示させる
nullはデフォルトでは空文字として設定されている。そこでnullも明示して表示させる。
下の設定では、nullを`¤`として表示させる(任意の文字列でOK)。

```
db=# \pset null ¤
```

### SQLキーワードを大文字補完する
`sel<tab>`と打つと`SELECT<space>`と補完してくれる設定。

```
db=# \set COMP_KEYWORD_CASE upper
```

### デフォルト設定として設定する
`~/.psqlrc`ファイルに上記設定を記述すると、デフォルト設定として読み込まれる。

```bash:~/.psqlrc
\x auto
\pset null ¤
\set COMP_KEYWORD_CASE upper
```

## ヘルプを表示する
SQLコマンドのヘルプ一覧を表示する。

```
db=# \h
```

`ALTER`コマンドなど、各種コマンドのヘルプを表示する。

```
db=# \h alter
```

psql上での`\`コマンドの一覧を確認する。

```
db=# \?
```

## データベース情報を表示する
テーブル一覧を表示する。

```
db=# \dt -- テーブル一覧表示
db=# \dt user* -- userから始まるテーブル一覧表示
```

インデックスの一覧を表示する。

```
db=# \di
```

viewの一覧を表示する。

```
db=# \dv
```

テーブル定義を表示する。

```
db=# \d users
```

functionの一覧を表示する。

```
db=# \df -- function一覧表示
db=# \df *regexp* -- regexpが含まれるfunction一覧表示
```

## クエリを作成する
クエリをエディタから作成する。

```
db=# \e foo.sql
```

ファイルに記載されたクエリを実行する。

```
db=# \i foo.sql
```

シェルコマンドを実行する。

```
db=# \! bar.sql
```

## 結果を比較する
結果をファイルに出力する。

```
db=# \o a.txt
db=# EXPLAIN SELECT * FROM users
```

結果をターミナルに出力するように戻す。

```
db=# \o
```

上記のように結果をファイルに出力するだけだとあまり意味が無い。
しかし２つのクエリの結果を比較したい時、`\o`コマンドは役に立つ。

```
db=# \o a.txt
db=# EXPLAIN SELECT * FROM users WHERE id IN (SELECT user_id FROM groups WHERE name = 'admins');
db=# \o b.txt
db=# EXPLAIN SELECT users.* FROM users LEFT JOIN groups WHERE groups.name = 'admins';
db=# \! vimdiff a.txt b.txt
```

## データベースをクローンする
開発中、migrationの変更の度にローカルのデータベースを作っては壊しながら作業する。
その度にデータベースを一から作成すると時間がかかるため、コピー用データベースをテンプレートとして作成しておくことで時間短縮ができる。

```
-- コピー用DBと一緒にDB作成
$ createdb -T app_db app_db_backup
-- DBをドロップする
$ dropdb app_db
-- コピー用DBをベースにDB作成
$ createdb -T app_db_backup app_db
```

## データをCSVファイルに出力する
やり方は2通りある。

一つ目は`COPY`SQLコマンドを使用する方法。

```
COPY (SELECT ...)
TO '/absolute/path/export.csv'
WITH (FORMAT csv, HEADER true);
```

これには注意点がある。

* ファイル名を絶対パスで指定しなければならない。
* ローカルのファイルシステムにしか保存できないため、リモートデータベースでの結果をローカルに保存できない。

リモートへ接続して出力した結果をローカルに保存するためには、次のように行う。

```
COPY (SELECT ...)
TO STDOUT
WITH (FORMAT csv, HEADER true);
> export.csv
```

二つ目は`\copy`コマンドを使用する方法。

```
db=# \copy (SELECT ...) TO export.csv WITH (FORMAT csv, HEADER true, ENCODING 'sjis')
```

`\copy`コマンドの場合、相対パスへの指定ができ、また、ファイルもローカルに保存される。
ただしワンライナーで書かなければならないことが注意。

## 参考
[PostgreSQL on the Command Line](http://phili.pe/posts/postgresql-on-the-command-line/)
IEのサポート期限まとめ

#IEのサポート期限について

サポート期限について若干ややこしくなっているようなので、記事にしてまとめてみることにしました。
既にご存知の方も多いと思いますが、2016年1月13日をもって各OSで使えるIEのうち最新バージョン以外はサポート外となります。

##OSによるサポート期限の例

* **Windows Vista**  
IE7-8は2016年1月13日でサポート終了。IE9はOS自体のサポート期限である2017年4月11日までサポートされる。
* **Windows 7**  
IE8-10は2016年1月13日でサポート終了。IE11はOS自体のサポート期限である2020年1月14日までサポートされる。



##バージョン別のサポート期限一覧

| OS | IE7 | IE8 | IE9 | IE10 | IE11 |
|:-----------|:-----------|:-----------|:-----------|:-----------|:-----------|
| **windows Vista** | 2016/01/13 | 2016/01/13 | 2017/04/11 | -          | -          |
| **windows 7**     | -          | 2016/01/13 | 2016/01/13 | 2016/01/13 | 2020/01/14 |
| **windows 8**     | -          | -          | -          | 2016/01/13 | -          |
| **windows 8.1**   | -          | -          | -          | -          | 2023/01/10 |
| **windows 10**    | -          | -          | -          | -          | 2025/10/14 |


##Web制作における展望

まず、単純に考えれば2016年1月13日をもってIE8まで一気に切ることが出来ます。
コレだけで鼻から枝豆が出そうな感じですね。祝杯あげたいレベルです。
HTML5やCSS3がかなり自由に使えることになります。
さらに、翌年の2017年4月11日をもってIE10まで一気に切ることが出来そうです。
上記以外にWindows severなどのOSもありますので、簡単にはいかない可能性もありますが、
一般的なサイトでは切っても問題ないんじゃないでしょうか。
ここまできたら、プログレッシブなんちゃらだのグレイスフルなんちゃらだので悩まなくて済みそうですね。
各種ブラウザの最新版とデバイス対応だけに集中できるのは非常にありがたいことです。


**出典及び参考サイト**
https://support.microsoft.com/ja-jp/gp/lifeselect?target=lifecycle&c1=509&=GSSProdSelMore509
http://www.atmarkit.co.jp/ait/articles/1507/13/news025.html
http://www.tama200x.com/blog/?p=1776
jarファイルをインポートした時に気をつけること

##やりたいこと
jarファイルのインポート

>参考
androidstudioにライブラリ用のjarファイルを追加する方法
http://tiro105.hateblo.jp/entry/2015/03/02/141526

上記を参考にさせて頂きましたが、少し改良を加えました。

##困ったこと
Appと並列の位置にあるGradleScriptのbuildGradleファイルにローカルパスが表示されてしまう

##解決方法
1. libsフォルダをproject直下ではなく、app直下に移動
1. `compile fileTree(include: ['*.jar'], dir: 'libs')`
を追加
1. 自動で追加されたローカルパスの入った行を削除

(libsというディレクトリに入っている拡張子jarのファイル全て）という意味

##感想
GitHubにあげることを考えると慎重にならないといけないところですね。
[AndroidStudioとGitHubの連携]developブランチがうまいこといかなかった時の対処法

##やること
masterから分岐したdevelopブランチをpullしたい

developにはそれぞれのブランチをmergeするブランチとして使っています。
最終的にdevelopをmasterにmergeして終了です。

>通常
新しく作業する時のBranchの切り方
http://qiita.com/tesoro/items/5f5ff14e5e1c1b9959d8

##問題
行きたい場所で右クリック->checkOutしてもdevelopがついてこない

##対処
作業していた場合
1. VCS->EnableVersionControl
2. Git（Gitの連携）
3. Don't checkOut（stashします）
4. 「作業していなかった場合」に続きます

作業していなかった場合
1. 右下ブランチの名前からLocalDevelopをDelete（Localです！！Remoteではありません）
2. Remoteのdevelop->check as local branch
3. 名前「develop」
4. pull
シェルスクリプト(bash)のif文とtestコマンド([])自分メモ

シェルスクリプト(bash)のif文を書く時、あれなんだっけと忘れることがよくあるので簡単にまとめてみました。

# 参考

大切なことはこちらに書いてあります

[if 文と test コマンド](http://shellscript.sunone.me/if_and_test.html)

# 前提知識

+ if文では条件式に指定されたコマンドの終了ステータスを判定し分岐をしている。終了ステータスが0の場合に真となり、そうでない場合には偽となる
+ `if []`と書いた場合、`if test`と書いたことと同じ扱い（[]はtestコマンドの略式）
+ `[ "A" = "A" ] `というように[]の間にスペースがないとエラーとなる。例えば`["A" = "A"]`とか書くとエラー。[がコマンドだと思うと理解しやすい
+ 条件式で<,>,<=,>=は使えない。代わりに-lt(<),-gt(>),-le(<=),-ge(>=)というのが使える。それぞれ-lt(less than),-gt(greater than),-le(less than or equal),-ge(greater than or equal)と覚える。でもわかりにくいので全部書いておきました。
+ 困ったら`man test`で確認すればOK

# コマンド集

## 文字列が等しいか

```bash
#!/bin/bash

hoge="A"
fuga="A"

if [ $hoge = $fuga ]; then
  echo "文字列は同じです"
else
  echo "文字列は違います"
fi
```

## >を条件式に使いたい

-gt(greater than)を使う

```bash
#!/bin/bash

var1=1
var2=2

# >
if [ $var2 -gt $var1 ] ; then
  echo "var2はvar1より大きい"
else
  echo "var2はvar1以下"
fi
```

## <を条件式に使いたい

-lt(less than)を使う

```bash
#!/bin/bash

var1=1
var2=2

# <
if [ $var1 -lt $var2 ] ; then
  echo "var1はvar2より小さい"
else
  echo "var1はvar2以上"
fi
```

## >=を条件式に使いたい

-ge(greater than or equal)を使う


```bash
#!/bin/bash

var1=2
var2=2

# >=
if [ $var2 -ge $var1 ] ; then
  echo "var2はvar1以上"
else
  echo "var2はvar1より小さい"
fi
```

## <=を条件式に使いたい

-le(less than equal)を使う


```bash
#!/bin/bash

var1=2
var2=2

# <=
if [ $var1 -le $var2 ] ; then
  echo "var1はvar2以下"
else
  echo "var1はvar2より大きい"
fi
```

## ディレクトリの存在確認をしたい

-dオプションを使う。

```bash
#!/bin/bash

DIR="test"

if [ -d ${DIR} ]; then
  echo "ディレクトリが存在します"
else
  echo "ディレクトリが存在しません"
fi
```

## ファイルの存在確認をしたい

-fオプションを使う

```bash
#!/bin/bash

LOCK_FILE="lock"

if [ -f ${LOCK_FILE} ]; then
  echo "ファイルが存在します"
else
  echo "ファイルが存在しません"
fi
```

## シェルスクリプト内で実行したコマンドが正常終了したかを判定

コマンド実行後、`$?`によって直前のコマンドの終了ステータスコードが取得できるので0（正常終了であるか）判定する

```bash
#!/bin/bash

curl http://www.google.co.jp >/dev/null 2>&1

if [ $? = 0 ]; then
  echo "curlは正常終了"
else
  echo "curlは異常終了"
fi
```

`$?`は直前のコマンドの終了ステータスコードのみ保持しているので判定したいコマンドとif文の間で別のコマンドの実行をする場合には一度変数に$?の内容を保持しておく

## NOT条件を使う

!オプションを使う。

```bash
#!/bin/bash

hoge=true

if [ ! $hoge ]; then
  echo "こっちにはこない"
else
  echo "こっちになる"
fi
```

## AND条件、OR条件を使う

testコマンドの-a(AND条件）、-o(OR条件）で書けるが、&&(AND条件）、||(OR条件）の方が個人的には分かりやすい。
ただし、-a、-oは１つのtestコマンドで条件判定するのに対し、&&、||は終了ステータスコードを判断して以降の処理を実行するものなので書き方が少し違う点に注意。

-a、-oを利用する場合

```bash
#!/bin/bash

LOCK_FILE="lock"
DIR="dir"

if [ -f ${LOCK_FILE} -a -d ${DIR} ]; then
  echo "ファイルとディレクトリが存在します"
else
  echo "ファイルかディレクトリのいずれかが存在しません"
fi
```

&&、||を利用する場合

```bash
#!/bin/bash

LOCK_FILE="lock"
DIR="dir"

if [ -f ${LOCK_FILE} ] && [ -d ${DIR} ]; then
  echo "ファイルとディレクトリが存在します"
else
  echo "ファイルかディレクトリのいずれかが存在しません"
fi
```
Qiita > UI > もっと見る > 馴染めない

```txt:動作確認
Chrome (バージョン 46.0.2490.80 m) on Windows 7pro
```

Qiitaのトップページでよく見るのは「すべての投稿」。
すべての投稿では「もっと見る」ボタンを押すと１ページずつ一覧が増えていく。

馴染めないのは、その一覧の中の記事を見た後の処理。

1. もっと見るを数回クリック -> 一覧が数ページ分表示された状態になる
2. 一覧の記事をクリック -> 記事が開く
3. 記事を読む / ストックする
4. ブラウザのBackボタンで戻る -> 一覧が１ページのみの表示に戻っている

4の段階で、直前に見ていた一覧がクリアされている。

どういうUIにするのがいいのだろうか?

- 「もっと見る」をやめて、ページ表示にする。ページは記事から戻った時も有効にする。
- 一覧から記事を開く時に、新しいタブで開くようにする

使用者側では、マウス右クリック -> 新しいタブで開く、で使うのがとりあえずの方法。

<hr>
(追記 2015/10/28)
@fuzzball さんのコメント

>これに関しては問題ないのですが、一気に古いページに飛べないなど、
このUIは使い勝手が悪いと思ってます。

これは確かに使い勝手が悪いですね。時々そう思いながら、この記事を書くときには忘れていました。

「もっと見る」の機能を実装するサイトが増えてきている気がしますが、そういうサイトで過去のページを見るのは面倒ですね。
HAXMの読み方

初投稿がこんなくだらないことでいいのか？って感じですが、自信なかったので読み方を確認してみた。

# HAXMとは
Intel Hardware Accelerated Execution Manager (Intel® HAXM) 
Androidエミュレータを高速化するためのハードウェア支援環境
https://software.intel.com/en-us/android/articles/intel-hardware-accelerated-execution-manager

# 読み方
で、本題の読み方ですが、ググったら最初に はてブ が出てきたが
肝心のYouTubeへのリンク先が削除されていたので、YouTubeで再検索したら次の通りでした。
Intelのビデオが出てきたのでこれで確認。
https://youtu.be/KXUQ823RGcc?t=10s

ハクサム、ハクセムって感じ？
技術英語 > Something doesn't sit well.

ふと思い出したフレーズ (出典は失念)。

> Something doesn't sit well. (なんか腑に落ちない)

sitという動詞を使うのが面白くて覚えた。

http://eow.alc.co.jp/search?q=sit+well&ref=sa
> sit well with
> 〔状況・考え方・行動・釈明などが〕～にとって納得できる
PHPでMysql操作するときのコードまとめ


Webアプリ制作に欠かせないのがサーバーサイド言語とデータベースの連携です。
PHPのPDOオブジェクトを用いてMySQLに接続し、読み込み・書き込みをするときに使えるコードをまとめてみました。データベースのログイン情報などを適宜書き換えていただくだけで、ほぼコピペで動くと思います。
（コードサンプル中にtry-catchを書いていたのですが、それだと丸ごとコピペできなくなってしまうためtryの中身だけ書くようにしました。必要に応じてtry-catchで囲んでくださいということで…）

##データベースに接続する
書き換える箇所：DB名、ユーザー名、パスワード

とりあえずこれで`$pdo`を作ってデータベースに接続します。これがないと他のコードは動きません。

```php

$pdo = new PDO('mysql:host=localhost;dbname=DB名;charset=utf8', 'ユーザー名','パスワード');
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
//$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
```
※３行目については、手元の書籍にあったのを意味も分からず入れていたのですが、エミュレーションの無効化は無くてもいい（無い方がいい？）とコメントで教えていただきました。ありがとうございます。

##テーブルから情報を取得(SELECT)

書き換える箇所：テーブル名

~~whileの内部は、テーブルの内容を配列`$result`に入れる処理になっています。
whileの中の`$row`にテーブル一行分のデータが入っていますので、煮るなり焼くなり好きにしてください。~~
$rowsの中にレコード達が入っています。
（fetchAllを知らなくて、whileとただのfetchで一行ずつ取り出すとかいうことをやっていました…場合によってはその方がいいこともあるかもしれないですが）

```php
$sql = "SELECT * FROM テーブル名";
$stmh = $pdo->prepare($sql);
$stmh->execute();
$rows = $stmh->fetchAll();
```


##テーブルの行を追加する(INSERT)

```php
	$sql = "INSERT INTO テーブル名(カラム名１, カラム名２, …) VALUES(:カラム名１, :カラム名２, …)";
	$stmh = $pdo->prepare($sql);
	$stmh->bindValue(":カラム名１", 内容１);
	$stmh->bindValue(":カラム名２", 内容２);
	//以下略...
	$stmh->execute();
```

##テーブルを更新する(UPDATE)

```php
	$sql = "UPDATE テーブル名 SET カラム名 = :カラム名";
	$stmh = $pdo->prepare($sql);
	$stmh->bindValue(":カラム名", 内容);
	//以下略...
	$stmh->execute();
```

##書き込み系（INSERT,UPDATE）について
###トランザクション
複数の命令を実行する途中にエラーになったとき、データの整合性を守るために一連の命令を全部取り消すrollBackを使います。

```php
try{
	$pdo->beginTransaction();
	/*
	処理の内容
	*/
	$pdo->commit();
}catch(PDOException $Exception){
	$pdo->rollBack();
	echo "Updating error : ".$Exception->getMessage();
}
```
###bindValue
こっちはINSERT,UPDATEに限りませんが
SQLにベタ書きしてもいい気がするのですが、ループで同じようなSQLを回すときはbindValue使った方がいいのかな？
あと型によって値を`'`で囲んだり囲まなかったりとかをうまいことやってくれる？　でもそれには第３引数で型を指定しないといけないんだっけ…


##SQL書くときの注意
SQLのテーブル名、カラム名が日本語だったりスペース入ってたり、予約語だったり（これは特に注意）すると囲み記号で囲ってやらないといけないわけですが、このとき使う記号は`` `（バッククォート）``です！！　`'（シングルクォート）`や`"（ダブルクォート）`ではエラー吐かれます。逆にvalueの文字列を囲むときは「`'`」「`"`」なのだけども。
（個人的に、注文を入れるテーブルとかカラムに「order」と名付けたら予約語だったというのがすごくよくあります）
Javaメモ

#javaメモ

##windows版javacで日本語交じりのutf-8のソースコードをコンパイルした時にエラーが出る時の対処方法

windows版javacで日本語交じりのutf-8のソースコードをコンパイルした時に版でエラーが出るのは、windows版javacがshift_JISで日本語を読み取ってしまうのが原因なので、次のようにコンパイルでエンコーディングを指定すれば上手くいきます。

javac -encoding utf-8 [ソースコード]
python 後で思い出せる関数づくり

##何週間後とかに見ても、この関数何やってんの？って思い出せない時
関数の最初にコメントを入れたり、引数にも説明を入れれるのでその使い方と見方

作ったサンプル：https://github.com/KodairaTomonori/Qiita/blob/master/default_module/syntax/function.py

※ knoguchiさんの指摘があり、修正させていただきました(2015/10/28)。

###例：単純な足し算のプログラム
```comennt.py
def addition(num_a: int, num_b: int, flag:bool=True) -> int:
    '''
        この関数は、num_a + num_bを計算して返すプログラムです。
        flagをTrueにすると結果を見やすくprintしてくれます。
    '''
    if flag: print('{} + {} = {}'.format(num_a, num_b, num_a + num_b) )
    return num_a + num_b

if __name__ == '__main__':
    result = addition(1234, 4321)
    print('result:', result) 
    print('引数の情報: ', addition.__annotations__)
    print('関数の説明: ', addition.__doc__)
```
###出力
```output.txt
1234 + 4321 = 5555
result: 5555
引数の情報:  {'num_b': <class 'int'>, 'num_a': <class 'int'>, 'return': <class 'int'>, 'flag': <class 'bool'>}
関数の説明:  
        この関数は、num_a + num_bを計算して返すプログラムです。
        flagをTrueにすると結果を見やすくprintしてくれます。
```
###解説
`addition`関数自体は、簡単な足し算をしてくれるプログラムで、`flag`を`False`にすると結果だけを返してくれます。

####関数に説明を入れる
引数に説明を入れたい時は、
`(num_a: int, num_b: int, flag:bool=True) -> int`
辞書みたいに書いていきます。左に引数名、右に型(引数:型)そして、デフォルト値を与えたい時は、後ろに`=True`のように加えるだけです。
最後に、`-> int`で、返り値の型も入れることができます。

この、引数の説明の参照の仕方は、`addition.__annotations__`とすることで、見ることができます。


関数に説明文を入れる時は、`def`で宣言した次のところで文字列を入れることでできます。
この説明文の参照の仕方は、`addition.__doc__`とすることで、見ることができます。

##まとめ
引数名をしっかり後で見てもわかりやすくすることも重要ですが、説明文を入れることでもっとわかりやすくなるので、これからは面倒くさがらず書こうと思います。
できる限り git shallow clone で頑張る話

巨大な git レポジトリがあった場合に、できる限りそれを fetch することはさけたい。必要な branch だけ、 shallow clone して利用したい。その際に次のようにすればいいだろう、というメモ。

---

git shallow clone した場合、素直に fetch しても、最初に clone してきたときの branch しか取得できない。

.git/config の [remote "name"] の fetch を複数個化すれば、その分だけ fetch してくれるようになる。

これを変更する正規の手順は、 `git remote set-branches`.

---

git には、 clone せずとも、 remote の branch をリスト表示する機能がある。

    git ls-remote --tags git://github.com/git/git.git

これと組み合わせれば、最小限の branch だけを手元に置きながら作業ができる。
複数行のテキスト要素を真ん中へ配置する（display table/table-cell）

#複数行のテキスト要素を真ん中へ配置するにはdisplay table/table-cellを使う。
対応ブラウザ ie8以降

##display table/table-cellの使い方
```lang:html
<div class="parent">
  <span class="child">テキスト</span>
</div>
<div class="parent">
  <span class="child">テキスト<br>テキスト</span>
</div>
<div class="parent">
  <span class="child">テキスト<br>テキスト<br>テキスト</span>
</div>

```

```lang:css
.parent {
  height: 200px;
  display: table;
}

.child {
  display: table-cell;
  vertical-align: middle;
}
```

親要素に「display: table;」
子要素に「display: table-cell;」、「vertical-align: middle;」
を設定する。
windows10でAVRISP MKIIを使う方法

##Windows10でISPMK2を使えるようにする

[こちら](http://labs.nevion.com/support/tools/Atmel/)の[driver-atmel-bundle-7.0.888.exe](http://labs.nevion.com/support/tools/Atmel/driver-atmel-bundle-7.0.888.exe)をダウンロードし実行

[ここ](https://osdn.jp/projects/sfnet_libusb-win32/releases/)のlibusb-win32-devel-filter-1.2.6.0.exeをインストールしFilterWizardを起動しmkiiを選択し実行。

これでArduino IDEでispmkiiを使ってAVR開発ができます
PythonでEvernoteのノートを取得

EvernoteのAPIを調べてるうちに、ノートを作成する記事はあるのですが、既存のノート一覧を取得するものは少ないなーと思ってメモ。

リファレンス
https://dev.evernote.com/doc/reference/

```
import evernote.edam.notestore.ttypes as NoteStore
from evernote.api.client import EvernoteClient

auth_token = "your token"
client = EvernoteClient(token=auth_token)
note_store = client.get_note_store()

note_filter = NoteStore.NoteFilter()
note_filter.words = ''  # 好きなキーワードをどうぞ
notes_metadata_result_spec = NoteStore.NotesMetadataResultSpec()

notes_metadata_list = note_store.findNotesMetadata(note_filter, 0, 100, notes_metadata_result_spec)  # ノート情報を100件取得

for note_guid in notes_metadata_list.notes:
    note = note_store.getNote(note_guid.guid, True, False, False, False)
    print note.title
```

ちなみに note から取れる情報はこちら。
https://dev.evernote.com/doc/reference/Types.html#Struct_Note
独自プログラミング言語を作るメモ


## 必要なもの
* [BNFC](http://bnfc.digitalgrammars.com/)
* [Java CUP runtime](http://www2.cs.tum.edu/projects/cup/)

	bncfコマンドが使えるようにする

	CUPはjavaコマンドで参照されるところに配置する

## BNFCでBNF記法した構文から雛形を生成

文法に従って実装したい言語のcfファイルを作成する

```Bash
$bnfc -m -java xxx.cf
```

必要なファイル群とMakefileが生成される

## 構文解析
```Bash
$make
$echo "a:=1; print a"|Java xxx/Test
// もしくは
$cat test.xxx|Java xxx/Test

```

Testに構文を定義したコードを渡すと構文解析をして構文要素を表示することができる

---
**そのうち加筆する予定**
[bash]alias rm='rm -i'やalias rm='mv -i ~/.Trash'を卒業する。

#alias rm='rm -i'やalias rm='mv -i ~/.Trash'を卒業する。

##説明書くの（眠いのd）また今度。スクリプト晒します。

```bash
touch ~/rmf
chmod +x ~/rmf
echo "rmf='~/rmf'" >> ~/.bash_profile
vi ~/rmf
``` 

- 下記のスクリプトを貼り付ける

```bash
!/bin/bash

if [ ! -e $@ ]; then
    echo "rmf $@: No such file or directory"
    exit 1
fi

echo -n "Delete? [y/N] > "
read INPUT

case "$INPUT" in
   '' | [Yy]* )
       if [ "$@" != / ]; then
          rm -rf $@
       else
          echo "Canceled. (dangerous operation)"
       fi
       ;;
   [Nn]* ) echo "Canceled." ;;
   * ) echo "Canceled." ;;
esac
```

##使用方法
###`rm -rf`の代わりに`rmf`コマンドを実行
###問い合わせは1回だけです！

```bash
$ rmf hoge
Delete? [y/N] > y
```

###余談 ルートを消してみる->大丈夫！

```bash
$ rmf /
Delete? [y/N] > y
Canceled. (dangerous operation)
```
設定ファイル(App.config)でJSONを使うには

# キー1つで複数の値をまとめて扱う

JSONのフォーマットやエスケープについては以下が分かりやすい。
[JSONについて](http://hakuhin.jp/js/json.html)

XMLのエスケープは以下。
[XMLエスケープ文字](http://gogodiet.net/z/xml/3_10.htm)

&lt;appSettings&gt;のセクションでは基本的には1つのキーに対し値を1つしか設定できない。
でも、関連する値をJSONでまとめて設定できると楽かもしれない。

## 環境

- Visual Studio Express 2013
- Visual Basic
- .NET Framework 4.5

Json.NETが便利らしいけど、今回は特に使用せず。


## App.config の設定

- ```<add key="abc" value='xyz' />```みたいにvalueの値をシングルクォートで囲うとJSONにダブルクォートがそのまま使えるのでちょっとだけ見やすくなる。
- 設定値にシングルクォートやダブルクォートがある時はエスケープすれば使用が可能。
- あと、適切な設定値が思いつかなかったのでデータはテキトー。

```vbnet:app.config
<configuration>
  <appSettings>    
    <add key="json" value='
      {
        "Employees": [
          {"Id": 1, "Name": "John Doe", "Greeting": "alert(&apos;Hello, world!&apos;);"},
          {"Id": 2, "Name": "Anna Smith", "Greeting": "&lt;strong&gt;Hello, world!&lt;/strong&gt;"},
          {"Id": 3, "Name": "Peter Jones", "Greeting": "print(\"Hello, world!\")"},
          {"Id": 4, "Name": "Tyler Durden", "Greeting": null}      
        ]
      }
    ' />
  </appSettings>
</configuration>
```

## サンプルソース

以下の参照設定を追加する。

- System.Configuration.dll
- System.ServiceModel.Web.dll

```vbnet:Form1.vb
Imports System.Configuration
Imports System.ServiceModel.Dispatcher
Public Class Form1

    Public Class Employee
        Public Property Id As Integer
        Public Property Name As String
        Public Property Greeting As String
    End Class

    Public Class Company
        Public Employees As List(Of Employee)
    End Class

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        ' 設定ファイルから値を取得
        Dim json As String = ConfigurationManager.AppSettings("json")

        Dim jsonQuery As New JsonQueryStringConverter()

        Dim com As Company = jsonQuery.ConvertStringToValue(json, GetType(Company))

        For Each emp As Employee In com.Employees
            Console.WriteLine(String.Format("ID:{0},Name:{1},Greeting:{2}", _
                                            emp.Id.ToString(), _
                                            emp.Name, _
                                            emp.Greeting))
        Next

        com = Nothing
        jsonQuery = Nothing


    End Sub

End Class
```

## 実行結果

```vbnet
ID:1,Name:John Doe,Greeting:alert('Hello, world!');
ID:2,Name:Anna Smith,Greeting:<strong>Hello, world!</strong>
ID:3,Name:Peter Jones,Greeting:print("Hello, world!")
ID:4,Name:Tyler Durden,Greeting:
```
Railsの自動ロードのパスの調べ方

どこをロードしていてどこがされていないのかよくわからなくなるのでメモ
pryをインスト―ル後にrails cを実行し、下記を実行するとだいたいわかるはず

```
pry(main)> ActiveSupport::Dependencies.autoload_paths
# これで色々出力される（デフォルトのロードパス？）
=> ["/Users/USERNAME/rails_path/app/assets/*",
 ...]
pry(main)> YOUR_APPLICATION_NAME::Application.config.autoload_paths # YOUR_APPLICATION_NAMEはconfig/application.rbに記載してあるはずなので見てみよう
# 何も設定していなかったら空
=> []
```
NSDateを任意の形式の文字列に変換するスニペット

よく使う割に思い出せないのでメモ。
NSDateFormatterを呼び出したりするのがめんどいのでextension として付与する。


```swift:GetDateString
// 日付の文字変換系
extension NSDate{
	func getDateString(dateString:String) -> String{
		var formatter: NSDateFormatter = NSDateFormatter()
		formatter.locale     = NSLocale(localeIdentifier: "ja")
		formatter.dateFormat = dateString
		return formatter.stringFromDate(self)
	}
    // example
    // 2015/09/09 -> "yyyy/MM/dd"
}
```
ScalaでExcelを操作する 基本的な読み書き編


ScalaでExcelファイルを操作する機会があったので、メモを残しておきます。今回は[Apache POI](https://poi.apache.org/)を使いました。

# POIの導入

```build.sbt
libraryDependencies += "org.apache.poi" % "poi" % "3.13"

```

# Excelを読む

## ワークブックの取得

```scala
import org.apache.poi.ss.usermodel._

val workbook = WorkbookFactory.create(new File("/path/to/excel/file"))

```

## シートの取得
### インデックスで取得

```scala 
val sheet = workbook.getSheetAt(0)

```

### 名前で取得

```scala
val sheet = workbook.getSheet("新しいシート")
```

## 行の取得

```scala
val row = sheet.getRow(0)
```

## セルの取得
```scala
val cell = row.getCell(0)
```

## セルの値の取得
セルのタイプ毎に`getCellXXXValue`が違う点だけ注意です。

```scala
val value = cell.getCellType match {
      case Cell.CELL_TYPE_BLANK => cell.getStringCellValue
      case Cell.CELL_TYPE_BOOLEAN => cell.getBooleanCellValue
      case Cell.CELL_TYPE_ERROR => cell.getErrorCellValue
      case Cell.CELL_TYPE_FORMULA => cell.getCellFormula
      case Cell.CELL_TYPE_NUMERIC => cell.getNumericCellValue
      case Cell.CELL_TYPE_STRING => cell.getStringCellValue
}
```

# Excelに書く
## セルの取得
セルの取得までは読む場合と同じ。

## セルに値をセットする

```scala
cell.setCellValue("hoge")
```

## ファイルに出力する

```scala
val out = java.io.FileOutputStream("/path/to/output")
workbook.write(out)
out.close
```

当たり前ですが、`cell.setCellValue`しただけだど、Excelファイルにはなんら反映されないので注意してください。


以上、基本的なExcelの読み書きでした。
SSH関連ファイル操作いろいろ

## 主なファイルの場所
- ユーザの秘密鍵 … ```~/.ssh/id_rsa```
- ユーザの公開鍵 … ```~/.ssh/id_rsa.pub```
- ホストの秘密鍵 … ```/etc/ssh/ssh_host_rsa_key```
- ホストの公開鍵 … ```/etc/ssh/ssh_host_rsa_key.pub```
- 接続したことのあるホスト一覧 … ```~/.ssh/known_hosts```
- 接続を受け入れる公開鍵一覧 … ```~/.ssh/authorized_keys```

## 秘密鍵の操作
### 表示
```
$ cat {秘密鍵ファイル}
-----BEGIN RSA PRIVATE KEY-----
xxxxxxxxxxx
-----END RSA PRIVATE KEY-----
```

書いておいて何だがむやみに表示するものではないと思う。

### 長さ表示
```
$ openssl rsa -text -noout -in {秘密鍵ファイル} | head -1
Private-Key: (2048 bit)
```

### 公開鍵の生成
```
$ ssh-keygen -yf {秘密鍵ファイル} > {公開鍵ファイル}
```

## 公開鍵の操作
### 表示
```
$ cat {公開鍵}
ssh-rsa xxxxxxxx== comment
```

### 長さと fingerprint 表示
```
$ ssh-keygen -lf {公開鍵}
2048 xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx id_rsa.pub (RSA)
```


## 鍵ペア生成
### ユーザの鍵ペア生成
```
$ ssh-keygen
```

### ホストの鍵ペア生成し直し
```
# shred -u /etc/ssh/*_key /etc/ssh/*_key.pub
# service sshd restart
```


## 外部ホスト関連
### ホストの公開鍵を外部から取得
```
$ ssh-keyscan {ホスト名}
```

実行例

```
$ ssh-keyscan github.com
github.com ssh-rsa xxxxxxxxxxxx==
```

### 接続したことのあるホスト情報を削除

```
$ ssh-keygen -R {ホスト名}
```

~/.ssh/known_hosts から該当行が消える。
基礎Ruby on rails 初学者の復習（自分用） 

わからないところを何回もググってしまうため、自分のメモ用に作成しています。
#配列をグループ化
```
%w(1 2 3 4 5).in_groups_of(4){ |g| p g }
```
#%記法
文字列リテラル、コマンド出力、正規表現リテラル、配列式、シンボルでは、 %で始まる形式の記法を用いることができます。 文字列や正規表現では、`"', `/' など(通常のリテラルの区切り文字)を要素 に含めたい場合にバックスラッシュの数をコードから減らす効果があります。 また配列式では文字列の配列を簡単に表現できます。それぞれ以下のように対 応します。

%!STRING! : ダブルクォート文字列
%Q!STRING! : 同上
%q!STRING! : シングルクォート文字列
%x!STRING! : コマンド出力
%r!STRING! : 正規表現
%w!STRING! : 要素が文字列の配列(空白区切り)
%W!STRING! : 要素が文字列の配列(空白区切り)。式展開、バックスラッシュ記法が有効
%s!STRING! : シンボル。式展開、バックスラッシュ記法は無効

```
%(()) => "()"
```
配列式の%記法はシングルクォートで囲んだ文字列を空白文字で分割したのと 同じです。たとえば、

```
%w(foo bar baz)
```
は['foo', 'bar', 'baz']と等価です。

バックスラッシュを使って空白を要素に含むこともできます。

```
%w(foo\ bar baz)
```

=> ["foo bar", "baz"]
%W は、%w と同様ですが、ダブルクォートで囲んだ文字列のように、式展開、 バックスラッシュ記法が使用できます。空白による分割は式展開を評価する前 に行われます。

```
v = "c d"
%W(a\ b #{v}e\sf #{})

=> ["a b", "c de f", ""]
```
#検索条件を指定して最初の1件を取得(find_by)
使い方

```
モデル.find_by(条件)
```
例

category_idが1の最初の値を取得

```
Page.find_by category_id: 1
 SELECT "pages".* FROM "pages" WHERE "pages"."category_id" = 1 LIMIT 1
 ```
Ansible メモ

# 参考サイト

[実践！Ansibleベストプラクティス（前編）][sakura1]
[sakura1]: https://knowledge.sakura.ad.jp/3084/

[実践！Ansibleベストプラクティス（後編）][sakura2]
[sakura2]: https://knowledge.sakura.ad.jp/3086/

[Ansible の Role を Ansible Galaxy に登録し再利用][qiita1]
[qiita1]: https://qiita.com/kouji-kojima/items/2525ea87952d4039bad7

# Ansible 利用時の懸念と対応（未完）
- ssh 接続ができる必要がある．
- ssh 接続時のパスワードについて :: 入力不要にする or 入力する or 補助ツールを利用する
- 接続先で管理者権限でコマンド等を実行できる必要がある :: sudo 等を利用する
- 接続先で sudo を利用する場合 :: 入力不要にする or 入力する or 補助ツールを利用する

# with_items を使うときの注意

参照する item はループの中になる。

- 間違い

```
- debug:
    msg: "{{ item }}"
    with_items: "{{ message_list }}"
```

- 正しい

```
- debug:
    msg: "{{ item }}"
  with_items: "{{ message_list }}"
```

# playbook を個別ホストで実行する。

-l オプションを使う

```shell-session
% ansible-playbook -i ~/ansible_hosts -l taget_host test.yml
```

# playbook の確認
--list-hosts, --list-tasks, --check オプション

```shell-session
% ansible-playbook -i ~/ansible_hosts --list-hosts --list-tasks --check test.yml
```
# 定義されている変数を確認する

```
ansible -i hosts -m debug -a "var=hostvars" all
ansible -i hosts -m debug -a "var=hostvars['localhost']" all
```

# デバッグメッセージを -v オプションで on/off する

```
- debug:
   msg: "This only displays with ansible-playbook -vv+"
   verbosity: 2
```

# 初回接続時の ssh host キー確認を無視する。
$HOME/.ansible.cfg に下記設定を追加する。

```shell-session
[defaults]
host_key_checking = False
```
# ディストリビューション、バージョン毎の設定
Best Practice から

```yaml
host: all
  tasks:
    - name: group by distribution and version
      group_by: key="{{ ansible_distribution }}_{{ ansible_distribution_version }}"

host: Ubuntu_14*
 ......
```

個人的にはこっちの方がわかりやすいけど、どうだろう。

```yaml
when: ansible_distribution == 'Ubuntu' and ansible_distribution_release == 'precise'
```

# Deployment Management でやりたいこと。
- 同じことを繰り返したくない。
- 何度行っても同じ構成になるようにしたい。（設定ミスの排除含む）

## 必要な機能
- すべてのホストで共通の設定（すべてってなんだ）
- OS別の共通設定（Windows, Linux のバージョン、ディストリビューション毎の共通設定）
- 役割毎の設定（Web、DBなどなど）
- 地域別の設定（タイムゾーン、NTPサーバ、リポジトリサーバなど距離が関係するもの）
- その他、自分で考えたグループ（思いつかない、DMZ に配置した Web サーバとか役割と地域で識別できる？）
- ホスト毎の個別設定（ホスト名、IPアドレス、IP は DHCP か？）
- 安定していて、学習コストが低い（本質ではない。大事なのは設定の中身）

# その他
構成管理ツール　Configuration Management tool というより、Deployment Management tool の方が自分にはしっくりくる。
pecoでrubicureをより便利に使う

## <i class="fa fa-heart" style="font-size:1em;"></i> rubicureとは？
Ruby界の鬼才、キュアエンジニアこと :chestnut: @sue445 さん作のruby gem。
プリキュアのタイトルや名前を出力してくれる非常に**実用的**なCLIツールです。

<i class="fa fa-external-link" style="font-size:1em;"></i> [sue445/rubicure - GitHub](https://github.com/sue445/rubicure)

## <i class="fa fa-list" style="font-size:1em;"></i> 機能抜粋
こんな素敵機能がついています。

```ruby
require 'rubicure'

puts Precure.now
# => {:series_name=>"go_princess", :title=>"Go!プリンセスプリキュア", :started_date=>Sun, 01 Feb 2015, :girls=>["cure_flora", "cure_mermaid", "cure_twinkle", "cure_scarlett"]}

print Precure.smile.girls.map(&:human_name), "\n"
# => ["星空みゆき", "日野あかね", "黄瀬やよい", "緑川なお", "青木れいか"]

azatoi = %i(rosetta pine peace)
azatoi.each { |e|print Cure.send(e), "\n" }
# => 四葉ありす
# => 山吹祈里
# => 黄瀬やよい
```

気になる方はGitHubで詳細をご確認ください。

## <i class="fa fa-search-plus" style="font-size:1em;"></i> <i class="fa fa-heart" style="font-size:1em;"></i> pecoでプリキュアを検索
```bash
$ ruby -rrubicure -e "puts Precure.smile.girls" | peco
```

![peco_rubicure.gif](https://qiita-image-store.s3.amazonaws.com/0/43480/210efa22-dd75-364a-652a-748e12b10fd6.gif)

## <i class="fa fa-book" style="font-size:1em;"></i> 外部資料
* <i class="fa fa-external-link" style="font-size:1em;"></i> [sue445/rubicure - GitHub](https://github.com/sue445/rubicure)
* <i class="fa fa-external-link" style="font-size:1em;"></i> [Rubyでプリキュアを作った #cure_advent - くりにっき](http://sue445.hatenablog.com/entry/2013/12/16/000011)
【swift】【Xcode7】ボタンを押すと１００足されるプログラム

すごい初心者用です。
とても単純なプログラムなのに、慣れないオプショナル型に四苦八苦したので残しておきます。
オプショナル型に翻弄されたのは自分だけじゃないはず…

#ボタンとラベルの設置
<img width="300" alt="スクリーンショット 2015-10-27 22.14.39.png" src="https://qiita-image-store.s3.amazonaws.com/0/60753/4c47bce8-2cce-d64f-1925-651ea9a01e20.png">

ラベルとボタンを上記のように設置します。
ボタンのtextは適当に変えてください


名前は以下のように設定しました。

ボタン
<img width="258" alt="スクリーンショット 2015-10-27 22.15.35.png" src="https://qiita-image-store.s3.amazonaws.com/0/60753/a8d4e99e-0edb-f52a-5b9b-08a6ec50dada.png">

ラベル
<img width="252" alt="スクリーンショット 2015-10-27 22.17.09.png" src="https://qiita-image-store.s3.amazonaws.com/0/60753/10d80f18-7865-2909-61a0-40c9a3113035.png">

#コードの編集
```swift
import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

    @IBOutlet var goukei: UILabel!
    @IBAction func button1(sender: AnyObject) {
        
            let goukeiA:Int? = Int(goukei.text!)
            
            let sum:Int? = goukeiA! + 100
            
            goukei.text = String(sum!)
    }
}
```


重要なのは一番下のbutton部分です。
一行ずつ解説をしていきたいと思います。

```swift
let goukeiA:Int? = Int(goukei.text!)
```
上記の部分では、ラベル（goukei）に書かれたString型をInt型へ変換（キャスト）しています。
この時、"goukei.text"はラベルの中の文字を表しています。

また、オプショナル型である「！」はラベルテキスト内にnilが含まれていないか確認を行っています。
swiftはオプショナル型を推奨しているので、変数を宣言する際いちいち確認をする必要があるみたいです。

左側の"let goukeiA:Int?"の部分ではgoukeiAというInt型の変数を宣言しています。
これはオプショナル型の「？」を使っています。「？」はnilが入ってもいいよという宣言で、「？」を表記していないとコンパイルエラーが起きてしまいます。

<br>

```swift
let sum:Int? = goukeiA! + 100
```
上記では、ラベルで書かれている値に100を足しています。
それだけです。

<br>

```swift
goukei.text = String(sum!)
```
ここではsumに代入された値をString型に変換しラベル（goukei）へ代入しています。
ここでも、sumに「！」をつけnil確認を行っています。
これで、ラベルのテキストへ反映することができます。


#最後に
ラベルの値をキャストして同時に「+１００」できないのかなと…（エラーになる）
キャストと「+１００」できれば１行削減できるのに…

淡々と説明しましたが間違いがあったらお手数ですがご指摘をお願いいたします…
dplyr::mutate()で起こるエラーについてのメモ

ルールがよくわからない。。最後の3つはなんで成功するんだろう。

```r
library(dplyr)

data.frame(X=1:5) %>% mutate(X2 = data.frame(a=1))
#> Error: not compatible with STRSXP

data.frame(X=1:5) %>% mutate(X2 = data.frame(a=1:5))
#> Error: not compatible with STRSXP

data.frame(X=1:5) %>% mutate(X2 = data.frame(a=1, b=2))
#> Error: wrong result size (2), expected 5 or 1

data.frame(X=1:5) %>% mutate(X2 = data.frame(a=1:5, b=2:6))
#> Error: wrong result size (2), expected 5 or 1

data.frame(X=1:5) %>% mutate(X2 = data.frame(a=1, b=2, c=3, d=4, e=5))
#> Error in match.names(clabs, names(xi)) : 
#>   names do not match previous names
#> In addition: Warning message:
#> In format.data.frame(x, digits = digits, na.encode = FALSE) :
#>   corrupt data frame: columns will be truncated or padded with NAs

data.frame(X=1:5) %>% mutate(X2 = data.frame(a=1:5, b=2:6, c=3:7, d=4:8, e=5:9))
#>   X X2.a X2.b X2.c X2.d X2.e
#> 1 1    1    2    3    4    5
#> 2 2    2    3    4    5    6
#> 3 3    3    4    5    6    7
#> 4 4    4    5    6    7    8
#> 5 5    5    6    7    8    9


data.frame(X=1:5) %>% mutate(X2 = list(a=1, b=2, c=3, d=4, e=5))
#>   X X2
#> 1 1  1
#> 2 2  2
#> 3 3  3
#> 4 4  4
#> 5 5  5

data.frame(X=1:5) %>% mutate(X2 = list(a=1:5, b=2:6, c=3:7, d=4:8, e=5:9))
#>   X            X2
#> 1 1 1, 2, 3, 4, 5
#> 2 2 2, 3, 4, 5, 6
#> 3 3 3, 4, 5, 6, 7
#> 4 4 4, 5, 6, 7, 8
#> 5 5 5, 6, 7, 8, 9
```
pyStructのインストール on MacOSX10.11 with macports



python2.7が前提です．


```sh:scikit-learnをインストール
sudo port install python27 py27-scikit-learn
```

```sh:cvxoptをインストール．-atlasにしないと，DSDPがlibatlasを見に行ってライブラリ競合していまう
sudo port install py27-cvxopt -atlas
```

```sh:portsにはないのでpipでインストール
sudo pip-2.7 install pystruct
```


# 参考
- https://pystruct.github.io/installation.html
Chrome App/Extensions で特殊キーの入力やキーボードショートカットを受け取る

巷で流行りのGoogle Play Music、これのChromeアプリにはメディアキー( :rewind: :arrow_forward: :fast_forward: のような)を入力すれば(たとえアプリや拡張機能がバックグラウンドでしか動作していなくても)どこにいても再生をコントロールできる神機能が搭載されている。
ちなみにこのキーは通常のkeydownのイベントリスナーでは拾えないっぽい。

実装方法とか知らなかったんで例のアプリの`manifest.json`を覗いてみたら答えは一瞬で出た。

### commands で実装
決して最近できたものではなく、昔から(Chrome 25から)利用できる`chrome.commands`を使う。
日本語で書いてる記事少ないっぽいけど使ってる人は結構いるはず
[chrome-extension - キーの入力だけで目的のタブに素早く切り替えられる Google Chrome 拡張つくりました - Qiita](http://qiita.com/suzuki86/items/70ea98983238d29e2987)


### どう使うの
manifest.jsonに`commands`のセッションを追加する

以下はGoogle Play Musicのそれより抜粋

```json:manifest.json
{
...
   "commands": {
      "next-track": {
         "description": "next track",
         "global": true,
         "suggested_key": {
            "default": "MediaNextTrack"
         }
      },
      "play-pause": {
         "description": "play/pause",
         "global": true,
         "suggested_key": {
            "default": "MediaPlayPause"
         }
      },
      "previous-track": {
         "description": "previous track",
         "global": true,
         "suggested_key": {
            "default": "MediaPrevTrack"
         }
      },
      "stop": {
         "description": "stop playback",
         "global": true,
         "suggested_key": {
            "default": "MediaStop"
         }
      }
   },
...
}
```

```json
"コマンド名": {
  "description": "コマンドの説明",
  "global": true, // Chromeが非アクティブな時にも拾うか? *** Chrome35+ ***
　　"suggested_key": { // キーパターン
              "default": "Ctrl+Shift+Y",
              "windows": "Ctrl+Shift+Y",
              "mac": "Command+Shift+Y",
              "chromeos": "Ctrl+Shift+U",
              "linux": "Ctrl+Shift+J"
  }
},
...
```
のようなフォーマットで書いておく。

キーパターンは一般キーは上記のよう、ほかに以下のような特殊キー等。

> Comma, Period, Home, End, PageUp, PageDown, Space, Insert, Delete, Arrow keys (Up, Down, Left, Right) and the Media Keys (MediaNextTrack, MediaPlayPause, MediaPrevTrack, MediaStop).

あとMacでは<kbd>Ctrl</kbd>は<kbd>Command</kbd>に自動置換されるので<kbd>Ctrl</kbd>のままにするには<kbd>MacCtrl</kbd>にしろだとかChromeOSでは<kbd>Search</kbd>があるだとかあるらしいので詳しくは[document](https://developer.chrome.com/extensions/commands#usage)参照。


これで 設定の 拡張機能 > キーボードショートカット に以下のような感じに追加される。
![image](https://qiita-image-store.s3.amazonaws.com/0/23997/3acdbfab-a4ad-e3f3-3974-ef53f381cb00.png)

登録されたコマンドはアプリ・拡張機能から`chrome.commands`経由で取得したり拾ったりできる。

一覧： `chrome.commands.getAll`
![image](https://qiita-image-store.s3.amazonaws.com/0/23997/5c42d7d2-acbd-34ad-03ef-c6bbc00902c5.png)

リスナー追加： `chrome.commands.onCommand.addListener`
![image](https://qiita-image-store.s3.amazonaws.com/0/23997/dd8e328e-ab6d-11fb-b171-744e6bb8a581.png)
(入力時にコールバックにコマンド名が返される)

これでバックグラウンドで再生中のPlay Musicのなうぷれとか実装できないかな？

### 参考
[chrome.commands - Google Chrome](https://developer.chrome.com/extensions/commands)
Word2Vecを使った教師あり単語間関係分類

# この記事を読んでできること
2語間の関係を教師ありで分類・抽出する．
具体的には，(スポーツ, 野球, has-a)みたいなデータから以下のような予測ができるようになります（確率付きで）．

```bash
ブルーベリー is-a 果物
動物 has-a モルモット
動物 has-a ワタボウシタマリン
スポーツ is-a スポーツ
登山 is-a スポーツ
ロデオ is-a スポーツ
動物 has-a ユーラシアカワウソ
スポーツ has-a フリーダイビング
競馬 is-a スポーツ
スポーツ has-a ゴルフ
```
今回扱う関係は，has-aとis-aだけです．これを使うと，例えば「スポーツ」と検索した人に対して，例え記事の中に「スポーツ」という単語がなくても「スポーツ」とhas-aの関係にある「野球」や「サッカー」の記事を提示することができます．しかもそのスコアは事前に計算しておくことができます．

# どうやってやるか
今回は，単語間の関係をWord2Vecで学習させようと思います．Word2Vecにはアナロジーを捉えられるという話があります．あの有名な，king - man + woman = queen というやつですね．これは，king - man = queen - womanとも書けます．つまり，2語間の差が関係を表しており，この例だと，kingとmanの関係とqueenとwomanの関係が同じであると捉えることができます．

さて，Word2Vecで学習したベクトル表現を使うと，差ベクトルがうまいこと関係を表すと書きましたが，必ずしもそうなっているとは限りません．加えて，**ユーザが扱いたい関係とWord2Vecで学習した関係が一致しているとも限りません**．そこで，今回も例のごとく教師あり学習を使います．ユーザは教師データを通して，扱いたい関係をアルゴリズムに伝えることができます．大事なことは，どんな関係でも教師データを使ってアルゴリズムに伝えることができるということです．

# 詳しくは
コードとともに[word2vecを使った単語間関係分類](https://nktmemo.wordpress.com/2015/10/27/word2vecを使った単語間関係分類/)に載せてあります．
Azure Machine Learning で競艇の予測をしてみた

 機械学習の勉強するにあたって何か動機づけが欲しいのと尚且つそれでお小遣いが稼がたらと思って、Azure Machine Learning を利用して競艇の順位予測みたいなのをしてみた。


# Azure Machine Learning
### 下記のURLを参考にやってみた。
http://pronama.azurewebsites.net/2015/03/16/azure-machine-learning/

### 競艇データの取得先
http://app.boatrace.jp/data/index.html#mbrace

圧縮ファイルがダウンロードできるので、ダウンロードしたファイルを基にデータを整形しDBに突っ込む。
もちろん、手動でなんかやりません。

# PHPからWebAPIへの問合せ
webapiへの問合せサンプルはC#、Pythonなどあるがphpがなかったので、pythonのサンプルをphpで書いて実行させています。

```ruby:php
$header = [
		'Authorization: Bearer '.発行されたAPI_KEY, 
		'Content-Type: application/json',
	];

$data = [
		"Inputs" => [
			"input1" => [
					"ColumnNames" => ["event_date", ・・・],
					"Values" => ['2015-10-26',・・・]
				]
			],
	];
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 発行されたURL);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST'); // post
curl_setopt($curl, CURLOPT_HTTPHEADER, $header); // リクエストにヘッダーを含める
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, true);
// リクエストデータをセット
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data) );

//リクエスト
$result = curl_exec($curl);

//リクエスト実行後
// ヘッダーサイズを取得
$header_size = curl_getinfo($curl, CURLINFO_HEADER_SIZE);
// ヘッダー
$header = substr($result, 0, $header_size);
//ボディー
$body = substr($result, $header_size);
//デコード
$body = json_decode($body);
```
以上のコードでどうにか予測値を取得できるようになりました。
間違っていたらご指摘お願いします。

###参考サイト
http://qiita.com/re-24/items/bfdd533e5dacecd21a7a


# 船券購入条件
- 予測順位が高い順の船番３つのボックス買い
  - 1通り 100 円 合計 600 円 の投資を1レースにする
- 競艇場は「福岡」

# 結果
どでかいマイナスを出しておりますｗ

現在
-15000 円 くらい
もう、お小遣いがそこを尽きそうです・・・orz

追記

10月26日~31日　GIIIオールレディースLOVE FM福岡なでしこカップ
で、評価しました。

前半戦３日は、当たる確率はかなり低く惨敗ですが、後半になっていくにつれて、
当たる確率はかなり上がっていきました。
最終日以外、回収率はかなり悪かったのですが、最終日は「148%」とまぁ、ぼちぼちのプラスで終わりました。

今回作った、学習モデルで言えることは、最終日の本命レースではかなり良い予測ができることが言えます。

# 感想
まだまだ、改良の余地のある学習モデルをどうにかしないと・・・
あまりにも、知識が不足しているのでこれから継続的に勉強していこうかなっておもっています。
機械学習初心者がAzureを使っうと、めっちゃ簡単にここまで出来た事に自分自身が驚いてますｗ

最後に、誰か一緒にやりませんか！？

# 参考サイトなど
・http://qiita.com/icoxfog417/items/f32f89a0d5145d9861bc
・http://pronama.azurewebsites.net/2015/03/16/azure-machine-learning/
【しずおかアプリ部】活動ログ　第十回

![しずおかアプリ部2.jpg](https://qiita-image-store.s3.amazonaws.com/0/88105/76296fd6-15f3-7c05-d4ce-6de94cbaaef2.jpeg)


■タイトル
第１０回


■開催日
２０１５年１０月２４日（土）　１６：００～１８：００


■参加者
６名


■活動内容（概要）
・「シズオカアプリコンテスト」の紹介
・菅原プレゼン「Unityはじめるよ　ゲームの作り方」
・部員さん「Oculus Rift体験　Unreal Engine 4」
・保坂プレゼン「～スクロールしてみよう編～」


■活動内容（詳細）
【実演・プレゼン】

-------

・「シズオカアプリコンテスト」の紹介
　静岡市のオープンデータサイトに登録したデータを活用した
　「静岡を元気に！」するアプリやアイデアのコンテスト。

　2015年10月23日
　　応募受付開始

　2015年12月14日
　　作品エントリー開始

　2016年1月15日
　　作品エントリー締め切り

　公式サイト　https://shizuoka-app-awards.jp/


-------


・「Unityはじめるよ　ゲームの作り方」
　前回の続き
　スマホの加速度センサーを利用した玉ころがしゲームの作り方を解説。
　１、プロジェクト作成（フォルダ階層のルール化）
　２、プラットフォーム毎の基本情報入力
　３、骨格作成
　４、スクリプトの作成

　各画面とスクリプトによる制御の内容の説明
　玉やゴールの制御方法
　加速度センサーの使い方
　uGUI:Buttonの使い方

　プロジェクト一式
　http://monolizm.com/sab/src/PutTheBall.zip

　資料：<a href="http://monolizm.com/sab/pdf/第10回_プレゼン資料(Unityはじめるよ～ゲームの作り方～).pdf">第10回_プレゼン資料(Unityはじめるよ～ゲームの作り方～).pdf


-------


・「Oculus Rift体験　Unreal Engine 4」
　Oculus Rift + Unreal Engine 4　の組み合わせで、リアルな映像でのVRが可能。

　今回体験したソフトのは以下の３つ
　・グライダーを操って広大な自然の中を飛び回る
　・ロボットとの戦闘の中をスローモーションで移動していく
　・UnrealEngine4のデモ　未来の宇宙？での戦闘を体験

　前回のVR体験でも感動したが、映像がリアルになったことでの臨場感が半端ない。
　テーマパークやアミューズメント施設にあるアトラクションをと似た感覚を得られた。

　資料：<a href="http://monolizm.com/sab/pdf/第10回_プレゼン資料(Unreal Engine).pdf">第10回_プレゼン資料(Unreal Engine).pdf</A>

-------


・保坂プレゼン「～スクロールしてみよう編～」
　Cocos2d-xでの画面スクロールの方法と概念の説明。
　スクロールする仕組みはCocos2d-xに備わっているため、
　なんとたったの１行追加するだけで済んでしまった。
　また、画面がスクロールするようになったこと発生したバグと、対処方法の説明。
　画面がスクロールしたことにより、タップ判定がおかしくなった。
　座標変換（ワールド座標とスクリーン座標）を行い、同じ座標系にすることで解決。


　プロジェクト一式
　http://monolizm.com/sab/src/AngryChicken9.zip


　資料：<a href="http://monolizm.com/sab/pdf/第10回_プレゼン資料(Cocos2d-xで作る物理演算ゲーム～スクロール編～).pdf">第10回_プレゼン資料(Cocos2d-xで作る物理演算ゲーム～スクロール編～).pdf</A>
Single View Applicationのiphoneデバイスで画面サイズが？の時の対処法


本日からswiftでiphoneアプリ開発始めました。xcodeでSingle View Applicationを作成し、main_storyboard→viewcontrollerを見ると、四角の画面が表示されます。何の画面サイズ？という感じですが、これをiphoneの画面サイズに変更する方法です。

①View Controllerを選択
②右ウィンドウの下矢印のようなアイコン（右から3つ目）の項目を選択
③Simulated Metricks/Sizeから変更したいiPhoneのサイズを選択

これで晴れてiphoneの縦長画面サイズになります。
nginxとphp-fpmでhtmlファイルのphpを動かす

nginxのサイトを作るたびに*.phpだと動くけど、*.htmlに変えると真っ白とか
*.phpでも実行されずにダウンロードされたりするので忘れすぎ。
忘れないようにメモ

環境
---
CentOS 6.8 final
nginx 1.10.1
PHP 5.6.22

nginxはmainline版をyumインストール
[PHPはepel,remiリポジトリを追加してremiの最新版をyumインストール](http://qiita.com/f-akazawa/items/f7c372c757630ae4482a)

php-fpmの設定ファイル変更点
---
```
/etc/php-fpm.d/www.conf

user  = nginx
group = nginx

listen = /var/run/php-fpm/php-fpm.sock
listen.mode = 660

security.limit_extensions = .php .html
```

nginxの設定ファイル変更点
---
```
/etc/nginx/conf.d/server.conf

location /{
    root /usr/share/nginx/html;
    index index.php index.html;
}

location ~\.(php|html)${
root /usr/share/nginx/html;
    fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param PATH_INFO $fastcgi_script_name;
    include fastcgi_params;
}
```

他にやること
---
まだ動かないとき、ログを見るとphp-fpmがparmission deniedとなってるので
`#sudo chmod 666 /var/run/php-fpm/php-fpm.sock`

これで *.phpファイルも、*.htmlファイル内で<?php ~~ ?>で囲った部分も実行される。
[セキュリティのためらしいので666にするなら注意](http://setting-tool.net/nginx-php-fpm-socket-permission)

iptablesが動いてるとダメなこともあるので止めること
---

```
#sudo /etc/init.d/iptables stop
#sudo /etc/init.d/ip6tables stop
#sudo chkconfig iptables off
#sudo chkconfig ip6tables off
```
Pepperダンボール収納術


ダンボールにいれるときの手順をまとめました。
#■ダンボール収納

1. 緊急停止ボタンを押しておく。（ダンボール中でPepperが起動してしまわないため）
2. 腰と足首にキーを差し込む。
3. ダンボールを立てた状態でPepperを格納
4. ダンボールを寝かして奥にPepperを押し込む

ちなみに、ダンボールを立てたときの上フタは、角を折って折り返すとダンボールに刺して固定できるようになっています。

![cardboard2.png](https://qiita-image-store.s3.amazonaws.com/0/88740/8d2cbbee-7dab-e3db-71b2-83dc1d120eb6.png)

また、充電器用の箱を収納する場所はダンボールの左上にあります。

![cardboard1.png](https://qiita-image-store.s3.amazonaws.com/0/88740/8cf48ada-10c6-0a3c-a098-fbc986ba5a2a.png)
XCode 7.1 で Quick と Nimble の Swift Compiler Error を解決する

# まとめ

- XCode 7.1 で CocoaPods 経由で Quick 0.7.0 と Nimble 2.0.0 をインストールすると Tests 実行するさいに Swift Compiler Error 
- Quick 0.8.0 と Nimble 3.0.0 にバージョンを上げたら 解決

# エラーの内容

> Nimble.h:2:9: Include of non-modular header inside framework module 'Nimble.Nimble'

# 参考資料

- https://github.com/Quick/Quick/issues/406
- https://github.com/Quick/Nimble/issues/208
Affine変換を使ってTextFieldをスクロールしてみる

以前こちらの記事で([TextField, TextViewがキーボードに隠れてしまう問題](http://qiita.com/shutokondo/items/6e29fba3f18bc7e81da9))
キーボードを表示させた時に、textFieldやtextViewにかぶらないようにスクロールする方法を紹介しました。

しかし、これはscrollViewの上にtextFieldやtextViewを置いていることが前提になります。
例えばtableViewの下にtextFieldを持ってきて、送信したものがすぐにセルに反映させたいような仕様にしたい時は上記の記事のやり方では上手くいきません。
以下のような場合です。

![alt](https://gyazo.com/f14e034467e2fb8ca27ca4059526205d.png)

###階層はこのようになっています。
![alt](https://gyazo.com/7021a9804b37d88aae63580a7e5b2a14.png)

tableViewとtextFieldが並列の関係になり、どちらも親要素にUIViewをとります。
このままでは、tableViewはキーボードの高さ分だけスクロールされますが、textFieldがスクロールされません。これはtextFieldがUIViewを親にとるからです。

解決策として、今回のような場合は `UIViewごとスクロール`させます！
そこで使うのが`affin変換`というやり方です！

#Affine変換とは
Affine変換とはユークリッド幾何学的な線型変換と平行移動の組み合わせによる図形や形状の移動、変形方式です。（コトバンク調べ）
と難しい用語がでてきてよくわからないので、要は図形を移動、回転、左右反転、拡大、縮小などといった変換ができるということです。

今回はAffine変換をUIViewに対して適用します。UIViewはtransformというプロパティを保有しています。transformプロパティに値を代入することで、UIView を拡大・縮小・回転させることができます。Affine変換を行うにはCoreGraphicsを利用したCGAffineTransform☓☓☓☓メソッドを使います。☓☓☓☓以下のところには変換用途によっていろいろなメソッドが用意されているのでぜひ調べてみてください。
今回使うのは`CGAffineTransformMakeTranslation`メソッドです！これは平行移動をするためのメソッドで`第一引数にx座標の移動距離`、`第二引数にy座標の移動距離`をとります。

##以下の様なコードになります
通知に関しては前回記事同様NSNotificationCenterを使います
※tableView, textFieldに関しては新たに設定して下さい
他は以前の記事と同様のコードです。

```lang

　　func handleKeyboardWillShowNotification(notification: NSNotification) {
        //郵便入れみたいなもの
        let userInfo = notification.userInfo!
        //キーボードの大きさを取得
        let keyboardRect = (userInfo[UIKeyboardFrameEndUserInfoKey] as! NSValue).CGRectValue()
        
        let duration: NSTimeInterval = ((userInfo[UIKeyboardAnimationDurationUserInfoKey])?.doubleValue)!
        UIView.animateWithDuration(duration) { () -> Void in
            
        //CGAffineTransformMakeTranslationメソッドを使い、平行移動を行う。（CoreGraphicsに定義されている）
        //第一引数にx方向の移動距離を取り、第二引数にy方向の移動距離を取る
        //y座標をキーボードの高さ分取得（上に引き上げるのでマイナスをつける）

            let transform: CGAffineTransform = CGAffineTransformMakeTranslation(0, -keyboardRect.size.height)

        //UIView を拡大・縮小・回転させることができるtransformプロパティに値をセット
            self.view.transform = transform
        }
    }
    
    //ずらした分を戻す処理
    func handleKeyboardWillHideNotification(notification: NSNotification) {
        let userInfo = notification.userInfo!
        //キーボードの大きさを取得
        let _ = (userInfo[UIKeyboardFrameEndUserInfoKey] as! NSValue).CGRectValue()
        let duration: NSTimeInterval = ((userInfo[UIKeyboardAnimationDurationUserInfoKey])?.doubleValue)!
        UIView.animateWithDuration(duration) { () -> Void in
            self.view.transform = CGAffineTransformIdentity
        }
    }

```

するとUIViewごとキーボードの高さ分だけスクロールされます。LINEのトークルームなんかもこんな仕様ですね。

![alt](https://gyazo.com/db51fdc9aa4514fe946a4649f40d0b15.png)


今回はaffine変換を使ってスクロールさせましたが、他にもやり方はあるかと思います。もっといい方法があればぜひご教授頂けますと幸いですm(__)m
HW保守で使いそうなTips 〜ディスク周り〜

***個人的に、ディスク周りのHW保守でよく使うTipsを適当に書いてます***

## raidコントローラーの確認
```
$ lspci | grep LSI
02:00.0 RAID bus controller: LSI Logic / Symbios Logic MegaRAID SAS-3 3108 [Invader] (rev 02)
```
## MegaCli コマンド
#### raid・仮想ディスクの状態確認
``` $ /opt/MegaRAID/MegaCli/MegaCli64 -LDInfo -LALL -aAll -NoLog ```
#### 物理ディスクの状態確認
```
$ /opt/MegaRAID/MegaCli/MegaCli64 -PDList -aAll
$ /opt/MegaRAID/MegaCli/MegaCli64 -PDList -aAll | egrep 'Slot|Firmware state|Inquiry'
$ /opt/MegaRAID/MegaCli/MegaCli64 -PDList -aALL | egrep 'Slot|state|Data|Raw'
```
#### LED点灯(ディスクのスロット) 
```
# -physdrv[Enclosure Device ID:Slot Number]
$ /opt/MegaRAID/MegaCli/MegaCli64 -Pdlocate start physdrv[E:S] -a0
```
#### LED消灯
```
# -physdrv[Enclosure Device ID:Slot Number]
$ /opt/MegaRAID/MegaCli/MegaCli64 -Pdlocate stop physdrv[E:S] -a0
```
#### ディスクのオフライン
```
# -physdrv[Enclosure Device ID:Slot Number]
$ /opt/MegaRAID/MegaCli/MegaCli64 -PDOffline -PhysDrv[E:S] -a0
```
#### ディスク抜く前にしておくコマンド
```
# -physdrv[Enclosure Device ID:Slot Number]
$ /opt/MegaRAID/MegaCli/MegaCli64 -PDPrpRmv -PhysDrv[E:S] -a0
```
#### Rebuildの進捗確認
```
#  -physdrv[Enclosure Device ID:Slot Number]
$ /opt/MegaRAID/MegaCli/MegaCli64 -AdpGetProp RebuildRate -a0
$ /opt/MegaRAID/MegaCli/MegaCli64 -PDRbld -showprog -physdrv[E:S] -a0
```

## mpt-statusコマンド
#### ハードディスクの状態確認
``` $ /usr/sbin/mpt-status ```
#### Rebuildの進捗確認 
``` $ /usr/sbin/mpt-status -n ```
 
## omreportコマンド(DELL)
#### raid・仮想ディスクの状態確認
```
$ /opt/dell/srvadmin/bin/omreport storage vdisk controller=0
```
#### 物理ディスクの状態確認
```
$ /opt/dell/srvadmin/bin/omreport storage pdisk controller=0
```
#### rebuildの確認
```
$ /opt/dell/srvadmin/bin/omreport storage pdisk controller=0 | egrep 'ID|Status|State|Progress'
```


## hpacucliコマンド(HP)
#### raid確認
```
$ /opt/compaq/hpacucli/bld/hpacucli ctrl all show config
```
hostnameの変更

### hostnameを変更する方法
#### hostsファイルを変更する
``` 
$ vim /etc/hosts 
127.0.0.1       test01 localhost.localdomain localhost
↓
127.0.0.1       test02 localhost.localdomain localhost
```

#### networkファイルを変更する
```
vim /etc/sysconfig/network
HOSTNAME=test01
↓
HOSTNAME=test02
```
#### hostnameコマンドで変更（hostname {変更したいhostname}）
``` $ hostname test02 ```

***再度、ログインした際にhostnameが変わっていれば完了です!***