OmniAICreator/Qiita-1.07M huggingface dataset:
EC2サーバのIPアドレスをコマンド一つで取得する


##前提
* aws-cliが入っていること
	* http://aws.amazon.com/jp/cli/
* jqが入っていること
	* http://stedolan.github.io/jq/

##こんなことはありませんか？

- [ ] EC2インスタンスを用途別にいくつも立ち上げている
- [ ] Security Groupにて、踏み台サーバ経由で各アプリケーションサーバにSSHしている [参考](http://dev.classmethod.jp/cloud/aws/bastion-host-on-amazon-vpc/)
- [ ] __あれ、あのサーバのprivate ipって何だっけ?__


##コマンド

```~/.bash_profile
alias ec2="aws ec2 describe-instances | jq '.Reservations | .[]' | jq '.Instances | .[]' | jq '.Tags[].Value + .PrivateIpAddress'"
```

##結果

* bashで `ec2` と打つだけで、sshしたいサーバのIPが分かります！ __便利！__
IRuby notebook で String 変数に格納しているPNG 画像データをインラインで表示する方法

画像がインライン表示されなかった
-----------------------------

IRuby notebook の [example](http://nbviewer.ipython.org/github/minad/iruby/blob/master/IRuby-Example.ipynb) をみると、画像がインラインで表示されているので、画像データが変数にあるときにどのようすると表示できるのか調べた。

例えば、PNG画像を返すREST APIがあるとして、rest-client で GET すると、画像が String として取得される。
<pre lang="ruby">
png_addr = "https://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/cid/2244/PNG"
png = RestClient.get(png_addr)
png #=> "\x89PNG\r\n\u001A\n\u0000\u0000\u0000\rIHDR\u0000\u0000\u0001,\u0000\u0000\u0001,\b\u0003\u0000\u0000\u00019\xA4N\xD1\u0000\u0000\u0001\u0011PLTE\xF5\xF5\xF5/OO\xFF\u0000\u0000f\x8B\x8B\xA6\xB3\xB3~\x91\x91Wpp\xCD\xD4Ԡ（省略）</pre>

この文字列は、ファイルに保存するとPNG画像として扱うことができる。しかし、ファイルを経由せずに表示したい。

IRuby.display
-------------

さて、これをインラインで画像表示するには、IRuby.display で MIME タイプをimage/pngと指定すると良いことが <a href="https://github.com/minad/iruby/blob/master/lib/iruby/display.rb">display.rb のコード</a>と<a href="http://nbviewer.ipython.org/github/minad/iruby/blob/master/IRuby-Example.ipynb">IRuby-Examples.ipynb</a>を見るとわかる。

![PUG_RestClient.png](https://qiita-image-store.s3.amazonaws.com/0/51497/c7bf9296-2082-c36d-6639-0af045ab3188.png)

このようにPNG画像がインラインで表示される。
AWS EC2でssh接続を維持する設定

よく忘れるのでメモ

EC2(Amazon Linux)はデフォルトでクライアントからのSSHの接続が
一定時間操作がなかったら切断されるよう設定されている。

これを回避するには、クライアント側の.ssh/configに下記の設定を追加する。

```shell-session
Host hogehoge               #適当なエイリアス
  ServerAliveInterval 60    #60秒に1回通信して切られないようにする
```
DynamoDB エクスポートファイルをJSONファイルに置換

DyanmoDBをExportする際に、コンソールからAWS DataPipelineを利用してエクスポートされる訳だが、
実際S3にエクスポートされたファイルを見てみると...

```vim
hoge^C{"s":"hogehoge"}^Bfoo^C{"s":"fooou"}
```

  
1行に key { "type" : value } という形でkeyとvalueの区切りが結構特殊らしい。
DataPipelineを利用して再びDyanamoDBにインポートする際は問題ないのだが、
他のDB(RDBMSやMongoDB等)に移行したいときにこのままではあまりにも不便...

いろいろ調べたところ、sedコマンドでJSONに置換するやり方があったので、
このコマンドを利用してJSONファイルに変換したら良さそうだ
http://stackoverflow.com/questions/18896329/export-data-from-dynamodb/23705962#23705962

以下引用

```bash
sed -e 's/$/}/' -e $'s/\x02/,"/g' -e $'s/\x03/":/g' -e 's/^/{"/' <exported_table> > <exported_table>.json
```
ただ、このまま使用しても1行単位では置換されるが、全体でみた場合、
JSONファイルとしては成立しない(Syntax Error)ファイルとなるので、
JSONファイルとして置換するコマンドを作成しました。
https://github.com/tatsu07/convert_DynamoDB_S3File_To_JSON
CGRectを元にカスタマイズCGRectを生成

## 1. 値の再代入禁止について

Objective-Cから関数型のSwiftに変わり、Optional型ではない変数の再代入が禁止されました。
例えばStructで宣言した変数も基本的に再代入は禁止です。(ただし、mutatingメソッド内では可能ですが、ここでは割愛します)

よく使うStruct型の例として、CGRectを見てみましょう

```swift
import UIKit

let rectangle = CGRectMake(0, 0, 10, 10) // 10x10の正方形(CGRect)を作成
rectangle.size.width = 20 // 20x10の長方形に長さを変更
// (エラー) --> Cannot assign to the result of this expression
```

## 2. 解決策(α)
一度作成したCGRectを変更しようとすると、再代入はダメと怒られてしまいました。
もし値を変更したい場合は、もう一度CGRectMakeしてあげないといけません。

```swift
let square = CGRectMake(0, 0, 10, 10)
let rect = CGRectMake(square.origin.x, square.origin.y, 20, square.size.height)
```

## 3. 解決策(β)
ただし、CGRectの一部を変更するだけのために、square.originやsquare.sizeを何度も書くのは面倒なので、CGRectMakeの拡張関数を作成してあげます。

```swift
// どこを変更するか
enum CGRectChangeAt: Int {
  case X = 0
  case Y, Width, Height
}

/*
** [引数]
** rect: 変更前のCGRect, changeAt: 変更する場所, value: 変更する値
 */
func CGRectMake(rect: CGRect, changeAt: CGRectChangeAt, value: CGFloat) -> CGRect {
  switch changeAt {
  case .X:
    // origin.xを変更
    return CGRectMake(value, rect.origin.y, rect.size.width, rect.size.height)
  case .Y:
    // origin.yを変更
    return CGRectMake(rect.origin.x, value, rect.size.width, rect.size.height)
  case .Width:
    // size.widthを変更
    return CGRectMake(rect.origin.x, rect.origin.y, value, rect.size.height)
  case .Height:
    // size.heightを変更
    return CGRectMake(rect.origin.x, rect.origin.y, rect.size.width, value)
  default:
    // 何も変更しない
    return rect
  }
}
```
拡張版CGRectMakeを利用して、CGRectの値を変更してあげましょう。

```swift
let square = CGRectMake(0, 0, 10, 10)
let rect = CGRectMake(square, .Width, 20) // squareを元に、widthを20に設定したCGRectを作成
```

## (追記) おすすめではない方法
mutatingを使えばStruct型の値を変更できますが、関数型言語の方法としては良くないのでオススメできません。

```swift
import UIKit

extension CGRect {
  // CGRect内の変数を変更できるようにmutatingメソッドを作成
  mutating func ChangeAt(changeAt: CGRectChangeAt, value: CGFloat) {
    switch changeAt {
    case .X:
      self.origin.x = value
    case .Y:
      self.origin.y = value
    case .Width:
      self.size.width = value
    case .Height:
      self.size.height = value
    case default: break
    }
  }
}

let frame = CGRectMake(0, 0, 10, 10) // CGRectを作成
frame.ChangeAt(.X, value: 10) // x位置を変更
```

**Xcode6ではTop LevelのStructに関してはextensionが無効になるので、このextensionは現在使用できないみたいです。**
.DS_Storeを削除するBashエイリアス

誰かとファイルをやりとりしていると、.DS_Storeが邪魔な場合がありますよね。

そもそも.DS_Storeを作成しないようにする方法は色々あるのですが、
（例えば、ターミナルから下記実行するとかね
`defaults write com.apple.desktopservices DSDontWriteNetworkStores true`）

それでも何かゴミが出るとか、相手からもらったデータに.DS_Storeが入ってるとかいう場合に、ささっと消したい！
***
###コマンドで消す場合
ターミナルから下記実行でとりあえず消せます。

```
find <Path> -name '.DS_Store' -delete -print
```
***
###他にも消したいファイルがある
`-name '**'`を括弧でくくって、`-o`で連結するだけです。
下記は、.DS_StoreとThumbs.dbを削除するコマンド。

```
find <Path> \( -name '.DS_Store' -o -name 'Thumbs.db' \) -delete -print
```
***
###Bashエイリアスに登録
毎回このコマンド思い出すのもしんどいので、Bashエイリアスにしちゃう。
~/.bash_profile か ~/.bashrc に下記を仕込んでおきましょう。

```
function gominashi(){
   find $1 \( -name '.DS_Store' -o -name 'Thumbs.db' \) -delete -print;
}
```
「gominashi」は各自覚えやすい名前付けてください。

　

```
gominashi <Path>
```
で、Path以下の.DS_StoreとThumbs.dbを再起的に削除します。
初回のみsourceで読み込んでください。
Admin::ApplicationControllerが適用されない問題

Ruby on Rails 3または4で、管理画面用などに

```ruby:1
class ApplicationController < ActionController::Base
```

の他に

```ruby:2
class Admin::ApplicationController < ActionController::Base
```

を作り、

```ruby:3
class Admin::UsersController < Admin::ApplicationController
```

などとしてもUsersControlllerが1を継承してしまう。


## 解決法
```
class Admin::BaseController < ActionController::Base
```
とすれば良い
【CSS】Firefoxで画像をフェードさせるとずれる

画像をフェードさせるという処理をCSSで実装した際に、画像が1pxずれるという症状がでたのでメモになります。

```css
a img {
	-webkit-transition: opacity 0.2s ease-out;
	-moz-transition: opacity 0.2s ease-out;
	transition: opacity 0.2s ease-out;
}
 
a:hover img {
	-webkit-opacity: .7;
	-moz-opacity: .7;
	opacity: .7;
}
```

## 追加CSS

```css
a img {
	box-shadow: #000 0 0 0;
}
```

## 参考サイト

* [http://edge.sincar.jp/web/firefox-fade-image/](http://edge.sincar.jp/web/firefox-fade-image/)
vbaのエラー処理

vbaでは例外機構はない。
したがって、組込みの実行時エラーか、独自のエラーをハンドリングすることになる。

###Errオブジェクト

C言語のようにエラーに対応する整数値を扱うことができる。
主なメソッドとしてNumberメソッドだろう。
Error関数を利用してErr.Numberに対応するエラーメッセージを投げられる。

```
Error(Err.Number)
```




自分でセットするなら次のようにする。


事前条件

```

If cond Then
  Err.Raize Number:= 999, Description:="something went wrong"
End if

```

事後条件

```

On Error Goto Have_Err

Have_Err:
  If Err.Number = 999 Then
    msgbox Err.Description
  End if

```

実際には次のように書く

```vbnet

Private Sub f1(ByVal v as Integer)
  If v < 0 Then
    Err.Clear
    Err.Raise Number:=999, Description:="something went wrong"
  End if
End Sub

Private Sub f2()
On Error Goto Have_Err
  Call f1(-1)

Have_Err:
  If Err.Number = 999 Then
    MsgBox Err.Number & vbCrLf & Err.Description
    Exit Sub
  End If
End Sub

```
見ての通り例外のようなことができる。
プロシージャf1 ではErrオブジェクトにエラー値の設定のみしておき、プロシージャ呼び出しでエラーをチェックする。
これはErrオブジェクトがパブリック・スコープを持つため可能になる。
ただパブリック・スコープを持つのためErr.Clearでエラー値をリセットしておく必要がある。


余談ながら、システムによっては「例外」をうまく利用してメモリ割り当てなどを行っている。
C言語ではこれを抽象化してシグナルというものをユーザーに公開している。
C++では更に抽象化して例外機構をユーザーに公開している。


追記

###デバッグモードに入る

<i>statment</i> にエラーが含まれているとエラーを検出しなくなるまでループさせる。

```vbnet

On Error GoTo ASSERT

  statment
  statment
  statment
  
ASSERT:

  If Err.Number Then
    Debug.Print Err.Description
    Err.Clear
    Debug.Assert False ' スタックトレースへ
    Resume 0 ' エラー行へ戻る
  End If

```

ここでスタックトレースとは一行ずつ実行するあれのことである。
プロシージャ内のエラー行をvbaに選ばせるので行横に○をつける手間がない。

###デバッグ出力
ブック名とオブジェクト名を表示させると混乱しにくい。
"[" と "]" で囲むのはデバッグ用ラベルであることがわかるようにしている。

```vbnet

#Const DEBUG_MODE = True

#If DEBUG_MODE Then
  Debug.Print "[" & ThisWorkbook.name & " " & Me.name & "]"
  Debug.Print expression
  Debug.Print "----- ----- ----- -----"
#End if

```
オンラインで動いていたNEXUSサーバをオフラインに移行したい

# オンラインで動いていたNEXUSをオフラインに移行したい
**(まずはなんとかしてNEXUSだけでもインターネットに繋げられないかゴネましょう。)**
オフラインでの運用なんて考えるのはその後ですが、どうしても移行しなければいけなくなった場合は、そんなに難しくない手段で移行できます。

## 前提
Windowsで動いているNEXUSサーバを、同じくWindowsに移行する場合。
## 方法
1. NEXUSのインストールディレクトリをそのまま圧縮か何かしてから持って行き、やはりC直下に解凍する。
   * 実はこれだけでも内部キャッシュでなんとかなったりしますが、後からJarが追加される事を考えて以下の事を実施します
1. もう一つ別の場所に解凍をしておく
1. 一度NEXUSを起動する
1. 専用のリポジトリを新規作成する
1. 外部リポジトリを参照していたリポジトリを消去する
1. NEXUSを終了させる
1. '\sonatype-work\nexus\strage' 配下に各リポジトリのディレクトリが存在するので、別にコピーしていたNEXUS資材の、外部リポジトリと同じ名前のディレクトリにある **(「ピリオドで始まらない名前のディレクトリ」)** を、 先に作ったリポジトリと同じ名前のディレクトリに移動する
  * この時、時々上書きされるファイルがあるが気にしない。
1. NEXUSを起動する
1. インデックスとメタデータの更新を行なう
1. リポジトリ一覧で先に作成したリポジトリを眺めて満足する

## 補足
Linuxでも似たような感じでできる気がする
BigQueryの課金について考えた（前編）

**2015/02/15 書き直しました！サーセン！**
# 安すぎて今までその考えはなかったわwww
さて、BigQueryの課金について。
今まで1テーブルあたりのデータ量も数十GBレベル、レコード数も億に届くかどうかぐらいのデータなんでクソクエリ回したところで1回1円未満とかそんなだったので、あんまり気にしなかった。（まぁ、使い始めた頃は5倍ぐらいの値段だったので気にするレベルだったのですが）
あと、GoogleAnalyticsPremiumも入っているし、毎月$500が免除されるためもっと気にしてなかった。w
でも、普通に契約するとお金がかかるわけで。なので、ちょっと考えてみましたと。

#そもそもどこに課金されるんだっけ？
BigQueryの課金は主に3つあります。

* 入れているデータ量（ストレージ）
* StreamingInsert使っている場合はその行数
* クエリするデータ量 

詳しくは[こちら](https://cloud.google.com/bigquery/?hl=ja)に書いていますよっと。
##ストレージの課金
BigQueryに放り込んでるデータ量によって課金されます。
$0.020（GB 単位/月）だそうです。でも、実際には明細をみる限り1時間単位で課金されているように見えます。

>BigQuery ストレージ: ******** Gibibyte-hour（プロジェクト: *****）

入れた時点から時間割して課金ってことなんでしょう。うちだと400GBぐらいで800円/月ぐらいです。
##StreamingInsertの課金
>2014 年 7 月 1 日以降は $0.01（100,000 行あたり）。

だそうです。今から使っていきますが、まだ明細には載っていないのでごめんなさい。

##クエリによる課金
これですね。真打登場です。$5（処理容量単位: TB）だそうです。
テーブルのデータ量による課金じゃないんですね。クエリを実行した『列』のデータ量に対して課金されるそうです。
しかし、これがよくわからない。一応勉強したんですが。不思議がいっぱいあります。
**今回はここを掘り下げてみたいと思います。**

# 色んなクエリを投げてみよう
って、ことで前編では１テーブルのクエリを中心にやっていきます。
後編ではJOINやUNIONについてやっていきます。

**＊このあたりから書き直しました。すいません・・・**

##使うデータ
こんな感じのサンプルデータを使います。
![bq_001.jpg](https://qiita-image-store.s3.amazonaws.com/0/49108/ed97cbf0-8c2e-7281-cef6-d0d45a0bfcb1.jpeg)


各カラムの説明、容量はSELECTでそのカラムだけを出した場合。
■テーブル全体(2.10GB 4500万レコード)
 全体の容量です。SELECT \*でやってみました。レコード数はCOUNT(\*)で取りました。

■CHUMON_DAY(344MB)
　 TIMESTAMP型です。注文日が入っています。
　※画像ではカラム名のあとに『_usec』と入っていますが、バグのようですが気にしない。

■CHUMON_BANGOU(344MB)
　INTEGER型です。注文番号が入っています。

■SHOHINMEI(1.07GB)
　STRING型です。商品名が入っているので一番重いです。

■CATEGORY(371MB)
　STRING型です。カテゴリー名が日本語で入っています。

((344 + 344 + 371) / 1024) + 1.07 = 2.10GB　あってますね。
じゃ、やっていきましょう。

##結局は足し算になります！
前述しましたが、クエリに書かれているカラムが課金対象となります。
SELECTで使おうがWHEREで使おうが関係ありません。
と、いうことは逆に考えてみるとそのクエリに１回書かれていれば２回使われても１カラムの容量で計算されるようです。やってみましょう。

1. １つのカラムをSELECT句で指定します。
![bq_002.jpg](https://qiita-image-store.s3.amazonaws.com/0/49108/89c930a3-65fc-e79b-f924-0655ffd86caf.jpeg)
カラムの説明で書いたとおりの容量になっています。

2. ２つのカラムをSELECT句で指定します。
![bq_003.jpg](https://qiita-image-store.s3.amazonaws.com/0/49108/3212de7b-4dcd-2d46-141a-2b064bb5ad78.jpeg)
きちんと足し算されています。

3. ２つカラムをSELECT句で指定して、そのうち１つのカラムをWHERE句で指定してみます。
![bq_004.jpg](https://qiita-image-store.s3.amazonaws.com/0/49108/8bfcda15-2c4c-a509-237a-9be6660d2e14.jpeg)
SELECT句でもWHERE句でも使われているのに変わりませんでしたね。
4. ２つのカラムをSELECT句で指定して、そこに含まれないカラムをWHERE句で指定してみます。
![bq_005.jpg](https://qiita-image-store.s3.amazonaws.com/0/49108/a823d91c-a281-cb08-2e1d-e94715458e0a.jpeg)
ここでも見事に足し算されています。
5. おまけ（でも重要！）
ここまでで使ったカラムだけが課金されることがわかりました。
そこのカラムしか課金されないというのはすごいメリットだなぁと。
じゃ、CPUを使うような処理はどうなるのか？
![bq_006.jpg](https://qiita-image-store.s3.amazonaws.com/0/49108/290c396f-6d4e-c5a6-b5d8-1594e8bc0c56.jpeg)
サーセン！Googleさん！無駄CPU使っちゃって！
普通のRDBとかで考えると『型変換やったらIndex効かないよぉ』となったり。
CPU使うような処理を書いても課金は同じってことでした。

どうでしょうか？課金はどこが対象なのかが理解できたでしょうか。
今まで『安いから、まぁいっか』と何も考えずにデータを入れていましたが、少しは考えた方が良いかな？と思ったり。１つのカラムにデータを入れていて、その中の一部の文字列を取ってきて、違うカラムの数値を集計するとかあると思います。そんな場合はその文字列を切り出したりした方が良いわけで。使っていくうちにチューニングしていくのも良いかもしれません。
性能というよりはお金的にという感じですけどね。

もし、わかんないことあったらコメントください。実験します！

と、いうことで次回はJOINやUNIONなどもお金的な観点でやってみます。
Nexus7のAndroid5.0.2アップデートとroot化


##リンク

###android

https://developers.google.com/android/nexus/images


###fastboot

https://github.com/corbindavenport/nexus-tools


###sdk

[http://developer.android.com/sdk/index.html](http://developer.android.com/sdk/index.html)


###twrp

[http://techerrata.com/browse/twrp2/grouper](http://techerrata.com/browse/twrp2/grouper) ...Nexus7(2012)

[http://techerrata.com/browse/twrp2/flo](http://techerrata.com/browse/twrp2/flo) ...Nexus7(2013)

###supersu

https://play.google.com/store/apps/details?id=eu.chainfire.supersu

##コマンド

###android 5.0.2 update

androidの最新バージョンをダウンロードしてきて、解凍します。そこにあるファイルを使います。


なお、Androidのルート化は、ブートローダーアンロックした時点で保証対象外となります。また、起動しなくなるなどの危険が伴いますので、注意して自己責任で行ってください。


https://developers.google.com/android/nexus/images

```bash:
$ aunpack nakasi-factory.tgz

$ cd nakasi-factory

$ aunpack image-nakasi-lrx22g.zip

$ cd image-nakasi-lrx22g

$ ls
boot.img, system.img
```

```bash:
$ adb reboot bootloader

# ブートローダーのアンロックにより、内部ストレージを含むすべてのデータが消去され工場出荷状態に戻ります。既にアンロック済みの方は不要な手順です。
$ fastboot oem unlock

$ fastboot flash boot boot.img

$ fastboot erase system

$ fastboot flash system system.img
```


###root

Androidに[supersu](https://play.google.com/store/apps/details?id=eu.chainfire.supersu)をインストールしておきます。

次に、`twrp`をnexus7に焼きます。

androidとの接続を確立しておくことが前提です。`adb reboot bootloader`などを実行しておきます。

[http://techerrata.com/browse/twrp2/grouper](http://techerrata.com/browse/twrp2/grouper) ...Nexus7(2012)

[http://techerrata.com/browse/twrp2/flo](http://techerrata.com/browse/twrp2/flo) ...Nexus7(2013)

```bash:
$ adb reboot bootloader

# 2013
$ fastboot flash recovery openrecovery-twrp-2.8.4.0-flo.img

# 2012
$ fastboot flash recovery openrecovery-twrp-2.8.4.0-grouper.img
```

再起動したら、アプリの`supersu installer`を実行し、`twrp`経由でインストール。再起動後に、`supersu`を起動できるようになります。これは、root権限管理アプリのようなものです。
NetBeansのショートカットキー（初級編）

# よく使うショートカットキー
NetBeansを利用する上で覚えたほうがよいショートカットキー

Ctrl + スペース：補完

Ctrl + B：宣言へ移動

Ctrl + Q：編集場所へ移動

Ctrl + Shift + スペース：ドキュメントを表示

Ctrl + Shift + C:コメント切り替え

Alt + Shift + F：フォーマット
Nagiosでiptablesの状態監視をする。

iptablesの自動起動が有効化されていなかったせいで、先日サーバをリブートした後から、iptablesが起動していなかったorz
再発防止として、iptablesが起動しているかどうかの監視をNagiosで行うようにした。
反省と自戒の念を込めてメモしておく。

iptablesはpsで引っかからないので、check_procsが使えず少し手間取った。
調べてみると、
http://web.mit.edu/rhel-doc/4/RH-DOCS/rhel-rg-ja-4/s1-proc-directories.html に

```
ip_tables_names使用中のiptablesの種類を一覧表示します。
このファイルは、iptablesがシステム上でアクティブで、
次のような値を1つ以上含んでいる場合にのみ存在します: filter、mangle、又はnat。
```
とあったので、これをもとに下記のような監視スクリプトを書いて監視することにした。


\# cat check_iptables.sh 

```
#!/bin/sh 
 
grep filter /proc/net/ip_tables_names  > /dev/null 2>&1
RC=$?
if [ $RC -eq 0 ]; then
        ST="running" 
        EX="0" 
else
        ST="stopped" 
        EX="2" 
fi 
 
echo "iptables is $ST" 
exit $EX
```

あとは、nrpe.cfgに
```command[check_iptables]=/home/nagios/script/check_iptables.sh```
という形で仕込んで、
Nagiosサーバ側で監視設定を仕込んであげて完了。

```
define service {
         host_name                       <監視ホスト名>
         service_description             IPTABLES-STAT
         check_command                   check_nrpe!check_iptables
         max_check_attempts              3
         normal_check_interval           5
         retry_check_interval            5
         register                        1
         notification_options            u,r,c
         }
```

設定完了するとこんな感じに、
![iptables監視.png](https://qiita-image-store.s3.amazonaws.com/0/36284/7d9d82c5-a016-622b-8cc6-acd710b1d6fa.png)


ちなみにzabbixなら標準で監視できるそうだ。
http://sfujiwara.hatenablog.com/entry/20120913/1347508926
concrete5 でモバイルサイトを構築するときに事前に知っておくと役立つこと

concrete5 ではモバイルサイトを構築するための仕組みが用意されています。
仕組みにはそれぞれ特徴があるので事前に把握しておくとスムーズに作業を進められます。
モバイルサイトの構築には下記のようなアプローチが考えられます。

1. レスポンシブWebデザイン(__RWD__)なテーマ＆テンプレートを利用する。
1. モバイルテーマを設定する。
1. 3rdparty/mobile_detect を用いて分岐する。

## レスポンシブWebデザイン(__RWD__)なテーマ＆テンプレートを利用する。
個人的な推奨は可能であれば__RWD__なテンプレートを作成＆利用することです。
concrete5 で__RWD__なテーマを利用すると１つ大きなメリットがあります。
それは concrete5 の機能である __フルページキャッシュ__ が使える点です。
concrete5 では__フルページキャッシュ__を有効にした場合、ページに最初にアクセスした状態を丸ごとキャッシュし、次回以降のアクセスにはそのキャッシュを返却するようで、そうなるとキャッシュが存在する場合はアクセス元の判定が行われません。
ある程度大きな規模のサイトになってくると__フルページキャッシュ__が有効ですので、可能であれば__RWD__なデザインを採用したいところです。

## モバイルテーマを設定する。
concrete5 ではPCサイト用のテーマとは別にモバイルサイト用のテーマを設定することが出来るようになっています。
そのため concrete5 ではモバイルテーマとして表示されていることを判別するための定数 __MOBILE_THEME_IS_ACTIVE__ があります。
この定数を参照することでモバイルテーマで表示されていることがテンプレート側で判断できます。

```php
if (defined('MOBILE_THEME_IS_ACTIVE') && MOBILE_THEME_IS_ACTIVE)
{
  // モバイルテーマとして表示されている
}
else
{
  // モバイルテーマとして表示されていない
}
```

気をつける点としては、__"モバイルテーマが表示されているか否か"__という判定であり、実際のアクセス元は直接影響しない点です。

## 3rdparty/mobile_detect を用いて分岐する。
concrete5 のモバイルテーマ設定とは関係なく、モバイル端末からのアクセスを判断する手段として、__3rdparty/mobile_detect__ ライブラリを利用する方法もあります。
concrete5 自身もモバイルテーマへ分岐する判断に利用しています。

```php
Loader::library('3rdparty/mobile_detect');
$md = new Mobile_Detect();
if ($md->isMobile())
{
  // モバイル端末からのアクセス
}
else
{
  // モバイル端末以外からのアクセス
}
```
__3rdparty/mobile_detect__ ライブラリには、タブレット端末によるアクセスを判定する isTablet() 等もあります。

```php
if ($md->isTablet())
{
  // タブレット端末からのアクセス
}
else
{
  // タブレット端末以外からのアクセス
}
```

端末毎のアクセス判定もできるようです。

```php
if ($md->is('iPhone'))
{
  // iPhoneからのアクセス
}
else
{
  // iPhone以外からのアクセス
}
```

何がモバイル端末で何がタブレット端末なのか、判定される端末情報を詳しく知りたい場合は、
concrete/libraries/3rdparty/mobile_detect.php
にあるソースが参考になるかと思います。

気をつける点としては、__"アクセス元がどんな端末か"__という判定であり、モバイルテーマの設定に影響を受けない点です。
【PHP】多次元配列の重複削除

こういうデータがあったとして

    [
      [
        "pit",
        "28"
        "id011"
      ],
      [
        "john",
        "34",
        "id023"
      ],
      [
        "bob",
        "24",
        "id011"
      ],
      [
        "marry",
        "23",
        "id032"
      ]
    ]




例えば「同じIDだったら除外したい」という場合とかに

     $tmp = array();
     $array_result = array();
     
     foreach( $array_org as $key => $value ){
     
      // 配列に値が見つからなければ$tmpに格納
      if( !in_array( $value['id'], $tmp ) ) {
       $tmp[] = $value['id'];
       $array_result[] = $value;
      }

     }
     $data = $array_result;
管理者権限でコマンドプロンプトを起動するショートカット

管理者権限でコマンドプロンプトを起動するのは意外と面倒。いろんな起動方法があるけど、最短だと思う方法をここにメモっとく。

# Windows 7

1. Windows キー
2. 検索ボックスに cmd と入力
3. Ctrl + Shift + Enter
4. Alt + Y

Windows キーを押下するとスタートメニューが開く。そのまま cmd と入力すると、検索ボックスでコマンドプロンプトのプログラム (cmd.exe) が検索されて選択される。コマンドプロンプトのプログラム (cmd.exe) を選択している状態で Ctrl + Shift + Enter で開くと管理者権限で実行できる。ユーザーアカウント制御のウィンドウが表示されるので Alt + Y で「はい(Y)」を選択する。そうすると管理者権限でコマンドプロンプトが起動される。

# Windows 8.1

1. Windows キー + X
2. A キー
3. Alt + Y

Windows キーと X キーを入力するとメニューが表示される。その一覧にコマンドプロンプトを管理者で実行する項目があるので A キーを入力することで起動できる。ユーザーアカウント制御のウィンドウが表示されるので Alt + Y で「はい(Y)」を選択する。そうすると管理者権限でコマンドプロンプトが起動される。

# Windows 10

1. Windows キー + X
2. A キー
3. Alt + Y

Windows キーと X キーを入力するとメニューが表示される。その一覧にコマンドプロンプトを管理者で実行する項目があるので A キーを入力することで起動できる。ユーザーアカウント制御のウィンドウが表示されるので Alt + Y で「はい(Y)」を選択する。そうすると管理者権限でコマンドプロンプトが起動される。

# Windows 10 Creators Update

1. Windows キー
2. 検索ボックスに cmd と入力
3. Ctrl + Shift + Enter
4. Alt + Y

Windows キーを押下するとスタートメニューが開く。そのまま cmd と入力すると、検索ボックスでコマンドプロンプトのプログラム (cmd.exe) が検索されて選択される。コマンドプロンプトのプログラム (cmd.exe) を選択している状態で Ctrl + Shift + Enter で開くと管理者権限で実行できる。ユーザーアカウント制御のウィンドウが表示されるので Alt + Y で「はい(Y)」を選択する。そうすると管理者権限でコマンドプロンプトが起動される。

※ Creators Update 以降の Windows 10 だと、以前の方法では PowerShell が起動してしまう。（コメントしていただいた @ktanakaj さんありがとうございます。）
ruby2にengineyard gemをインストールする

Engine Yardをコマンドライン(CUI)から、操作するためにengineyard gemをインストールしてみた。

```
☺  gem install engineyard                                                                                                        ruby-2.1.4
ERROR:  Could not find a valid gem 'engineyard-serverside-adapter' (= 1.4.10) in any repository
ERROR:  Possible alternatives: engineyard-serverside-adapter
```

上記のエラーにあたり、versionを3以上に指定したら入りました。

```
☺  gem install engineyard -v "~>3.0.0" 
Thanks for installing the engineyard gem!

Need help? Problem? https://support.cloud.engineyard.com
Not working? Uninstall this version to downgrade.

IMPORTANT:
  Please verify eydeploy.rb files in staging after upgrading!
  Internals frequently change that could break eydeploy.rb.

Getting started:
  1. Run `ey init` to generate an annotated config file.
  2. Review the ey.yml file and commit it to your repository.
  3. Run `ey deploy` when you're ready to deploy.
The Engine Yard Pandas want to help you!
Email pandas@engineyard.com with your questions.
Successfully installed engineyard-3.0.1
Parsing documentation for engineyard-3.0.1
Done installing documentation for engineyard after 1 seconds
1 gem installed

```
Thymeleaf:特定の条件で 子要素の表示/非表示 を切り替える

# 表示する条件によって部分的に表示しない方法

動的に画面を作っていくと、どうしても特定条件のときはこのボタンを表示したくない、この段落(div)ごと表示したくない…こういった部分的に表示/非表示を切り替えたいケースが発生します。Thymeleafでは簡単に記述できます。

```html:sample.html
<div class="row">
	<div class="col-md-12">
		<div class="input-group">
			<button type="button" class="btn btn-success" id="write" name="write" >
				<span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>タスクを書きこむ
			</button>

			<!-- ここから条件で表示/非表示切り替え -->
			<span th:if="${display == true}">
				<button type="button" class="btn btn-warning" id="taskClose" name="taskClose" >
					<span class="glyphicon glyphicon-ok" aria-hidden="true"></span>タスクを閉じる
				</button>
			</span>
			<!-- ここまで -->
		</div>
	</div>
</div>
```
変数 displayがtrueではない場合、\<span th:if="${display == true}"\>の内部は出力されません。
これだけで切り替えできてしまいます。

## その他雑多な話

切りかえて表示する内容があまりにお互い違う場合は、条件ごとにHTMLを用意する方がいいのですが、部分的な場合は、1つ条件文を書いて表示/非表示を切り替えるのが有効です。

ただしあまりたくさんの表示/非表示の判定を1つのHTMLに盛り込むと、非常にメンテナンスしにくいHTMLになります。あまり数が多い場合は画面レイアウトや画面仕様の再検討をするべきでしょう。

余談ですが、旧来の方法であれば、判定した結果CSSのdisplay:noneを動的に出力する方法なんかも使われてましたね(ω・
bootstrapのaffix-bottom

# 概要
affix-bottomがうまくいかなかったので、その対応。

下までスクロールして、上までスクロールして、下までスクロールするとaffixがうまく切り替わりませんでした。

# 対応

```css
.affix-bottom {
  position: absolute;
}
```


# コード
## 失敗例
http://codepen.io/YamasakiKenta/pen/XJazKB

失敗例では、スクロール後に次のstyleが設定されてしまうため、うまく動きませんでした。

```css
style {
  position: relative;
}
```

## 成功例
http://codepen.io/YamasakiKenta/pen/xbLPwQ


# 参考
http://tomoosuzuki.blogspot.jp/2014/03/bootstrap3affix.html
I18n でネストしたモデルの属性名の対応

I18n の基本的な使い方は、下記でまとめたんだけど、その中でネストしたモデルの場合に翻訳できなかったので、調べて実装した時のメモです。

[Rails で I18n を使って日本語化](http://qiita.com/yutackall/items/0ff97132f31e5bacbf00)

## ネストした (名前空間を切った) モデルの場合

モデル例

``` ruby
class User < ActiveRecord::Base
  attr_accessible :name, :posts_attributes
 
  has_many :posts
end
 
class User::Post < ActiveRecord::Base
  attr_accessible :title, :body
 
  belongs_to :user, class_name: User::Post
end
```

書き方

``` yaml
ja:
  activerecord:
    attributes:
      user:
        id: ID
        created_at: 登録日時
        updated_at: 更新日時
        birthday: 生年月日
        email: メールアドレス
      user/post:
        title: タイトル
        body: 本文
```

## accepts_nested_attributes_for を設定しているモデルの場合

accepts_nested_attributes_for で他のモデルの属性を受け取れるようにしている場合には、
下記のように書けば、合わせて翻訳してくれる

モデル例

``` ruby
class User < ActiveRecord::Base
  attr_accessible :name, :posts_attributes
 
  has_many :posts
  accepts_nested_attributes_for :posts
end
 
class Post < ActiveRecord::Base
  attr_accessible :title, :body
 
  belongs_to :user
end
```

辞書ファイルの書き方

```
ja:
  activerecord:
    attributes:
      user:
        id: ID
        created_at: 登録日時
        updated_at: 更新日時
        birthday: 生年月日
        email: メールアドレス
      user/posts:
        title: タイトル
        body: 本文
```

もちろん、Post 単体を作成した際の validate エラー等を翻訳する場合は、下記のように個別に post で辞書ファイルに追記が必要  

```
ja:
  activerecord:
    attributes:
      user:
        id: ID
        created_at: 登録日時
        updated_at: 更新日時
        birthday: 生年月日
        email: メールアドレス
      user/posts:
        title: タイトル
        body: 本文
      post:
        title: タイトル
        body: 本文

```

上記との相違は、Post 名前空間を切っていない has_many のアソシエーションのため、`user/posts:` と表記が複数形になっている

参考URL：
http://journal.sooey.com/194
Rails で I18n を使って日本語化

作っているサービスが日本のみなので、アプリケーション全体の日本語化を企んだ時のメモです。

Rails の I18n を使って日本語化しました。

## localeの言語設定変更

`config/application.rb` を下記に変更する  

``` ruby
config.i18n.default_locale = :ja
```

デフォルトだと、`:de` でコメントアウトされているので、`:ja`に変更してアンコメント  

## 辞書ファイルダウンロード

I18n の辞書ファイルを一から全て書き出すと大量になってしまうので、
テンプレートを GitHub から下記コマンドでダウンロードして、プロジェクトのファイルを上書きしておく

辞書ファイル置き場は `config/locales/`

プロジェクトのトップで下記コマンドを実行

````
# 英語のテンプレートをDL
wget https://raw.github.com/svenfuchs/rails-i18n/master/rails/locale/en.yml -P config/locales/
```
```
# 日本語のテンプレートをDL
wget https://raw.github.com/svenfuchs/rails-i18n/master/rails/locale/ja.yml -P config/locales/
```

## モデル用の辞書ファイルを分割して作成

ダウンロードした辞書ファイルにそのまま書いてもいいんだけど、ファイルが長くなりすぎて管理しづらいので、
モデル用のファイルは別で作成する  

ファイル構成例

```
config/locales
         ├── en.yml
         ├── ja.yml
         └── models
               └── ja.yml
```

config/locales/models/ja.yml

```yaml
ja:
  activerecord:
    models:
      user: ユーザー
    attributes:
      user:
        id: ID
        created_at: 登録日時
        updated_at: 更新日時
        birthday: 生年月日
        email: メールアドレス
        salon_id: サロン
        password: パスワード

```
`models:` は、モデル名の翻訳で、`attributes:` は、モデルの attribute の翻訳になります。

ただし、このファイルは自動では読み込まれないので、`config/application.rb` に下記を追加して、
起動時に読み込まれるようにしておく。

``` ruby
config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}').to_s]
```

これで Rails を起動し直すと、validates とかのエラーメッセージが日本語化されている  

今回 API サーバーのため、ほとんど View ないため、View 用の辞書ファイルや呼び出しについては、
ふれてませんので別の機会にでもまとめます。

ネストしたモデルの場合の記載方法もまとめました。
[I18n でネストしたモデルの属性名の対応](http://qiita.com/yutackall/items/9f349101aaefce6043fb)
業務システム VS PHP Webサイト　業務の比較雑感

## はじめに
JavaやVisual Studioメイン業務向けシステムに携わっていた私が、
転職をしPHPメインのWebサイトの作成に関わり始めたときに衝撃を受けた諸々の比較メモです。
もし同じ境遇になりそうな人がいれば、参考にしていただけると嬉しいです。

### オフィスの雰囲気
**業務システム時代**
社員は30~40代メイン、社長は50代。取引先は大手企業の2次、3次請けが多い会社でした。
という背景があったので、新人くんは主にお茶くみ・電話取次・テスト業務。
ちょっと技術的に育つと取引先へ派遣。自社で勤務する人は少ない。
請負の場合は、自社で開発、結合テストから現地へGO。年単位で出張(出張費がおいしい)
有給は雰囲気的に取れない。遅刻したら1週間くらい気まずい。
残業は100時間超/月が普通。1回だけ40時間/月で済んだときはびっくりしたくらい。
残業代がでれば、新人君でも稼げる環境。
上司の権力が強い＆いい上司だと守ってもらえる。
完全に体育会系のブラック企業でしたが、
夢見る大学生から社会人らしくなれたので、経験できたことは良かったです。

**PHP・Webサイト時代**
社員20代メイン、社長は30~40代。2次請けもあるが直請けも多いところにいます。
派遣・出張はあまりない。メンバーがフリーランスの人もいて、上下関係がよく分からないけど、チームの仲はいい感じ。個人を尊重する。
仕事をちゃんとこなせば、休みも遅刻もあまり怒られない。理由があればそれは出来ませんって結構言える、言われる。
業務はそれなりのレベルを要求してくるので、新人くんは優秀な人でないとついていけない。(私が新人で入ったらついてけない自信がある)
比較すると文化系な人が多いのかなと思う。
激怒する人はほとんどいないけど、理由を説明できない作業は厳しく突っ込まれる。
もろもろ自己管理・セルフプロデュースが必要。
あんまりいいこと書いてないかもですが、今いる会社は良い人が多くて大好きです。
人間関係大事。

### プロジェクトの規模感
**業務システム時代**
何千万、何億単位。初めての開発から稼働まで1~3年かかる。
述べ何人動員されているか、全然分からない。

だいたいこんな流れ
機能定義->要件定義->基本設計->詳細設計->開発->単体テスト->-結合テスト->総合テスト->受入テスト->運用テスト->運用開始

仕様書・設計書類はガッツリ用意する。
1画面でA4、200ページある仕様書を書いてました（先輩の補助で）。

要件定義から受入テストが始まるまで、期間が空くので、
お客さんが仕様を覚えていない=バグといいつつも仕様変更がバンバン出てくる。
仕様書に記述があれば、やらなくていい。

もし要件定義から参加できれば、運用後の保守も入れることが多いので、10年くらい携わることになることもある。

**PHP・Webサイト時代**
数百万～数千万単位。3ヶ月～半年くらいで運用開始。

流れはこんな感じ
要件定義->基本設計->開発->単体・結合テスト->受入テスト->運用開始
あまり資料を作らない。その場その場で相談しながらが実装する事が多い。
そのため、受入テストで仕様変更も良くある。(ココは、どこ行っても同じですね)
保守はあまり長くないイメージ。

### ソースの管理
**業務システム時代**
CVSかSubversion。（最近はGit導入したい熱がある感じ？）
テスト開始後、ソースの削除はゆるされないので、
不要部分は日付入りで全部コメントアウト。
テスト工程の後半は、品証のP検(プログラム検定)を通過しないとコミット、デプロイが出来ない。
こういう事情があるので、修正差分の確認はしっかりやる。

**PHP・Webサイト時代**
Git。まだSubversionも現役・・・か？
開発~本番反映まで1人のPGだけが担当することもあって、
あまりしっかり管理してないこともあるし、
GitFlowを運用基準にして、しっかり運用していることもある。

### テスト
**業務システム時代**
Excelにマトリックスで作成。項目数は多い。
ソース1kに対して、何項目作ることとか、ある。
新人くん～若手が担当することが多い。

**PHP・Webサイト時代**
テストコード実行。もしくは、Excelでサクッと作って実施。
テスト者は開発の当本人が多い気がする。

### ツール
**業務システム時代**
eclipse, Visual Studio ,Oracle RDB, WinTree, CSE, WinMarge,
TortoiseSVN, FFFTP, Teraterm, 黒猫SQL, wireshark, サクラエディタ, 秀丸


**PHP・Webサイト時代**
eclipse, phpMyAdmin, WinMarge, TortoiseSVN, SourceTree, Poderosa, WinSCP
Sublime, PHPStorm, サクラエディタ, 秀丸, Fiddler, terapad++


## 終わりに
PHPでWebサイト制作に携わる今の方が、
最新の情報を取込みやすくて、時代を追っていきやすいのですが、
テストの考え方やソースの取扱いについては、
業務システム側の方が、属人的じゃないやり方で進められていて
好きだったりします。
どっちが良いんだよという事は置いといて、
こんなこともあるんだな程度で思っていただけると嬉しいです。
ありがとうございました。
ディスクの使用状況を確認する

使用率を確認する
---
``` bash
$ df -h
Filesystem  サイズ  使用  残り 使用% マウント位置
/dev/hda2   200G  127G   63G  68%  /
/dev/hda1   494M   18M  451M   4%  /boot
```

ディレクトリ・ファイルの容量を確認する
---
```bash
$ du /path
16      /path/hoge
168     /path
```

### サブディレクトリを含めない
---
```bash
$ du -s /path
168     /path
```

### 適切な単位で表示
---
```bash
$ du -h /path
16K     /path/hoge
168K    /path
```
### ソートと組み合わせる
---
```bash
$ du -h /path | sort -nr
168K    /path
16K     /path/hoge
```
これでディスク容量を圧迫しているものを調べるヒントになる。
`sort`のオプション`-n`は数値として扱う。
`-r`は結果を降順に出力する。
自分のグローバルIPが知りたい

######更新情報 
######2015/03/05 追記　`ipinfo.io`追加



---

これで取得できる。

``` bash
$ curl inet-ip.info
xxx.xxx.xxx.xxx
```


#### おまけ
---
json形式で取得できたりもする。

```bash
$ curl http://httpbin.org/ip
{
  "origin": "xxx.xxx.xxx.xxx"
}
```

付属情報も取れるやつ。

```bash
$ curl ipinfo.io
{
  "ip": "xxx.xxx.xxx.xxx",
  "hostname": "No Hostname",
  "city": "Tokyo",
  "region": "Tokyo",
  "country": "JP",
  "loc": "12.3456,789.1011",
  "org": "ABCDEFG HogeFuga, Inc."
}
```
Nexus7(2012)をLolipopからKitkatへのダウングレードする手順


基本的にデータはクラウドサービスに置いてるのでバックアップ取っていない。

# ブートローダのアンロック

以下のページを参考にアンロック

http://androidlover.net/smartphone/nexus-five/nexus-5-bootloader-unlock.html


# ファクトリーイメージを入手

以下のページから端末に対応したファクトリーイメージを入手

https://developers.google.com/android/nexus/images

自分の場合は "nakasi" の 4.4.4 をダウンロード

![スクリーンショット 2015-01-29 12.34.26.png](https://qiita-image-store.s3.amazonaws.com/0/8219/f5c393ae-7af0-6142-d3bf-35255479ce24.png "スクリーンショット 2015-01-29 12.34.26.png")


# ファクトリーイメージをインストール

詳細の手順は以下のページを参考に

http://androidlover.net/android-os/android-5-0-lollipop/android-5-0-lollipop-android-4-4-4-kitkat-download.html


## 端末を fastboot モードに

電源 + ボリューム下 を長押し(30秒くらい)

## インストール

ファクトリーイメージ(.tgz)を展開

ターミナルから、展開したファイルの中の flash-all.sh を実行

```
$ ./flash-all.sh
...
(bootloader) Bootloader is already unlocked
OKAY [  0.020s]
finished. total time: 0.020s
erasing 'boot'...
OKAY [  0.088s]
finished. total time: 0.088s
******** Did you mean to fastboot format this partition?
erasing 'cache'...
OKAY [  0.127s]
finished. total time: 0.127s
erasing 'recovery'...

... 省略 ...

``` 

インストールが終わると端末が再起動する。
SlidingTabsBasicをプロジェクトに導入する

※ この記事は Android Design Support Libraryが出る以前に書かれたものです。 これからタブUIを勉強するときは [Design Support LibraryのTabLayout](http://qiita.com/Nunocky/items/58cbaedbf486fe943c8b) を参照すべきです。

タブの実装として、サンプルの中にある SlidingTabsBasicを試す。

![scr1.png](https://qiita-image-store.s3.amazonaws.com/0/3847/2fb24dd2-b0bb-f77e-8dfc-e3c79cb159cf.png)


## 手順

### プロジェクトを作る
blank activityで適当に。

### SlidingTabLayout関連のコピー
[SlidingTabsBasicのコード](http://developer.android.com/intl/ja/samples/SlidingTabsBasic/index.html)から java/com以下のファイルをプロジェクトにコピー。 common/activitiesと common/logger、slidingtabsbasicディレクトリは必要ないので消す。

### SlidingTabsBasicFragmentのコピー
com.example.android.slidingtabsbasic/SlidingTabsBasicFragment.javaをコピー。これは作成したプロジェクトの名前空間の方へ。ソース中の以下の行を消す。

```
 import com.example.android.common.logger.Log;
```

### レイアウトのコピー
layoutの fragment_sample.xml, pager_item.xmlをコピーしてくる。

ここまででファイル構成はこんな感じに。

![scr0.png](https://qiita-image-store.s3.amazonaws.com/0/3847/65b08868-fb8f-82d0-1d0d-21b914dcf2d6.png)

### MainActivity

onCreateで SlidingTabsBasicFragmentを画面全体に追加する。最初に FrameLayoutを setContentViewしているのは API10向けの対策。

```java:MainActivity.java
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(new FrameLayout(this));

        if (savedInstanceState == null) {
            FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
            SlidingTabsBasicFragment fragment = new SlidingTabsBasicFragment();
            transaction.replace(android.R.id.content, fragment);
            transaction.commit();
        }
    }
```

プロジェクト作りは以上。実行してみる。

## 次は?
ここまでできたら、 SlidingTabsBasicFragmentを適当に書き換えて使っていける。

SlidingTabsBasicFragment.SamplePagerAdapterで各タブで必要なビューを生成しているので、その辺から読んで行くと良い。

タブのデザインは SlidingTabStripで実装されているので、選択中タブの色を変えたいときなどはこちらで。

あと Apache Licenseなので使った時はその旨を表示すること。
mongodumpコマンドでunauthorizedというエラーが出たらauthenticationDatabaseを指定する

タイトルで言いたいこと全部言いましたが、MongoDB のバックアップとかで `mongodump` コマンドを使った時に、`unauthorized` などというエラーが出て dump できない場合があります。
ユーザーとパスワードを設定して `auth true` で動かしている場合。

```
% mongodump -uUSERNAME -pPASSWORD -d DBNAME
connected to: 127.0.0.1
Thu Jan 29 11:23:44.208 DATABASE: DBNAME   to     dump/DBNAME
Thu Jan 29 11:23:44.209         DBNAME.system.indexes to dump/DBNAME/system.indexes.bson
Thu Jan 29 11:23:44.209                  14 objects
Thu Jan 29 11:23:44.209         DBNAME.system.users to dump/DBNAME/system.users.bson
assertion: 11010 count fails:{ ok: 0.0, errmsg: "unauthorized" }
```

ユーザーとパスワードあってるんはずなんだけどなんで？となりますよね。
`mongodump` コマンド実行時に、 `authenticationDatabase` オプションで、認証用のDBを指定してあげる感じですかね...

```
% mongodump -uUSERNAME -pPASSWORD --authenticationDatabase admin -d DBNAME
connected to: 127.0.0.1
Thu Jan 29 11:30:44.791 DATABASE: DBNAME   to     dump/DBNAME
Thu Jan 29 11:30:44.791         DBNAME.system.indexes to dump/DBNAME/xxx
Thu Jan 29 11:30:44.792                  14 objects
Thu Jan 29 11:30:44.792         DBNAME.system.users to dump/DBNAME/xxx
Thu Jan 29 11:30:44.793                  1 objects
Thu Jan 29 11:30:44.793         Metadata for DBNAME.system.users to dump/DBNAME/xxx
Thu Jan 29 11:30:44.793         DBNAME.pages to dump/DBNAME/xxx
Thu Jan 29 11:30:45.078                  8511 objects
Thu Jan 29 11:30:45.080         Metadata for DBNAME.pages to dump/DBNAME/xxx
Thu Jan 29 11:30:45.080         DBNAME.revisions to dump/DBNAME/xxx
Thu Jan 29 11:30:46.116                  42477 objects
Thu Jan 29 11:30:46.382         Metadata for DBNAME.revisions to dump/DBNAME/xxx
Thu Jan 29 11:30:46.387         DBNAME.users to dump/DBNAME/xxx
Thu Jan 29 11:30:46.389                  52 objects
Thu Jan 29 11:30:46.390         Metadata for DBNAME.users to dump/DBNAME/xxx
Thu Jan 29 11:30:46.390         DBNAME.configs to dump/DBNAME/xxx
Thu Jan 29 11:30:46.393                  13 objects
Thu Jan 29 11:30:46.393         Metadata for DBNAME.configs to dump/DBNAME/xxx
Thu Jan 29 11:30:46.394         DBNAME.bookmarks to dump/DBNAME/xxx
Thu Jan 29 11:30:46.394                  31 objects
Thu Jan 29 11:30:46.394         Metadata for DBNAME.bookmarks to dump/DBNAME/xxx
```


あまりソースはないですが公式ドキュメントは以下。しなかった場合、のことしか書いてなくてあまり役には立ちません:

* [mongodump — MongoDB Manual 2.6.7](http://docs.mongodb.org/manual/reference/program/mongodump)

> --authenticationDatabase <dbname>
> If you do not specify an authentication database, mongodump assumes that the database specified to export holds the user’s credentials.
PCをシャットダウンした時間のリストを作成

#ずぼらサラリーマンシリーズ第２弾

PCをシャットダウンした時間のリストを作成します。
作成先はクリップボードなので実行前にクリップボードの内容を待避してください・
これで出勤簿をごにょごにょすればおーるおっけーです。


```lang:SHUTDOWNCHECK.cmd
set tempfile=%temp%\%RANDOM%.xml
echo ^<QueryList^> > %tempfile%
echo ^<Query Id="0" Path="System"^> >> %tempfile%
echo ^<Select Path="System"^>*[System[(EventID=6006)]]^</Select^> >> %tempfile%
echo ^</Query^> >> %tempfile%
echo ^</QueryList^> >> %tempfile%
wevtutil qe %tempfile% /sq:true /rd:true /f:text | find "Date"| SORT  | clip
del  %tempfile%
```

```text:出力結果(クリップボード内容)
  Date: 2017-01-11T21:52:05.000
  Date: 2017-01-11T02:52:41.000
  Date: 2017-01-10T21:24:12.000
  Date: 2017-01-10T10:19:34.000
  Date: 2017-01-06T21:19:41.000
  Date: 2017-01-05T21:47:45.000
  Date: 2016-12-29T16:31:59.000
```
パスワード等の標準入力を隠す（プロンプトを出力しながら）

Rubyで入力をエコーバックしない方法は以下記事の通り`IO#noecho`を利用すればOK。

[パスワード等の標準入力を隠す](http://qiita.com/mirakui/items/88194612bb0fa705e39d)

## いい感じでプロンプトを出力したい

こうしたい。

- プロンプトを表示（ただしこの時点ではまだ改行しない）
- （ユーザー入力）
- 改行

ベタに書くとこんな感じ。

```rb:プロンプト出力しつつIO#noecho
require "io/console"

print "Password: "
input = STDIN.noecho &:gets
print "\n"

puts "Entered => #{input}"
```

ワンライナーで書けないのかコレ？という話。
（それ用のgem使えば実現できそうだけどデフォルト厨なので標準APIだけでやりたい）

## [Readline.readline](http://docs.ruby-lang.org/ja/2.2.0/class/Readline.html#M_READLINE)を使ってみる

`Readline.readline`はプロンプト出力を引数に渡せる。

```rb:これはエコーバックする
require "readline"

input = Readline.readline "Password: "

puts "Entered => #{input}"
```

エコーバックさせずに書くならばこう？

```rb:エコーバックしないけど...
require "io/console"
require "readline"

input = STDIN.noecho { Readline.readline "Password: " }

puts "Entered => #{input}"
```

だがこれだと入力後に改行が含まれない。

```:「abc」と入力した出力結果
Password: Entered => abc
```

こうしてみる。

```rb:プロンプトに改行を含める
input = STDIN.noecho { Readline.readline "Password: \n" }
```

入力受付中がこうなる。うーん。

```:入力受け付ける時点で改行している
Password: 
_ #←ここにカーソルが表示されてる
```

[`io/console`のドキュメント](http://docs.ruby-lang.org/ja/2.2.0/library/io=2fconsole.html)に、

> 例えば、IO#noecho を使ってパスワード入力を端末上に表示しないといっ た事ができます。同様の事が curses ライブラリやreadline ライブラリでも実現できますが、

とあるが、`Readline`にエコーバックさせないためのいい感じなI/Fが特に見つからない...。

## 結論

うまく書けなかった（少なくとも私は...）

- ベタに書く（アプリ内で頻繁な記述にならなければこれでいいや）
- 関数を作る

    ```rb:gets_without_echoと命名してみた
    require "io/console"
    
    def gets_without_echo io: STDIN, prompt: nil
      print prompt unless prompt.nil?
      input = io.noecho &:gets
      print "\n"
      input
    end
    
    input = gets_without_echo prompt: "Password: "
    
    puts "Entered => #{input}"
    ```

## 番外編：無理矢理ワンライナーで書いてみる

```rb:可読性ェ...
require "io/console"

input = STDIN.tap{print "Password: "}.noecho(&:gets).tap{print "\n"}

puts "Entered => #{input}"
```

オススメしたくない。

## コメントで教えてもらったスマートな書き方

良さそう。

```rb
require "io/console"
require "readline"

input = STDIN.noecho { Readline.readline("Password: ").tap { puts } }
```
Xcodeを使った開発で、gitで他人とコードを共有する際に気をつけること

# 概要
- 他人とコードを共有する際の設定を間違えてしまったためにschemeが共有されなかったので調べてみた
- Xcode6.1.1において確認

# 問題点

- gitでコードを管理する際、Xcodeで何かする度にxcuserstateが変更されてしまう。そこで.gitignoreを編集した。
- .gitignoreに以下の記述をしたところ、他の人がpullしてきたときにschemeが見えなくなってしまった。

```
### https://raw.github.com/github/gitignore/16053ba600e2a3cd49a737fa22ecbaf1f92b61ca/Global/Xcode.gitignore

build/
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata
*.xccheckout
*.moved-aside
DerivedData
*.xcuserstate
```

# 直した設定
- XcodeのRunボタンの右のスキーム名をクリック
- Manage Schemeを選択
- （Tips）ちなみにManage Schemesで出てくるポップアップでScheme名を選択してReturnを押すとScheme名変更ができる
- 右側のsharedにチェックを入れる
- gitでコミットして共有

# 問題点の理解
- デフォルトだとScheme設定はユーザ固有の模様？
- ユーザ固有の設定はxcuserstateの下にあるっぽい？
- そしてgitignoreで無視リストに入れたら共有されなくなってしまった模様...
sambaでファイルを上書きすると実行属性が付いてしまう場合の対処

#結論

```
[global]
map archive = no
```

#詳しいこと
Windowsでファイルを保存すると、「アーカイブ属性」という属性が自動的に付く。この属性は、xcopyコマンドなどでファイルをコピーする際に「アーカイブ属性が付いたファイルだけをコピーする。そしてアーカイブ属性を解除する」という挙動をするために使われる。つまり、増分バックアップを取るための属性である。

ところがこの属性、現代においてはあまり使われることは無い。なぜならCPUもハードディスクも十分に速いので、ほとんどのバックアップソフトはファイルの更新日時と先頭数KBのハッシュなど、別のやり方で増分を検出しているからだ。

##なぜ実行属性が付くのか
そこで、このあまり使われていないアーカイブ属性に目を付けたのが、sambaだ。unixには実行属性があるが、windowsには無い。無いなら、アーカイブ属性と実行属性を相互変換してしまえば良いではないか、ということである。

つまり、
Windowsでファイルを新規作成、または上書き保存する。
↓
ファイルにアーカイブ属性が付く。
↓
sambaがアーカイブ属性を実行属性に変換して受け取る。
↓
unixファイルシステム上のファイルに、実行属性が付く。

と、こういう仕組みになっている。

#解決策
そこで、smb.confにはmap archiveというフラグが用意されている。これは「アーカイブ属性と実行属性を相互変換するか、しないか」という、そのまんまのフラグである。

このフラグをnoにセットすることで、アーカイブ属性は無視されるようになる。

##map archive=noなsambaでr+xなパーミッションを設定したい
ちなみに、NTFSが扱えるシステムであれば、Everyoneと、グループと、オーナーのセキュリティ権限を変えることで、ちゃんと実行属性や書き込み属性に反映が出来る。WindowsXP以降であれば、「読み取りと実行」の権限がr+xに該当する。フルコントロールにすればrwxになる。map archiveをnoにしていても、ちゃんとパーミッションの設定は可能だ。
GistでGoを公開する

Goは思いついたときにサクッとつくって即公開できたら最高だと思う。
https://gist.github.com/ を使えばブラウザで簡単にGoを書いて公開できる。

### 要点
* GoはGitレポジトリ上に存在するパッケージを指定できる
* GistはGitレポジトリとしてのインターフェースを備えている
* Gistには複数のファイルを置ける
* そもそもGoにはGemfileすら要らなかった

### やり方
```go
package nurupo

import (
	"errors"
	"strings"
)

func Nurupo(message string) error {
	if strings.Contains(message, "ぬるぽ") {
		return errors.New("ガッ")
	}
	return nil
}
```

ここまで書いたら vim で `:Gist`。あとは自分のプログラムから参照するだけ。

```go
package main

import (
	"gist.github.com/404abd2193d2269ac5d1.git"
	"log"
)

func main() {
	if err := nurupo.Nurupo("ぬるぽ"); err != nil {
		log.Fatal(err)
	}
}
```

### 余談

この記事は[別の記事](http://qiita.com/r7kamura/items/5e7d082d8e0d0471d71d)のパクり記事です。ご注意ください。
一時ファイルを作成するときに乱数でファイル名を決定する

これだ。

```lang:乱数でファイル名をなんとかする.bat
echo %temp%\%RANDOM%.xml
```

```lang:★出力結果★
C:\Users\UsernameGoesHere\AppData\Local\Temp\30685.xml
```

ポイント：
%RANDOM%        - 0 から 32767 の間の任意の 10 進数に展開します。
Railsいつも最初にやること


##僕がいつも最初にやること
Railsを用いるときに僕がいつも最初にやっていることをまとめておきます。基本的にはメモ用。何かこれもやっといた方がいいよとかあればコメントください。

App生成

```bash:ターミナル
#appの作成
$ rails new app_name
$ cd app_name
```
Gemファイルの追加

```ruby:Gem
gem 'haml-rails' # ERB じゃなくて Haml を使いたい
gem 'therubyracer' #lessを使うために必要
gem "less-rails" #lessを使うよ宣言
gem 'twitter-bootstrap-rails' # Bootstrap の layout とかlessとかを generate してくれる
gem "font-awesome-rails" #fontawsomeを使えるように
gem 'pry-rails', :group => :development #デバッグ用
```
fontawsomeをコンパイルに追加

```css:application.css
/*
 *= require font-awesome
 */
```

環境作成

```bash:ターミナル
$ bundle install #GemのInstall
$ rails g bootstrap:install # bootstrapファイルの生成
$ rake db:create #DBの生成
$ rails g bootstrap:layout application fixed #共通レイアウトの生成
$ rm app/views/layouts/application.html.erb #古いapplication.html.erbを削除

```
Gitの登録


```bash:ターミナル
$ git init
$ git add --all
$ git commit -m "first commit"
```

###以上


あとはいつも通りControllerを作成したりModelを生成したり

```
$ rails g controller welcome index
$ rails g model Welcome name:string contents:integer
$ bundle install
```
rootを設定したり

```rubyh:config/routes.rb
root to: 'welcome#index'
```
好きなことをすればいいと思います
iPhoneで撮ったスクリーンショットにiPhoneフレームを付ける方法

http://iphone-screenshot.com/

Qiitaに限らず、ブログや教材を作成するときにスクリーンショットだけでなくiPhoneのフレームも表示させたいですよね。かといってPhotoshopで加工するのも面倒。そんなときにこのサイトを使うとけっこう簡単にフレーム付きの画像を作ることが出来ます。


![スクリーンショット 2015-01-29 12.12.58.png](https://qiita-image-store.s3.amazonaws.com/0/46672/310a4b34-455a-9fb0-3e8f-d68d8b17e88a.png)
FuelPHP で modules 利用時の config 設定について整理


* モジュール関連ドキュメント
    * http://fuelphp.jp/docs/1.8/general/modules.html

# FuelPHP で modules 利用時の config 設定
一度、config まわりを理解してしまえば当然という設定方法ですが、上記ドキュメントを読んだだけでは、スムーズにいかずあれこれ試したので、ここで備忘録的に整理しておきます。

今回は、特に DB まわりの設定です。DB は複数利用します。

## やりたいこと
* app とは別に共通利用したい platform モジュールを分割
* app で利用する db の設定は、通常通り app/config/db.php や app/config/(環境)/db.php で管理
* module で利用する db の設定は、通常通り module/platform/config/db.php や module/platform/config/(環境)/db.php で管理
* 上記設定状態で、通常通り app 内で app 用 DB にアクセス、module 内で module 用 DB にアクセス
* イメージとしては、組み込んだ共通モジュール platform の設定を app の config/config.php に設定するだけで問題なく利用できる。

## 設定方法（modules 側）
app の config と同じルールで module/platform/config 配下を設定します。

## 設定方法（app 側）
app/config/config.php で下記設定をします。（ここが重要でした。。。）

> 'always_load'  => array(
> 
>    'modules'  => array
>       'platform'
>    ),
>    'config'  => array(
>       'platform::db' => 'db',
>    ),
> ),

## DB 利用方法

* 参考
    * http://fuelphp.jp/docs/1.8/classes/database/usage.html

* app 側 DB 設定名(connection名)が 'mysql_app' の場合
> $result = DB::query('SELECT * FROM `users`', DB::SELECT)->execute('mysql_app');

* app 側 DB 設定名(connection名)が 'mysql_platform' の場合
> $result = DB::query('SELECT * FROM `users`', DB::SELECT)->execute('mysql_platform');

## まとめ
最初、config の設定で「'platform::db' => 'db',」とdb スペースに突っ込むことに気がつかず、ソース読んだりして config の読み込みまわりを理解して解決しました。config 設定場所にもこう設定するようにと例は書いてあったのですが、modules に分割してしまって、自分の中で混乱していたようです。スマートに設定できて良かったです。
ColdFusion Day 2014 に行ってきました

[ColdFusion Day 2014](http://www.samuraiz.co.jp/event/cfday2014.html?WT.mc_id=12-00-240)

2014/12/11 15:00-18:00

小雨の降る中、秋葉原UDXにて開催されたColdFusion Day 2014に行ってきました。
ちなみにビルを間違えたので、最初の何分かは聞いてない。

下記URLにて、資料が公開されました。(2014/12/18 add)
[ColdFusion Day 2014 イベントレポート | SAMURAIZ Corporation](http://www.samuraiz.co.jp/event/report/cfday2014/index.html)

Session 1. ColdFusion 最新アップデート＆ロードマップ情報
========

今後のCFの運営状況を知るロードマップの紹介です。
オレ達CF使ってても大丈夫だよね？
急にハシゴはずさないでね？

## セッション内容

(資料で説明)

ColdFusion9 のサポートは　2014/12/31まで!
あとはアップデートするため用のサポート期間らしい

(資料以外の説明)

アメリカのColdFusion基調講演の話
(ColdFusion Summitの話だっけか？)
[Adobe ColdFusion Summit 2014 - Las Vegas: October 16, 2014 to October 17, 2014](http://cfsummit.adobeevents.com/)

#### ColdFusionの普及率について

cfmで動いてるサイトの紹介

* リンゴを売ってる会社 もCF使ってたよ
* 青い鳥のマークのサイト もCF使ってたよ
  ⇒ [Investor relations - Twitter, Inc.](https://investor.twitterinc.com/index.cfm)

今後はPDF機能の強化、モバイルに力を入れるらしい。

今後のロードマップでは、ColdFusion13まで予定している。

Session 2. ColdFusion 技術サポート ホットトピックス
======

サポートの方より、みんなから届くお手紙の内容で多いものを紹介。
とりあえずコレやっといたらいいんじゃないかな？

## セッション内容

(資料説明)

### よくある障害の切り分け ホットトピック②　無応答

CF無応答の時には再起動で大体治るけど、再起動前にcfstatしとくとよい。

p19
お勧めできない理由は、DOSプロンプトが出ているから！

p24
catalina-exec-n　は、CFが実行中のスレッドを意味している

p26
「java.lang.RuntimeException: リクエストは、実行するための使用可能なスレッドを待機中にタイムアウトしました〜スレッド増やしてね！」的なエラーメッセージ。 
⇒ だからって簡単に増やさないでね。

Session 3. ColdFusion セキュリティガイド
=====

９月に勉強会をやったらしい。
行けばよかった。

## セッション内容

### ②XSS対策

CF10からはHTMLEditFormat()が使える…。

### ③CSRF

JSでFormをつくって、アンカーでSubmitさせる例のヤツ。

CF9.0.2以降では、下記の割り符用関数が使えるので便利。

* CSRFGeneratieToken()
* CSRFVerityToken()

セキュリティの導入は、社内システムでもやった方がいいかもよ
部長にリンク踏ませて情報盗んだりやら…。

### その他

⑦番以降は、最新のCFだったら大丈夫！
古いバージョンは備えておいてください。
もしくは最新バージョンにアップデートしてね。

**今日の用語**
*プログラムの品質を上げよう*
*その際には新しい関数使おう*
*CFを最新版に以下略*

### Robots例外処理！
エラーページがGoogleに拾われたら泣きそう
開発中は、エラーページにいろいろ情報を載せたいが、
本番環境は、エラーページに情報を出さないようにした方がよいよね。

### JVM
ColdFusionだけではなく、JVMの不具合も確認してね。
プログラム中には問題ないが、
過去のJVMのバージョンでは問題があるものもあった。

Session 4. 新しいパズル認証の仕組み「Capy Captcha のご紹介」
=====

Capyの声のいい人の話。

## セッション内容

文字をまげる画像の認証は、Googleのアプリで簡単に変換できるらしい。

パズル認証でも、ロボットかどうかがわかる…が、
画像検索して一致させても、パズルの動かし方で検知したりとかしている。

秘密のお話。

Session 5. パネルディスカッション 『ColdFusionマイグレーションについて』 ～ColdFusion 11 を選ぶ？それとも 10 を選ぶ？～
=====


ウィングひぐまさん
エスアイヤふないさん
サムライズのサポートの方
でのパネルディスカッションです。

### マイグレーションの注意点

6以降はJavaベースなので、注意。
メジャーバージョンが大きく上がるから、難しいというわけではない。

OSが変更した場合は、パスを書き換えた…
廃止タグの管理機能
コードアナライザ？
アプリケーションの作り方によってケースバイケース

### 開発者あるある

お客さんは簡単なタグしか使ってないから、
開発者がやったものより簡単とか。

### バージョン上げるときの注意点

* Excel周りの不具合
いくらか障害があって、CF11になると解消している？

* CFReport
7-9に上げる時にレイアウトが崩れた
11は崩れてない…

* プログラム周り
プログラムが間違っていたのだが、
昔は動いたが、最近のやつは厳密になってエラーになってくれた！

* exc.js
Ajaxのライブラリが違う…

####　CF11の新機能について

* CFDocument
昭和みたいなHTMLだったが、CF11にすると平成レベル！

* Chart
11になるとエンジンが変わってしまう…が。
2003年のWebChart以来の変換らしい。


#### その他

CF10になったらTomcatになったらしい。

MXは悪夢らしい。


## まとめ

10でも11でもどっちでもよいらしい。





---
# 感想

セキュリティ対策について知りたかったので、前回行われたという勉強会に出席すべきだったかも。

あとは基本ColdFusionをアップデートしてね的な方向性なので、アップデートするとよかろう。

以上。
Vimで改行時の自動コメントアウトを無効化

# 背景
コメントアウトされている行から改行を行うと、挿入モードからでもノーマルモードからでも、新しい行をコメントアウトしてくれる機能がVimにはついています。なんという優しさ。

しかし、個人的には鬱陶しい……よし、消し去ろう！

# 既存手法
インターネットの海を彷徨った結果、``formatoptions-=or``をすれば良いということはわかったのですが、どうにもうまくいきません。

当然のごとく、全く同じ悩みを抱えていた方がいました。

## [vim で改行での自動コメントアウトを無効にする](http://easyramble.com/disable-vim-auto-comment.html)
>検索して多く見つかった方法ですけど、最初 ~/.vimrc に以下のように書いたのですが上手く行きません。

> ```vim
> set formatoptions-=ro
> ```
 
> または、
 
> ```vim
> autocmd FileType * setlocal formatoptions-=ro
> ```
 
> どちらも上手くいかないので、さらにググりまくる。どうやら、作業中のカレントディレクトリの .vimrc に上記を書く方法もあるようです。まあカレントディレクトリに書けばできそうですけど、毎回は面倒くさいので他の方法を探すことに。

そう、全然うまくいかないんですよ！プラグインが悪さしてる気はしますが、とにかくうまくいかないんですよ！

> ~/.vim/after 内に以下のとおりファイルを作成します。

> ```vim
> $ mkdir -p ~/.vim/after/ftplugin/
> $ vi ~/.vim/after/ftplugin/ruby.vim
> " 改行で自動コメントアウトを無効にする
> setlocal formatoptions-=r
> setlocal formatoptions-=o
> ```

> ftplugin/ruby.vim の部分は、目的のファイルタイプに応じて修正します。Perl を使う場合だったら、ftplugin/perl.vim とか。

試してみたら見事にできました。

が、しかし！

これだと指定したファイルタイプのものしか設定できません。各ファイルタイプごとにいちいち設定するなんて嫌だ！面倒臭すぎる！

というわけで試行錯誤した結果、なんとかなりました。

# 提案手法
まず、``~/.vim/after``内に以下のように``plugin``ディレクトリと``common-settings.vim``ファイルを作成。``.vim``ファイルの名前はなんでも大丈夫ですが、なんのファイルかわかりやすいような名前にしておきました。

```sh
$ mkdir ~/.vim/after/plugin
$ touch ~/.vim/after/plugin/common-settings.vim
```

そして、作った``common-settings.vim``内に以下を記述。

```vim
au FileType * setlocal formatoptions-=ro
```

これで無事、どのファイルを開いても``formatoptions-=ro``が設定されるようになりました！

めでたしめでたし。
[AngularJS][JavaScript] AngularJSアプリをブラウザのコンソールからデバッグする方法

angularjsで定義したスコープの中身をちょっと覗いてみる方法です。

すでに同記事多数かもしれません。お目汚し失礼。

***

こんな感じでスコープを覗けます。

```javascript:console
angular.element(document.querySelector('タグ名')).scope()
```

class="ng-scope"が付いているので、こんな風に.ng-scopeクラスで探すほうが簡単かもしれません。何番目のスコープを取得するのかは、添え字で指定します。

```javascript:console
angular.element(document.querySelectorAll('.ng-scope')[0]).scope()
```


__2015/2/4 追記__

もっと素早いやりかたを教えていただきました。Thanks @miyabisun !

Chrome/Firefoxであれば、デベロッパーツールから選んだ要素が```$0```に格納されますので、```angular.element``` の引数に ```$0``` を渡せばよいです。

画面から選んで・・・・・・

![インスペクタ](https://qiita-image-store.s3.amazonaws.com/0/59475/f8485c3e-7db5-041a-2ede-058e570abbf0.png)

普通に引数に渡します。

```js:console
angular.element($0).scope()
```

![コンソール](https://qiita-image-store.s3.amazonaws.com/0/59475/a39a0680-5861-9a9d-6ee0-94841c10ff4a.png)


jQueryが入っていれば、もっと素早くいけるそうです。

```js:console
$($0).scope()
```


***

controller-as記法であれば、scope()の「コントローラ名」プロパティを参照するとコントローラが入っています。

```javascript:console
angular.element(document.querySelector('タグ名')).scope().コントーラ名
```

__2015/7/16 追記__
コンソールを使うのがだるくなったら、ブラウザ拡張をインストールすると楽ちんです。
記事書きました → [AngularJSアプリ開発を楽にするブラウザ拡張「ng-inspector」](http://qiita.com/sengoku/items/47abe2a3e8ae3d532f35)