OmniAICreator/Qiita-1.07M huggingface dataset:
vagrantで共有フォルダをマウントできないとき

最近Vagrant触り始めました。

[http://www.vagrantbox.es/](http://www.vagrantbox.es/)からダウンロードしたBOXファイルをvagrant upするとエラーが出て共有フォルダをマウントできなかったのでメモ。
***
Failed to mount folders in Linux guest. This is usually because
the "vboxsf" file system is not available. Please verify that
the guest additions are properly installed in the guest and
can work properly. The command attempted was:

mount -t vboxsf -o uid=`id -u vagrant`,gid=`getent group vagrant | cut -d: -f3`
vagrant /vagrant
mount -t vboxsf -o uid=`id -u vagrant`,gid=`id -g vagrant` vagrant /vagrant

The error output from the last command was:

/sbin/mount.vboxsf: mounting failed with the error: No such device
***
GuestAdditionのバージョンが合わないと起こるエラーらしい。
vagrant-vbguestプラグインを使えば最新のGuestAdditionをインストールしてくれるみたい。

インストールは以下のコマンドで出来る。
```
$ vagrant plugin install vagrant-vbguest
```
Unbalanced calls to begin/end appearance transitions forエラーが出るとき

    
viewDidLoad()内でほかのViewControllerなどを呼ぶとこのエラーが出るようです。解決方法はviewDidLoadではなく、

	- (void)viewDidAppear:(BOOL)animated
	{
		[self performSegueWithIdentifier:@"ShowViewSegue" sender:self];
	}

で出してやるとOKです。
Haskell hspec 入門


Haskell hspec を一から調べた内容をまとめます。

# はじめに

僕は Java では JUnit でテストをこれまで、数万テストケースは書いてきました。特に Java VM を開発していたので、リグレッションテストの重要性は承知しています。

JUnit はテスト駆動開発という考え方で、実装よりもテストを先に書いて、すべてのテストが通ったら実装完了、という開発方法に用いることが推奨されています。いわゆる「テストファースト」です。

hspec とは、振る舞い駆動開発という、テスト駆動開発を更に一歩進めた考え方を採用する開発方法に用います。振る舞い駆動開発とは簡単に言うと、自然言語に近い文法でスペックを記述すると、それがテストケースになる、というようなものです。実装の前にスペックを書き下すということで、こちらは「スペックファースト」と呼ばれているようです。

# hspec のインストール

hspec をインストールするには、以下のように行います。

```bash
$ cabal update && cabal install hspec
```

# hspec による Hello World

もっとも簡単な hspec の例をまず書いてみましょう。基本ですね。

```Hello.hs
import Test.Hspec

hello :: String -> String
hello name = "hello, " ++ name

specHello :: Spec
specHello = do
  describe "hello" $ do
    it "standard" $
      hello "world" `shouldBe` "hello, world"
    it "empty" $
      hello "" `shouldBe` "hello, "

main :: IO ()
main = hspec $ do
  specHello
```

`hello` のテストを `specHello` で定義しています。振る舞い駆動開発の考え方を適用すると、先に `specHello` を書いてから `hello` を実装します。

振る舞いを定義する関数は `Test.Hspec.Spec` という型で、これは `do` ブロックに複数の `describe` ブロックを定義し、`describe` ブロックに複数の `it` ブロックを定義します。最初の振る舞い定義の ```hello "world" `shouldBe` "hello, world"``` は、かなり自然言語に近いですね。

本来であれば、実装とテストは分けたほうが良いのですが、簡単のため一緒にしています。

これを以下のように実行します。

```bash
$ runhaskell Hello.hs

hello
  standard
  empty

Finished in 0.0002 seconds
2 examples, 0 failures
```

# 参考文献

以下を見ればすべて書いてあります。

- [Hspec: A Testing Framework for Haskell](http://hspec.github.io/)
- [Test.Hspec](https://hackage.haskell.org/package/hspec-2.1.5/docs/Test-Hspec.html)
Swift でシングルトン (Swift 1.2 以降版)

Update: __Swift 2.x, 3.0 においてもこの記法は有効__です。


Swift 1.2 の改定でプロパティに `static` 修飾子が付けられるようになりました。
ということは、シングルトンパターンがもっと短く書けます。

[今まで](http://qiita.com/1024jp/items/3a7bc437af3e79f74505)こう書いていたのが...

```swift

class FooController: NSObject {
    
    // singleton in previous Swift
    class var sharedController : FooController {
        struct Singleton {
            static let instance = FooController()
        }
        return Singleton.instance
    }

    // ...
}
```

こうなる...!

```swift

class FooController {
    
    // singleton in Swift 1.2+
    static let shared = FooController()

    // ...
}
```

たった1行。


`final` 足して `init` をプライベートにするともっとシングルトン的かもね。

```swift

final class FooController {
    
    static let shared = FooController()

    private init { }
}
```

コードが短い、ステキー。
NGUI3系のUIButtonスクリプトのstatusをスクリプトから変化させる

UIButton はNormal,Hover,Pressed,Disabledの４つのステータスでSpriteのColorが変わります。
UIButtonのステータスを変えるには、UIButtonのSetStateメソッドを使います。
第一引数には、UIButtonColor.Stateのenumを与え、
第二引数には、boolをあげます。

````lang:
GetComponent<UIButton> ().SetState (UIButtonColor.State.Disabled, immediate: false);
```

第二引数のimmediateは何のためにあるのだろう・・・調べても分からんかった・・・
[iOS] Get the location use gps

First add the `CoreLocation.framework` to the project.
Then use the following code to get the location:

```swift
import CoreLocation

class ViewController: UIViewController, CLLocationManagerDelegate {

    var locationManager:CLLocationManager! = nil
    
    override func viewDidLoad() {
        super.viewDidLoad()
        locationManager = CLLocationManager()
        locationManager.delegate = self
        locationManager.startUpdatingLocation()
    }
    func locationManager(manager: CLLocationManager!,
        didUpdateToLocation newLocation: CLLocation!,   
        fromLocation oldLocation: CLLocation!) {

        let longitude = newLocation.coordinate.longitude
        let latitude = newLocation.coordinate.latitude
        
        longitudeLabel.text = longitude.description
        latitudeLabel.text = latitude.description

        //If you just want to get once, use this code
        //to stop the updating location.
        locationManager.stopUpdatingLocation()
    }
}
```
[Ruby基礎学習] ルーンチェックサム

# はじめに
また問題を解いてみる。
理解力に乏しいので頭がこんがらがってしまった。

# 問題
```
ルーン式は、識別番号の検証によく使われる方式だ。
元の数字の各桁に対して、1桁おきにその数字を2倍する。
そのあとで、各桁の数字を足していく（2倍した結果が2桁になる数字があれば、十の位と一の位をそれぞれ個別に足していく）。
その合計が10で割り切れる場合に、識別番号は妥当なものであると見なす。
任意の長さの識別番号を受け取り、その値がルーン式で妥当かどうかを調べるプログラムを書こう。
このプログラムでは、1つの桁を読み込んだら次の桁に進む前に、その桁の処理を済ませなければいけない。
```

# 解答
チェックサムとはデータの信頼性を検査するために算出した値のことらしい。

今回の問題の場合、例えば「123455」という値を検証するとする。

「123455」の右端はチェックディジットとなっていて、
その左の5から1桁おきに以下のように計算する。

```
5　→　チェックディジット
5　→　5×2　→　10　→　1+0　→　1
4　→　4
3　→　3×2　→　6
2　→　2
1　→　1×2　→　2
```

全部数字を足す。

```
5+1+4+6+2+2　→　20
```
「20」は10で割り切れるため、「123455」は有効な値と判断される。
本を読む限り、こんな感じみたいだ。
頭がこんがらがってなかなか理解できなかったけど。


コード書いたらこうなった。
よくわからなくなった・・・
繰り返しも多いし訳分からん感じになっているのだけはよくわかる。

```rb
def checkValue2(value)
	strValue = value.to_s
	loopCount = (strValue.length - 1) - 1
	checkSum = 0
	checkDigit = strValue[strValue.length - 1].to_i

	if (strValue.length - 1) % 2 == 0
		loopCount.downto(0) do |i|
			val = strValue[i].to_i
			if (i + 1) % 2 == 0
				if (val * 2) >= 10
					checkSum += (1 + (val * 2 % 10))
				else
					checkSum += val * 2
				end
			else
				checkSum += val
			end
		end
	else
		loopCount.downto(0) do |i|
			val = strValue[i].to_i
			if (i + 1) % 2 == 1 
				if (val * 2) >= 10
					checkSum += (1 + (val * 2 % 10))
				else
					checkSum += val * 2
				end
			else
				checkSum += val
			end
		end
	end

	if (checkSum + checkDigit) % 10 == 0
		puts strValue + "は有効な値です。"
	else
		puts strValue + "は無効な値です。"
	end
end
```
用意したテストデータは今のところ想定した結果になる。
でも動けばいいというものでもない･･･。

```rb
# 123455（有効な値）
checkValue(123455)
⇛ 123455は有効な値です。

# 123456（無効な値）
checkValue(123456)
⇛ 123456は無効な値です。

# 346286128821646820211（有効な値）
checkValue(346286128821646820211)
⇛ 346286128821646820211は有効な値です。

# 19（無効な値）
checkValue(19)
⇛ 19は無効な値です。

# 18（有効な値）
checkValue(18)
⇛ 18は有効な値です。
```

「123455」の場合は以下のように処理する。
チェックディジットを除いたら桁数が奇数になるので、
左から数えると1,3,5番目が2倍の計算をする対象。

```
5　→　チェックディジット
5　→　2倍する
4　→　そのまま
3　→　2倍する
2　→　そのまま
1　→　2倍する
```

「12344」の場合はチェックディジットを除いた桁数が偶数なので、
左から数えると2,4番目を2倍の計算をする。

```
4　→　チェックディジット
4　→　2倍する
3　→　そのまま
2　→　2倍する
1　→　そのまま
```

このへんがうまいやりかたが分かっていない。
・奇数か偶数かによって2倍するのが奇数桁か偶数桁か変わる。
・チェックディジットの1つ左の数から左端に向かって計算する。

良いやり方ないか考えよう。
ちょっと考えすぎて頭が混乱してしまったので、寝る。

# 問題の出典
* プログラマの考え方がおもしろいほど身につく本　問題解決能力を鍛えよう！
Dockerコマンドをsudoなしで実行する方法

# なぜDockerコマンドにはsudoが必要なのか？

https://docs.docker.com/installation/ubuntulinux/#create-a-docker-group

> The docker daemon binds to a Unix socket instead of a TCP port. By default that Unix socket is owned by the user root and other users can access it with sudo. For this reason, docker daemon always runs as the root user.
> 
> To avoid having to use sudo when you use the docker command, create a Unix group called docker and add users to it. When the docker daemon starts, it makes the ownership of the Unix socket read/writable by the docker group.

とのことで、`docker`という名のグループを作ってユーザをそこに所属させればOKです。

# やり方

```
# dockerグループがなければ作る
sudo groupadd docker

# 現行ユーザをdockerグループに所属させる
sudo gpasswd -a $USER docker

# dockerデーモンを再起動する (CentOS7の場合)
sudo systemctl restart docker

# exitして再ログインすると反映される。
exit
```
ワードプレスサイト移行手順


##さくらVPSの場合

手順（ドメイン同じでサーバ移動の場合）

1. 移行先サーバにてssh,ftp,iptables,apache,php mysqlのインストールと設定、ユーザの追加など
※それぞれ設定、バージョンは旧サーバ、新サーバともに合わせる。既存ワードプレスサイトに合わせたバージョンをインストールする。

2. 移行前Wordpressのプログラムを一式ダウンロード, ftp or scp or rsync。
3. 移行前データベースのエクスポート, phpmyadminで、コンソール上でも
4. 移行先サイトのドキュメントルートにWordpressのプログラムを一式アップロード
5. 移行先データベースの新規作成（既存と同名で、照合順序はutf8-general-ci）、3でエクスポートしたSQLファイルをインポート
6. 移行先URLへアクセス、問題なく表示されることを確認
7. ネームサーバの編集、ドメインのゾーン編集、AレコードのIPを新サーバのIPに変更（プラスTTL:60（一分）と短めに変更）
8. 既存ワードプレスを確認したい場合設定変更, 以下詳細
9. 最終確認

##他のサーバの場合
レンタルサーバでfutoka,Xserver,hetemlなどの場合、標準でLAMP環境が構築されているので、手順２からでよい

##ドメイン同じでサーバが変更されているかの確認
手順7の後、一分ほどで新サーバで確認できます。`nslookup example.com` で確認

##問題がある場合
###移行先URLにアクセスして、TOPページは表示されるが、パーマリンクの設定を`/%category%/%postname%/`のようなカスタム構造にしていて、他記事のページが404 Not Foundでかつ、リンクが文字化けする場合

####Apacheのmod_rewriteモジュールの確認

```bash
# grep mod_rewrite /etc/httpd/conf/httpd.conf
LoadModule rewrite_module modules/mod_rewrite.so
# find / -name mod_rewrite.so -print
/usr/lib64/httpd/modules/mod_rewrite.so
```
あれば問題なし

####Rewrite設定の確認
.htaccessが以前と同じ状態であれば問題なし
文字コードはUTF-8で保存されているか。
パーミッションは604となっているか。


####httpd.confの確認
```apache
<Directory "/var/www/html">
	AllowOverride None 
</Directory>
```

となっていればNoneをAllに変更する

```apache
<Directory "/var/www/html">
	AllowOverride All
</Directory>
```

これで.htaccessの設定が有効となる

##既存のサイトも閲覧したい場合
ドメインの向き先を変更した後だと、既存ワードプレス側の設定を変更しないと見れません。

以下SQLを既存サイト（`http://ホスト名/phpmyadmin/`）で実行

```mysql

#wordpressのドメインの変更
UPDATE wp_options SET option_value =
REPLACE (option_value, 'old_url', 'new_url')
WHERE option_name = 'home' OR option_name = 'siteurl';

#記事のリンクの変更
UPDATE wp_posts SET guid = REPLACE (guid, 'old_url', 'new_url');

#記事内のURLの変更
UPDATE wp_posts SET post_content =
REPLACE  (post_content, 'old_url', 'new_url');

#画像パスの変更
UPDATE wp_posts SET post_content =
REPLACE (post_content, 'src="old_url', 'src="new_url');

UPDATE wp_posts SET  guid =
REPLACE (guid, 'old_url', 'new_url')
WHERE post_type = 'attachment';

#各投稿メタ情報を変更
UPDATE wp_postmeta SET meta_value =
REPLACE (meta_value, 'old_url','new_url');
```

それぞれold_url, new_urlは書き換えてください。
jBatch情報源

jBatchの情報が載っているところのまとめ。

# WEBページ
## 原典
jBatchの仕様はこちら。
色々な記事を参考にするのは良いですが、時々本来の仕様に立ち戻ってみよう。本当は英語版で読めればよいのですが、日本語に翻訳して下さった物もあります。
### jBatch(JSR-352)の仕様原本
[The Java Community Process(SM) Program - communityprocess - final(JSR-000352 Batch Applications for the Java Platform 
(Final Release))](https://jcp.org/aboutJava/communityprocess/final/jsr352/index.html)
### jBatch仕様の翻訳
[kagamihoge/JSR-352-1.0-Final-Release-tekito-na-honyaku Wiki](https://github.com/kagamihoge/JSR-352-1.0-Final-Release-tekito-na-honyaku/wiki)
### JavaEE7チュートリアルのjBatchの章の翻訳
[The Java EE 7 TutorialのjBatchの章をテキトーに訳した](http://kagamihoge.hatenablog.com/entry/2014/04/10/205918)

## HOW TO
### JavaEE7全般の解説をしているブログの1ポスト
[Java EE 7 検証環境構築(9) jBatch 概要をおさえる](http://typea.info/blg/glob/2014/05/java-ee-7-9-jbatch.html)

### オフィシャルな紹介
[待望のバッチ処理機能がJava EE 7で標準化。「jBatch」で何ができるのか、どう使うのか？](http://builder.japan.zdnet.com/sp_oracle/weblogic_2013/35038499/)

### JavaSE環境でjBatchを動かす方法の解説。バッチサーバに余計なものを乗せたくない時には良い。
[jBatch(JSR-352) on Java SE 環境](http://yoshio3.com/2014/02/18/jbatchjsr-352-on-java-se-%E7%92%B0%E5%A2%83/)

### NetBeansのプラグインにjBatch Suiteというものがあるらしい。GUIで順序や条件分岐がつくれたりする模様。
[Oracle Blogs 日本語のまとめ: [Java] jBatch Suite: Visual Development for the Java API for Batch Processing/Java EE 7](http://orablogs-jp.blogspot.jp/2014/10/jbatch-suite-visual-development-for.html)

### パラメータの受け渡し方法が良く分かるページ
[Glassfish jBatch Parameter - @//メモ](http://hondou.homedns.org/pukiwiki/pukiwiki.php?Glassfish%20jBatch%20Parameter)

### Chunkで並列処理をさせる方法
[Kohei Nozaki's blog: Partitioned Chunk Processingで並列処理してみる](http://www.nailedtothex.org/roller/kyle/entry/articles-jbatch-partition)

# 書籍
JavaEE7の和書はあるけどあくまでウェブシステム開発用の本があるだけです。jBatchについては和書で言及している本は今のところありません。洋書もjBatchを扱っているのはごく一部。

## 最後の19章"Concurrency and Batch Applications"に記載がある。
[Java EE 7 Recipes: A Problem-Solution Approach (Recipes Apress)](http://www.amazon.co.jp/gp/aw/rd.html?ie=UTF8&a=1430244259&at=programerseit-22&dl=1&lc=msn&uid=NULLGWDOCOMO&url=%2Fgp%2Faw%2Fd.html)

## 11章の"Batch Applications, Caching, and Concurrency"に記載がある。タイトルからすると内容は薄いかも。
[Introducing Java EE 7: A Look at What's New](http://www.amazon.co.jp/gp/product/1430258489/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=1430258489&linkCode=as2&tag=programerseit-22)

## 12章の"Long-term tasks' Execution"に記載がある。
[Java EE 7 Development With Wildfly](http://www.amazon.co.jp/gp/product/1782171983/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=1782171983&linkCode=as2&tag=programerseit-22)
触れば触るほど綺麗になるコード

ある完成されたプログラムのソースコードに改変を加えるとき、改変を加えれば加えるほど汚くなっていくやつと、逆に、綺麗になるやつがあると思いませんか？

何が違うんだろうなぁと。。。そこで気づいたのが、以下。

改変を加える人間に「プライドと責任感」があるかどうか。

「俺の書いたコードで汚いのは許さない」というプライド
「大胆に改変するけど、絶対に壊さない」という責任感

やっつけの仕事のときには、既存のコードに影響を及ぼさないように、そーっとコードを継ぎ足します。それを繰り返すと、ソリャーもうひどいコードが残る。
【PHP】変数の中身を1行で交換する方法

こう。

```php:php
list($b, $a) = [$a, $b];
```


3つ以上の変数の交換の場合も

```php:php
list($d, $c, $b, $a) = [$a, $b, $c, $d];
```

（jsでも）

```js:JavaScript
a = [b, b = a][0];
```
How to run GUI CaptureStream on Ubuntu 14.10

新年度がスタートして、半月が経ちました。
心機一転、自己啓発に語学学習を始める方も多いのではないでしょうか。

今回は、語学学習の強い味方である[GUI CaptureStream](http://sourceforge.jp/projects/capturestream/)を、Ubuntu 14.10(64bt版)で動作させる方法を説明したいと思います。

# CaptureStreamとは #
某ラジオ番組の語学学習のストーリーミングをダウンロードするツールです。
動作環境として、Windowsは基より、Mac, Linuxをサポートしています。

Windows版、Mac版は、[GUI CaptureStream](http://sourceforge.jp/projects/capturestream/)をダウンロードして、すぐに使用することできます。

しかし、LinuxであるUbuntuで[GUI CaptureStream](http://sourceforge.jp/projects/capturestream/)を動作させるには、一手間かかります。

# CaptureStreamをUbuntu 14.10(64bit版)で動作させるには #
複数の共有ライブラリ(Windowsで言うところのDLL)をインストールする必要があります。

以下に、[GUI CaptureStream](http://sourceforge.jp/projects/capturestream/)に必要なライブラリのインストール方法を示します。


## ライブラリ・パッケージの入手 ##

1点を除いて、全てのライブラリは、Ubuntu 14.04(64bit版)のリポジトリから入手可能です。
残る1点とは、libass4ライブラリです。

libass4ライブラリは、[Ubuntu packages](http://packages.ubuntu.com/trusty/i386/libass4/download)から、入手すること出来ます。[先のURL](http://packages.ubuntu.com/trusty/i386/libass4/download)のアクセス後に表示されるミラーサイトの1つをクリックして、libass4ライブラリ・パッケージを`$HOME/Downloads`などにダウンロードしてくさい。

## ライブラリのインストール ##

	$ sudo apt-get install libva1:i386
	$ sudo apt-get install libsdl1.2debian:i386
	$ sudo apt-get install libtheora0:i386
	$ sudo apt-get install libmp3lame0:i386
    $ sudo dpkg -i $HOME/Downloads/libass4_0.10.1-3ubuntu1_i386.deb

---
以上で、Ubuntu 14.10(64bit)で、[GUI CaptureStream](http://sourceforge.jp/projects/capturestream/)を実行する環境が整いました。後は、ターミナルなどから、[GUI CaptureStream](http://sourceforge.jp/projects/capturestream/)の実行体である、CaptureStreamを実行するだけです。

*Enjoy learning foreign languages!*
input[type=number] の有用性

# input[type=number] の有用性

html5 で input タグの type 属性がかなり増えましたが、なんだかあまり使われていない印象です。
ここでは type の種類（特に number）に着目しつつ、その有用性を説きたいと思います。

## 有用性1（UI の使い勝手が向上する）

もう言うまでもないメリットです。`type=number` に対応しているブラウザであれば

- スピンボタンが登場する
- 上下キーで値が上下する
- `min`, `max`, `step` 属性で値をある程度制限することができる

type には `tel` とか `search` とか `email` とか 色々ありますが、ブラウザがあんまり対応していなかったり、目を見張るメリットがなかったり、入力項目として頻出しない、などであまり目立たない印象です。（ただ、入力値を明示する意味で積極的に使うべきだと思います。まぁスマホでは重要ですが）。

その点 `type=number` は「数値入力」というありふれた項目である上、スピンボタンがありがたすぎます。


## 有用性2（互換性を意識する必要がない）

html においては

- なんだかよく分からない type は `type=text` として扱う
- なんだかよく分からない type でも未対応の場合は `type=text` として扱う

と定義されています。
従って、何も考えず `type=number` としておけば、未対応ブラウザは `type=text` として、対応ブラウザは `type=number` として扱われます。

これにより、数値しか期待されていない入力項目で `type=text` を使うメリットは何一つ無い、と言えます。
（既存システムを書き換えると セレクタの関係で問題が発生しそうですが）。


## 有用性3（変なクラスを当てる必要がない）

`type=number` は数値の入力を想定しています。
そしての数値の入力は右寄せになっていて欲しいです（個人的には、ですが）。

`type=text` の場合は下記のような html を記述する必要があります（style タグは css ファイルに書かれていると思ってください）。

```html
<style>
	input.tr {text-align: right;}
</style>

<input type="text" class="tr" /><br />
```

text フィールドに class で「右寄せにしてね」と指示しています。
これはこれで有りだと思いますが、「数値は一律右寄せ」という仕様であれば

```css
	input[type=number] {text-align: right;}
```

と書いたほうが class の当て忘れもなくスマートです。

また、ホイールで値の上限したい場合なども同様です。
それ用の class の当てるのではなく、 `input[type=number]` で全て解決します。

## 有用性4（専用の各種メソッドが使える）

`type=number` として記述した input 要素は

- stepUp
- stepDown

というメソッドを呼ぶことが出来ます。
これは `min`, `max`, `step` 属性から、適切な値になるように値の増減をしてくれるメソッドです。

このメソッドを駆使するとプラグインの製作がとても捗ります。

ちょっと試してみると分かりますが、`min`, `max`, `step` 属性には小数も使えるため、自前で `stepXX` 系のメソッドを作ろうとすると結構苦労します。

[こちら](http://qiita.com/akase244/items/bfb7d40d6b5ecbdabb57)の記事でも触れていますが、特別なことをしない限り、`min + step * N` でバリデーションが走るので、よしなに実装すると「入力値が不正です」とかで怒られたりします。

個人的なプラグインで「スピンボタンを一定時間押し続けると増減値が10倍、100倍になる」「マウスホイールのグリグリで値が増減できる」という物を作りましたが、上記のメソッドがないと結構めんどくさかったと思います。
opacity は透明度じゃない

CSS のプロパティー `opacity` を「透明度」と書いてあるものをよく見ますが（最近は減ったけど），正しくは「不透明度」ですね。

「透明にするには opacity（プロパティー）を使う」という意図が「opacity は透明度」という誤った連想を生んじゃうのかな。それで，解説記事はなぜかサンプルが

```css
opacity: 0.5
```

だったりするので，0 が完全透過，1 が完全不透明ということに気づきにくいわけです。

関連する英単語として，opaque [oupéik] があり，形容詞では「不透明な」，名詞では「不透明液」などの意味を持ちます。日本語では「オペーク」。
CircleCIでC++のコードをテストする

CircleCIでは言語サポートのところにC++の情報がないのですが、[Test environment - CircleCI](https://circleci.com/docs/environment) を見ると`g++`や`make`が入っているので、普通にC++のテストもコンパイルして実行することができます。

今回は、[GoogleTestでC++のコードをテストする - Qiita](http://qiita.com/tjun/items/8047bf50930e6de36bdc)
で書いたテストをサンプルとして使ってみました。

コードは https://github.com/tjun/googletest-circleci にあります。

`circle.yml`は以下のように書けます、cmakeも入っているみたいでapt-getしなくても使えました。

```yaml
dependencies:
  pre:
    - cd extsrc/gtest-1.7.0/; mkdir build; cd build; cmake ..; make
  override:
    - cd make; make; make test
test:
  override:
    - cd bin; ./gtest_myint
```

今回はわざと失敗するテストを入れていましたが、ちゃんとCircleCI上でも失敗して検知されています。
https://circleci.com/gh/tjun/googletest-circleci


gccが入っているのでもちろんC言語も同様にできます。
以上です。
Safariでborder-radiusとtransitionが組み合わさるとおかしくなる

画像を楕円で表示し、マウスオーバーしたら拡大(ズーム)させたかった。

```html
<div class="thumbnail">
    <img src="sample.jpg">
</div>
```

```css
.thumbnail {
position: relative;
  width: 250px;
  height: 250px;
  border: 2px solid #ccc;
  border-radius: 125px / 125px;
  overflow: hidden;
  z-index: 1;
}

.thumbnail img {
  -webkit-transition: -webkit-transform 0.3s linear;
  -moz-transition: -moz-transform 0.3s linear;
  -o-transition: -o-transform 0.3s linear;
  -ms-transition: -ms-transform 0.3s linear;
  transition: transform 0.3s linear;
  z-index: -1;
}
.thumbnail:hover {
  border: 2px dotted #ccc;
}
.thumbnail:hover img{
  -webkit-transform: scale(1.1);
  -moz-transform: scale(1.1);
  -o-transform: scale(1.1);
  -ms-transform: scale(1.1);
  transform: scale(1.1);
}
```


Chromeなどでは、理想どうりに動いたが、Safariでは、一瞬四角い画像が表示されてからズームする。
border-radius,transitionいずれをなくすと四角い画像が表示されることはない。(表示されているのかもしれないが、人間の目には見えない…)
意外と知らない Gitのリモートレポジトリをきちんと軽くする方法


Gitのリモートレポジトリが肥大化してしまう時ありますよね。

ローカルでファイルを削除してgit pushしたものの、
あれ？あんまり速度変わっていない...?

そう、実はこの方法ではリモートリポジトリの重さは変わりません。

>解決策 : 新しくリモートリポジトリを作成しそこにgit push。

ひとまずこれで解消しました。

他に良い方法がある方は教えていただけると嬉しいです。
Git初心者に役立つ「よく使うコマンド集」③

[Git初心者に役立つ「よく使うコマンド集」](http://qiita.com/chihiro/items/fc94e5de02fd37328040)
[Git初心者に役立つ「よく使うコマンド集」②](http://qiita.com/chihiro/items/b69f1051b7bca6361e01)
の続きです。

## Gitにプロキシ設定(認証必要)
>git　config　--global　http.proxy　http://\<username>:\<password>@\<serverhost>:\<serverport>

## ユーザー名を登録する
>git　config　--global　user.name　\<username>

## メールアドレスを登録する
>git　config　--global　user.email　\<mailaddress>

## リモートリポジトリの名前を変更する
>git　remote　rename　\<oldname>　\<newname>

## addを取り消す(コミット前)
>git　reset　HEAD　--　\<filename>

## addを取り消す(コミット後)
>git　rm　--cached　\<filename>
このあとcommitが必要。
git管理から外れるだけであって、物理的に削除するわけではない。(--cachedを忘れずに！)
Django 初期設定 Intellij Debug まで


## 環境

* mac
* mysql インストール済み
* python 2.7
* virtualenv
* django 1.7
* intellij 12
	* Python, Django Plugin インストール済み

## 初期設定

```sh
# リポジトリ作成
mkdir python-django-mvt
cd python-django-mvt
# virtualenv 作成
virtualenv env
source env/bin/activate
vi requirements.txt
```

```vi
Django==1.7.1
django-debug-toolbar==1.2.2
MySQL-python==1.2.5
```

```sh
# 必要モジュールインストール
pip install -r requirements.txt
# 確認
pip freeze
```

## Django Project 作成 (MySQL 利用)

```sh
# プロジェクト作成
django-admin.py startproject cmsproject
cd cmsproject
vi cmsproject/settings.py
```

```vi
# DATABASE 設定を mysql に、タイムゾーンと言語を日本に変更
DATABASES = {
     'default': {
         'ENGINE': 'django.db.backends.mysql',
         'NAME': 'cms',
         'USER':'user',
         'PASSWORD':'password',
         'HOST':'127.0.0.1',
     }
 }

# Internationalization
# https://docs.djangoproject.com/en/1.6/topics/i18n/

LANGUAGE_CODE = 'ja'

TIME_ZONE = 'Asia/Tokyo'
```

```sh
# DB 初期化
python manage.py migrate
# Admin のユーザ作成
python manage.py createsuperuser
# サーバ起動
python manage.py runserver
# 管理画面アクセス
http://127.0.0.1:8000/admin
```

## Django App 作成

```sh
python manage.py startapp cms
```

## Intellij 設定
ここで Intellij にプロジェクトをインポート

* import project 
* cmsproject
* SDK ＋ Python SDK に env の環境を指定
* project structure の Modules の　Django で Settings と Manager script を指定（一度削除し作りなおさないとだめな場合あり）
* Debug 実行
* サーバが起動する


## Model 追加

```sh
vi cms/models.py
```

```models.py
from django.db import models

# Create your models here.
class Entry(models.Model):
    title = models.CharField('title', max_length=255)
    contents = models.TextField('contents')

    def __str__(self):
        return "<Entry('%s', '%s', '%s')>" % (self.id, self.title, self.contents)
```

## Migration

```sh
# installed app に cms 追加
vi cmsproject/settings.py
```

```vi
INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'cms',
)
```

```sh
# migrate file 作成
python manage.py makemigrations cms
# 確認
python manage.py sqlmigrate cms 0001
# 実行
python manage.py migrate
```

## テーブルが既にある場合

```
python manage.py inspectdb
```

## Github

* https://github.com/taisa007/python-django-mvt

## 参考

* http://qiita.com/massa142/items/eca71d1a73ac1904b1ee
* http://qiita.com/juniskw/items/2eaa3212ea4ed6ef6915
* http://qiita.com/kaki_k/items/7b178ad39394a031b50d
tmux上でsublime Text 3のコマンドを使いファイルが開けない件について

tmux で build 3068 以降の sublime Text 3を subl コマンドでファイル、フォルダを指定しても開かない問題について

##環境
* Mac OS X Yosemite
* Sublime Text 3 build 3083
* tmux 1.9a

##問題
subl file_name や subl . などを打っても、ファイルやフォルダが開かなかった。しかし、sublでsublime開いた後にドラッグ＆ドロップでファイル、フォルダを開くことはできる。

##解決策
根本的な解決策ではなくて一時的な回避策として、 reattach-to-user-namespaceを使ったやり方がある（根本的な解決策はそのうちでることを期待)。


1 reattach-to-user-namespaceをインストール

```
brew install reattach-to-user-namespace
```

2 .aliases等に以下を記載。

```bash
alias subl='reattach-to-user-namespace subl'
```

これでtmux上でsubl <ファイル名>でファイルを開くことができる。

##参考

https://github.com/SublimeTextIssues/Core/issues/675#issuecomment-73426588

http://superuser.com/questions/834525/unable-to-launch-application-in-tmux
Formの閉じるボタンの無効化

#概要
閉じるボタンを無効化する必要があったので、とりあえずメモ

```lang:From.vb
Protected Overrides ReadOnly Property CreateParams() As System.Windows.Forms.CreateParams

Get
　Const CS_NOCLOSE As Integer = &H200
　Dim cp As CreateParams = MyBase.CreateParams
　cp.ClassStyle = cp.ClassStyle Or CS_NOCLOSE
　Return cp
End Get

End Property 
```
【CakePHP】CakeEmailでメールの送信

CakePHPでは、CakeEmailというメール送信クラスが用意されている。

## 送信のための設定を行う
app/Config/email.php

送信時に設定することもできるが、SMTPサーバなど動的に設定する必要がないものはここへまとめる。

```
class EmailConfig{
  public $default = array(
    /*
    *  Smtp:SMTPサーバを使う場合
    *  Mail:PHPのmail関数を使う場合
    */
    'transport' => 'Smtp',
    'host' => 'localhost',
    'port' => 25,
  );
}
```

## CakeEmailクラス読み込み
忘れやすいので。

```php
App::uses('CakeEmail', 'Network/Email');
```

##  送信設定と送信処理

```php
//読み込む設定ファイルの変数名を指定
$email = new CakeEmail('default');
$email->from('foo@example.com');
$email->to('bar@example.com');
$email->subject('メールタイトル');

//メール送信する
$email->send('メール本文');
```

##  テンプレートを使ったメール送信

```php
//読み込む設定ファイルの変数名を指定
$email = new CakeEmail('default ');
$email->from('foo@example.com');
$email->to('bar@example.com');

//HTMLorテキストメール
$email->emailFormat('text');
//テンプレート
$email->template('alert_mail');
//テンプレートへ渡す変数。[変数名=>値]
$email->viewVars([
  'name'=>'鈴木'
]);

$email->subject('メールタイトル');
$email->send();
```

###テンプレートの場所
テキストメール：app/View/Emails/text配下
htmlメールapp/View/Emails/html配下

##添付ファイルの設定
###添付ファイルと実ファイルが同じ場合
```php
$email->attachments('/path/to/photo.jpg');
```

###添付ファイルと実ファイルが異なる場合
```php
$email->attachments([
  'photo.jpg'=>[
    'file'=>'/path/to/file.jpg',
    'minetype'=>'image/jpeg'
]);
```

##宛先toの設定
####送信先のみ
```php
$email->to([
  'suzuki@exmaple.com',
  'sato@exmaple.com'
])
```

####表示名
送信先=>表示名

```php
$email->to([
  'suzuki@exmaple.com'=>'鈴木',
  'sato@exmaple.com'=>'佐藤',
)
```
OCaml の toploop にディレクティブを追加する

次のようなことを `$HOME/.ocamlinit` に書く

```ocaml
#use "topfind" ;;

let () =
  Hashtbl.add
    Toploop.directive_table "pwd"
    (Toploop.Directive_none
       (fun () -> print_endline (Sys.getcwd ())));
  Hashtbl.add
    Toploop.directive_table "ls"
    (Toploop.Directive_none
       (fun () ->
          Sys.readdir (Sys.getcwd ())
          |> Array.iter print_endline))
```
ggplot2 に依存しているパッケージ一覧を rvest で取得する #rstatsj

こういう話がある。

<blockquote class="twitter-tweet" lang="ja"><p><a href="https://twitter.com/kazutan">@kazutan</a> たぶんこのreverse depends、reverse importsをシラミつぶしに見れば...（しろめ <a href="http://t.co/2nDcktmBO1">http://t.co/2nDcktmBO1</a></p>&mdash; Hiroaki Yutani (@yutannihilation) <a href="https://twitter.com/yutannihilation/status/588494384619917312">2015, 4月 16</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

このページ、スクレイピングすればリストぐらいは簡単に作れるのではないだろうか。

というわけで

```r:R
library(rvest)

pkg_name <- "ggplot2"
url <- sprintf("http://cran.r-project.org/web/packages/%s/index.html", pkg_name)
html <- html(url)

depends <- html %>%
  html_nodes(xpath = '/html/body/table[3]/tr[1]/td[2]/a') %>%
  html_text
imports <- html %>%
  html_nodes(xpath = '/html/body/table[3]/tr[2]/td[2]/a') %>%
  html_text

targets <- c(depends, imports)

library(lambdaR)

result <- targets %>% Map_(pkg_name: {
  cat(pkg_name, "\n")
  url <- sprintf("http://cran.r-project.org/web/packages/%s/index.html", pkg_name)
  Sys.sleep(1)
  html <- html(url)
  
  title <- html %>%
    html_nodes(xpath = '/html/body/h2') %>%
    html_text
  desc <- html %>%
    html_nodes(xpath = '/html/body/p') %>%
    html_text
  
  data.frame(name=pkg_name, title, desc)
}) %>% Reduce_(rbind)

write.csv(result, "ggplot2_extend.csv", row.names=FALSE)
```

結果はこちら

- [ggplot2_extend](https://dl.dropboxusercontent.com/u/432512/20150416_ggplot2/ggplot2_extend.csv)

Enjoy!

## 続き

- [ggplot2 拡張パッケージ一覧](http://qiita.com/hoxo_m/items/8cfe085d8ab00261bddd)

## 関連

- [rvest すげえ。](http://qiita.com/hoxo_m/items/264b45684fcb657cf285)
- [rvest で声優の男女データをスクレイピング](http://qiita.com/hoxo_m/items/b9002b7b05954e882148)
- [rvest でログインしてスクレイピング](http://qiita.com/hoxo_m/items/59bedbf7e4c7c99cbf5a)
Doctrine NativeQuery 使い方メモ

Doctrineで、データベースのバージョンなど、エンティティが不要なSQLを実行したいとき。

# 例：データベースのバージョンを取得する
```sql
select version();
```

のようなSQLの場合、以下のようなコードで実行できる

```php
$rsm = new \Doctrine\ORM\Query\ResultSetMapping();
$rsm->addScalarResult('version', 'v');

$version = $app['orm.em']->createNativeQuery('select version()', $rsm)
                         ->getSingleScalarResult();
var_dump($version);
// PostgreSQL 8.4.20 on i386-redhat-lin....
```

参考
http://doctrine-orm.readthedocs.org/en/latest/reference/native-sql.html
Vagrant上で対話形式のものをinstallする

## 経緯
Vagrantでpeclからインストールするplaybookを書こうと思ったが、対話形式でinstallが行われる箇所があったため、どうしよう...と思った結果、スクリプトを用意して、playbookでスクリプトを/tmpあたりにcopyして実行させました。
その時のメモです。初めてのplaybook!!
(スマートなやり方があれば教えていただきたいです...)

## 目的
apcのインストールをansibleのtaskとして行うこと

## やったこと
対話形式のファイルを用意

```zsh:install_apc.sh
#!/bin/sh

expect -c "
spawn pecl install apc
expect \"Enable internal debugging in APC \[no\] :\"
send \"no\n\"
expect \"Enable per request file info about files used from the APC cache \[no\] :\"
send \"no\n\"
expect \"Enable spin locks (EXPERIMENTAL) \[no\] :\"
send \"no\n\"
expect \"Enable memory protection (EXPERIMENTAL) \[no\] :\"
send \"no\n\"
expect \"Enable pthread mutexes (default) \[no\] :\"
send \"yes\n\"
expect \"Enable pthread read/write locks (EXPERIMENTAL) \[yes\] :\"
send \"no\n\"
interact
"
exit
```
apcインストールする前に色々入れておかなきゃいけないもの含めて
taskを用意

```yaml:main.yaml
- name: install php-pear
  yum: name=php-pear state=installed
- name: install phpize
  yum: name=php-devel state=installed
- name: install apxs
  yum: name=httpd-devel state=installed
- name: install pcre-devel
  yum: name=pcre-devel state=installed
- name: install expect
  yum: name=expect state=installed
- name: copy install apc script
  copy: src=install_apc.sh dest=/tmp owner=root group=root mode=0755
- name : install apc
  sudo: yes
  command: sh /tmp/install_apc.sh
- name: copy apc.ini
  copy: src=apc.ini dest=/etc/php.d/ owner=root group=root mode=0755
- name: mkdir webroot/admin
  shell: mkdir /path/to/webroot
- name: cp apc.php
  shell: cp /usr/share/pear/apc.php /path/to/webroot/
```

コレで何とか勝手に入ってくれたようです。
yumとかみたいにpeclも勝手に入るコマンドがないかなーとおもって未だ試行錯誤しております。
SlackにPagerDutyのAPIを利用して今日のDevOpsManを通知させる

# PagerDutyのAPIを叩いてSlackへ今日のDevOpsManをお知らせする

`全員でデブオップス！`を合言葉にしているので、今日のデブオップスマンが存在する。
今日のデブオップスマンはPagerDutyでスケジュール指定しているので、APIを叩いて
今日のデブオップスマンが誰かをSlackで通知する。

### 例: 10:30 ~ 10:30 の間で担当が変わる場合

```rb
#!/usr/bin/env ruby

require 'time'

t = Time.now

since_date = Time.new(t.year, t.month, t.day, 10, 31)
until_date = Time.new(t.year, t.month, (t.day + 1), 10, 29)

# PagerDutyのAPIを叩いて担当の人を見つける
member = `curl -s -H "Content-type: application/json" \
                  -H "Authorization: Token token=TOKEN" \
                  -X GET -G \
                  --data-urlencode "since=#{since_date}" \
                  --data-urlencode "until=#{until_date}" \
                  "https://classi.pagerduty.com/api/v1/schedules/SCHEDULE_ID/entries" \
                  | jq '.entries[].user.name' -r
         `.chomp

# DevOpsManに伝える
`curl -s https://slack.com/api/chat.postMessage -X POST \
  -d 'channel=#CHANNEL' \
  -d 'text=本日のDevOpsManは \`#{member} \`さんです。よろしくお願いいたします :bow:' \
  -d 'username=USERNAME' \
  -d 'icon_emoji=:ICON:' \
  -d 'token=xoxp-0000000000-0000000000-00000000000000000'`
```

こんな感じで雑にcronで通知させるようにした。
floatに大きな数字を入れてはいけない

float型のカラムに数字を入れてたら、大きな数字を入れると、丸めた覚えないのに下の方の桁が0になってて、丸まってるぽい。
123456789 とかが 123456000 になってます。がーん。

どうやら、float型は6桁までしか表示しないとか…。
気にしないといけないのは小数点以下の桁数だけかと思ったら、大きい数字もなのね…。
それは困るので、varcharにしました。

ALTER TABLEでvarcharに変えたら、入れ直してないのに元々入れた丸まってない数字がちゃんと出るようになったんだけど、データ的には保持されてたということなのだろうか…。謎。

MySQL上で計算とかしないなら、数値もvarcharにしといた方がいいのかもしれない。
CentOS 6&7/Fedora 20にOpenJDK 8環境を構築

[こちら](http://qiita.com/ytkumasan/items/0a6b9e512e3dd5c08a31)でUbuntu 14.xxバージョンを書きましたが、CentOS 6&7/Fedora20も需要があると見て書きます。

> ただし当方Fedoraは使用していないので、同様の方法で可能と思われますが、可能性は保証しません。これを読んでFedoraで試される方は、そのことを承知のうえで行ってください。

http://www.2daygeek.com/openjdk-8-installation-centos-fedora/

にあるとおりにいくので、Fedora 20とCentOS 6.x系を想定しますが、CentOS 7系も同一の方法で可能でした。

# インストールの前に
まず古いJDKがインストールされていないか確認します。

```
$ java -version
bash: java: command not found
$
```

といった具合にコマンドが見つからなければOKです。
（あった場合はアンインストール、またはUbuntu同様にalternative切り替え→不要なバージョンはアンインストールとなるはずです）

# インストール
```
$ yum search java | grep 1.8.0-openjdk
```
して物があるか確認してから、

```
# yum install java-1.8.0-openjdk
```

するとインストールされます。あとは、

```
$ java -version
```

して、1.8.0_xx（2015/4/16現在は1.8.0_45）とバージョン表示されればOKです。
Xcodeインストール

自宅macでは何も気にせずインストールできたxcode。
会社macでちょっと引っかかったのでメモ。

**＜注意：20150421追記＞**
よくわからないままダウンロードしてきましたが、私のダウンロードしたものはBata版です。
Bata版は、次の世代のものなので開発途中であり、これで作った中身を公開してはいけないとAppleの規約で決まっているそうです。
インストールまでは表に出されているので問題はないそうですが、
iOSのアプリ開発、アプリ配信を行うには「iOS Developer Program」に登録をして年間参加費（2015年4月現在　11800円）を払うなどの手続きが必要です。
[iOS Developer Program](https://developer.apple.com/jp/support/ios/enrollment.php)
細かいことは上記URLを参照してください。

また、エミュレータで勉強するまでならば、無料でAppleStoreからダウンロードできるようです。


<h1>Xcodeダウンロード（Bata版）</h1>
ダウンロードするURLは以下から
https://developer.apple.com/xcode/downloads/

![スクリーンショット 2015-04-16 16.01.38.png](https://qiita-image-store.s3.amazonaws.com/0/39911/6184d41c-ec22-aa5b-3cbd-32abd0866bb0.png)

選択したらIDを聞かれるブラウザ上ににダイアログボックスが出現！
![スクリーンショット 2015-04-16 16.12.46.png](https://qiita-image-store.s3.amazonaws.com/0/39911/b2633a0a-2832-3834-0ea0-449c0bb4e00e.png)

自宅macで以下のような警告ダイアログが立ち上がってきたので、いわれるままにXcodeインストールをしました。
![ダイアログ.png](https://qiita-image-store.s3.amazonaws.com/0/39911/eae97b28-6990-43d6-a9a8-2d4d8d4cdc38.png)
ダウンロード用にIDは聞かれたような気がします。

>Xcode_6.4_beta.dmg

がダウンロードできました。

<h1>Xcodeインストール</h1>
Xcode_6.4_beta.dmg　をダブルクリックして実行すると
![スクリーンショット 2015-04-16 16.29.06.png](https://qiita-image-store.s3.amazonaws.com/0/39911/76ae4529-1c05-e486-430b-ef0b5f1cc8d0.png)
こんな画面がでるので、Xcode-bata.appを掴んでApplicationsにドラックしてあげます。

ドラックがすむと、
LaunchpadやApplicationsの中にXcode-beta.app　がいます。
そこから起動してください。

起動すると同意書が立ち上がってきます。
Agreeを選択すると、PCのIDパスワードを聞かれるます。
この動作がひと通り終わるとインストール完了のようです。
![agree.png](https://qiita-image-store.s3.amazonaws.com/0/39911/f896e470-df02-0517-d495-ebab85925e31.png)

Xcode無事にインストールできたようです。
![スクリーンショット 2015-04-16 17.27.32.png](https://qiita-image-store.s3.amazonaws.com/0/39911/adc6bdef-34d2-c0ed-b1a0-74870a423609.png)
スマホのパケットをキャプチャする

# 目的
スマホのサイトやアプリを開発しているとスマホの通信内容を見たい時があるので、
ツールをセットアップしてみました。

# 環境
+ PC (OS:Windows Vista)
+ スマホ (OS:Android 4.4.2)
+ ルーター (市販の無線LANタイプ)

※下記のようにスマホとルーターの間にPCを割り込ませて、パケットをキャプチャします。

![env.jpg](https://qiita-image-store.s3.amazonaws.com/0/26770/6d7f8f87-c104-0c98-71dd-6301e2693d06.jpeg)

# wireshark設定
+ PCにwiresharkをインストール。
(OS、CPUアーキテクチャ(32bit or 64bit)にあったものを選択)
    [wiresharkダウンロード](http://www.forest.impress.co.jp/library/software/wireshark/)

+ インストール後、起動したら普段使っているNICを選択し(①)
[Start]ボタンをクリック。(②)
![wireshark_start.jpg](https://qiita-image-store.s3.amazonaws.com/0/26770/377c00bb-9b68-78e9-2f21-9cd5b2406057.jpeg)

+ 下記のエラーが表示されました。
    ```The capture session could not be initiated (failed to set hardware filter to promiscuous mode).```

+ [Capture Options]をクリック(③)し、"Capture"欄でNICを選択した上で
"Use promiscuos mode on all interfaces"のチェックボックスを外します。

+ これでキャプチャが開始されました。
(NICがプロミスキャスモード非対応の場合、このようにオプションを外す必要あり)

# Cain&Abel設定
+ このままだとPC宛てのパケットしかキャプチャできないので、Cain&Abel (以下Cain)を
使ってARPキャッシュポイゾニングを行います。
(一旦、wiresharkの赤いボタンでキャプチャを停止)

+ 下記サイトの左にある青色の"DOWNLOAD FROM SOFTPEDIA"ボタンからダウンロード。
    [Cainダウンロード](http://www.softpedia.com/get/Security/Decrypting-Decoding/Cain-and-Abel.shtml)

+ インストール後、Chainを起動したら[Sniffer]ボタンをクリックし(A-1)、[Sniffer]タブに切り
替えます。(A-2)
![cain_start.jpg](https://qiita-image-store.s3.amazonaws.com/0/26770/39e9b9d9-be59-8d4c-c2a3-9bc789969bb4.jpeg)

+ スマホをWi-Fiに切り替えルーターに接続。

+ [Add to List]ボタンをクリックし(A-3)、[MAC Address Scanner]ダイアログが開いたら
[All Tests]にチェックを入れて[OK]をクリック。
![mac_address_scanner.jpg](https://qiita-image-store.s3.amazonaws.com/0/26770/a6b336ff-e034-427e-b572-863460b62206.jpeg)

+ [ARP]タブに切り替え(B-1)、上のペインをクリック後(B-2)、[+]ボタンをクリック。(B-3)
![arp_tab.jpg](https://qiita-image-store.s3.amazonaws.com/0/26770/91d9fa3a-607d-0d31-8270-4344ccdd4e79.jpeg)

+ 左ペインでスマホのIPを選択し(C-1)、それ以外の端末が右ペインに表示されるので、ルーター
のIPを選択(C-2)。[OK]ボタンをクリック。
![arp_setting_1.jpg](https://qiita-image-store.s3.amazonaws.com/0/26770/8b0bcdf7-8554-6c1f-7977-8def93f7ccec.jpeg)

+ 上記で作成した設定を選択して(D-1)、[Start/Stop ARP]ボタンをクリック。(D-2)
これでスマホとルーターの間にPCが入った状態になります。
![arp_setting2.jpg](https://qiita-image-store.s3.amazonaws.com/0/26770/5060ade0-da05-ed40-aa99-d2df7d781b21.jpeg)


+ PCでwiresharkを起動し、"Filter"にターゲットとなるWebサイトのIPを入力して[Apply]ボタンを
クリックして待ち受けます。
    ```ip.addr==210.168.89.44 and http```

+ スマホからターゲットサイトにアクセスすると、PCのwiresharkでパケットがキャプチャできます。
![capture.jpg](https://qiita-image-store.s3.amazonaws.com/0/26770/2c34e3ef-da5f-7eb3-2f83-39a0ddadfb75.jpeg)

# 参考にしたページ
+ https://ask.wireshark.org/questions/2647/failed-to-set-hardware-filter-to-promiscuous-mode-error-when-capture-attempted-on-a-wireless-adapter-on-windows
Karabinerの設定移行


キーバインドやキーリピートなどにKarabinerを使っています。

こないだ、普段使っているのとは別のMacを設定したときにKarabinerの設定を移行したので、そのときの手順をメモしておきます。

Karabiner.appをexportオプションで起動して、どこかのファイルにリダイレクトします。

```sh
$ /Applications/Karabiner.app/Contents/Library/bin/karabiner export > ~/Desktop/karabiner-import.sh
```

ここでは、デスクトップに`karabiner-import.sh`に出力します。

出力したシェルスクリプトを移行したい別のMacにコピーして、ターミナルでスクリプトを実行します。

```sh
$ sh ~/Desktop/karabiner-import.sh
```
複数行コメントアウトするときのTips

##複数行コメントアウトするときのTips

複数行のコメントをするとき、こうすると便利。
``` /**
hogehoge
// **/
```

複数行コメントの閉じタグの前に「// 一行コメントアウト」を入れるだけ。

こうすることで、
``` // /**
hogehoge
// **/
```
とするだけでhogehogeのコメントアウトが解除されます。
基本的なBtrfsの使い方

非常に低コストにスナップショットが取れるbtrfs。
time machine的な使い方をするのに最適です。

## 情報源
- [Btrfs.wiki](https://btrfs.wiki.kernel.org/index.php/Main_Page)
- [Archlinux wiki (Japanese)](https://archlinuxjp.kusakata.com/wiki/Btrfs)

以下では`/disk`にbtrfsにフォーマットしたディスクをマウントしてあるとする。

## subvolumeの作成
btrfsはsnapshotをsubvolume単位で取るので、なるべく分ける方がいい。

```command
btrfs subvolume create /disk/subvolume_name
```

## snapshotの作成

```command
mkdir -p /disk/backup
```

こちらは普通のディレクトリにします。

```command
btrfs subvolume snapshot /disk/subvolume_name /disk/backup/subvolume_name-$(date +%Y%m%d)
```

バックアップの名前、ディレクトリ階層等は自由に変更してください。
snapshotもsubvolumeである事に注意しましょう。

## subvolume毎のディスク使用量(quota)

```command
btrfs quota enable /disk
```

でまず有効化しておきます。

```command
btrfs qgroup show /disk
```

でsubvolumeがどれだけデータを使用しているかが表示されます。

```output
qgroupid         rfer         excl
--------         ----         ----
0/5          16.00KiB     16.00KiB
0/257       239.61GiB     17.99GiB
0/258       416.56GiB    416.56GiB
```

のように表示されれば正常に動作しています。
`0/5`などはsubvolumeの番号です。

- rfer : このsubvolumeが参照しているデータの容量の合計
- excl : このsubvolumeだけから参照されているデータの容量の合計

を表します。

- [BTRFS: How big are my snapshots?](http://dustymabe.com/2013/09/22/btrfs-how-big-are-my-snapshots/)
- [Btrfs: Subvolumes and snapshots (LWN)](https://lwn.net/Articles/579009/)
Vagrantにbridge接続でGATEWAYを設定する方法

いくらかハマってしまったのでメモ。
結論から言うと、VagrantではGATEWAYやNETWORKを設定する機能はない（[ここ](https://github.com/mitchellh/vagrant/issues/2832)と[ここ](https://github.com/mitchellh/vagrant/issues/2389)のIssueを参考）

というわけで、プロヴィジョニングでなんとかする。

```ruby:Vagrantfile
...

config.vm.network "public_network", ip: '192.168.10.30' # アドレスは環境に合わせて変更してください

config.vm.provision "shell", inline: <<-SHELL
  route del default
  route add default gw 192.168.3.1 eth1 # アドレスは（略
SHELL

...
```

`vagrant up --provision`で起動、`vagrant reload --provision`で再起動、`vagrant provision`でプロヴィジョニングだけ行う。
ShinobiLayer: slcliコマンドでDeperecationWarningが出るときの対処方法

------------------------------------
※2015/11/27更新
遅レスですが、最新版のslcliコマンドでは直っているので、この記事の恩恵を受ける人はあまりないでしょう。
今後は、`client = SoftLayer.Client()`のように書くのではなく、`client = SoftLayer.SoftLayer.create_client_from_env()`のように書きましょう。

------------------------------------
2015/04/16現在、github上の最新の[softlayer-python](https://github.com/softlayer/softlayer-python)は4.0.0ベースになっており、メジャーバージョンアップがされています。このバージョンアップに伴い、**slコマンドはslcliコマンドに変更されました。**しかし、最新のslcliコマンドを実行すると、以下のような警告が出てしまいます。



```
# slcli vs list
/usr/lib/python2.6/site-packages/SoftLayer/API.py:113: DeprecationWarning: use SoftLayer.create_client_from_env() instead
  DeprecationWarning)
（以下略）
```

これは、API.pyにて以下のように書かれているからです。

```py:API.py（修正前。107行目あたり）
def Client(**kwargs):
    """Get a SoftLayer API Client using environmental settings.

    Deprecated in favor of create_client_from_env()
    """
    warnings.warn("use SoftLayer.create_client_from_env() instead",
                  DeprecationWarning)
    return create_client_from_env(**kwargs)

```

`SoftLayer.create_client_from_env()`を使うべきなのは分かりますが、これはslcliコマンドの実装で色々な箇所で使われているため、今後の修正を待ちたいところです。
取り急ぎこのエラーを消したい場合は、この警告文も含めてコメントしてしまいましょう。

```py:API.py（修正後。107行目あたり）
def Client(**kwargs):
    """Get a SoftLayer API Client using environmental settings.

    Deprecated in favor of create_client_from_env()
    warnings.warn("use SoftLayer.create_client_from_env() instead",
                  DeprecationWarning)
    """
    return create_client_from_env(**kwargs)

```
Xcode 6.3で@IBDesignableを使うと死ぬ

# 事象

Storyboardを開いた上で他のファイルを開く or Xcodeを終了させようとするとXcodeがフリーズする問題に遭遇した。Xcode強制終了→再起動後は直前のウィンドウが再現され、もちろんStoryboardが開かれているため、なかなか面倒なことに。

# 解決策

`@IBDesignable`を使わない。

https://devforums.apple.com/message/1125061#1125061
`@IBDesignable`とカスタムフォントを併用するとフリーズするバグがある模様。ただし、手元では`@IBDesignable`指定されたカスタムクラスからフォント指定要素を削除してもフリーズは解消されなかった。

Storyboardはアプリの画面の見た目と画面同士のつながりを人に見せるためにも有用だったのだが、バグが直るまでは`@IBDesignable`を封印して心の眼で見ることを強いられるようだ。
SeleniumWebdriverで使用するブラウザの言語を設定する

# はじめに
* こんなときに使ったら問題が解決するかもしれません
 * 「Seleniumのテスト中に動画やスクショをとったけど日本語が文字化けして見えない！」
 * 「あ、日本語フォントがはいってないからだな...でもフォントをいれたりはしたくない」
 * 「ブラウザの言語を英語に設定してやればいいな！で、どうやるんだっけ？？」
* SeleniumWebdriverでの設定とCapybaraでの設定を紹介します

# SeleniumWebdriverをお使いの方の設定

```rb
require 'rubygems'
require 'selenium-webdriver'
 
profile = Selenium::WebDriver::Firefox::Profile.new
profile['intl.accept_languages'] = "ja" # 英語に指定する場合は"en-US, en"
profile['general.useragent.locale'] = "ja-JP" # 英語に指定する場合は"en-US"

Selenium::WebDriver.for :firefox, :profile => profile
```

# Capybaraをお使いの方の設定

```rb
  Capybara.register_driver :selenium do |app|
    opts = { browser: :firefox }
    opts[:profile]['intl.accept_languages'] = "ja" # 英語に指定する場合は"en-US, en"
    opts[:profile]['general.useragent.locale'] = "ja-JP" # 英語に指定する場合は"en-US"

    Capybara::Selenium::Driver.new app, opts
  end
```

# ～ただの宣伝～
* [全国のSeleniumer必読](http://qiita.com/oh_rusty_nail/items/b8ba525d31ea7c522856)
* Selenium, SauceLabs, Travis, Jenkinsに関するノウハウ書いているのでよかったら参考にしてみてください
Visual Studio 2010にインストールしている拡張機能

一からセットアップするときに、参考に

# AnkhSVN - Subversion Support
Subversionでバージョン管理しているプロジェクトなら定番
# Productive Power Tools
Visual Studio Professional以上で使用可能
開発効率が少し上がる
#VSCommand for Visual Studio 2010
開発効率が少し上がる
#Quick Open File For Visual Studio 2010
個人的に一番使用する頻度が高い拡張機能
あいまい検索でクラスを検索できるので、おぼろげな記憶からでも探せる
#RockMargin
ソースファイルの大体どこらへんにいるのかを教えてくれる
#Visual Studio Color Theme Editor
VSのテーマを変更できる
形から入りたい人に特におすすめ
#VS10x CodeMAP
どんなプロパティ、メソッドが実装されているかを可視化してくれる
そのクラスの責務をなんとなく掴むときにみる感じ
#Xaml Styler
VSでXamlを編集する際に、整形するときに使用
js-bson: Failed to load c++ bson extension, using pure JS versionの解決法

https://registry.hub.docker.com/_/node/
公式のnode Docker Imageを使って, node x express4 x mongodb なアプリケーションを作ってbuild & runしたらエラーが出ました。

```
$ docker run --rm -it  myimage  node-dev ./bin/www
[Error: /opt/app/node_modules/mongodb/node_modules/mongodb-core/node_modules/bson/node_modules/bson-ext/build/Release/bson.node: invalid ELF header]
js-bson: Failed to load c++ bson extension, using pure JS version
```

## 解決法

`npm install`した後に、

```
npm cache clean; rm -rf node_modules ;npm install
```

とすれば解決しました。
(なんでこれで直るのかはわかっていません。)


## 参考

バグ報告issue
https://github.com/mongodb/js-bson/issues/58
[Karma] html2jsとng-html2jsが競合した話


# 問題編
問題発生の状況はだいたいこんな感じです。
- AngularJS 1.3 で開発
- Karma でテスト
- ユニットテスト中で HTML を読み込む必要性

karma でユニットテストで HTML といえば [karma-html2js-preprocessor](https://github.com/karma-runner/karma-html2js-preprocessor)です。
これは karma の最新版では組み込まれているので、何も考えずに使えるはず。

とりあえずサンプルコードを書いてみます。```window.__html__``` の中身が出力されるはず。


```javascript:sample.spec.js
'use strict';

describe('Controller: sampleController', function () {
    var sampleCtrl, scope;
    beforeEach(module('sampleApp', function() {
        console.log(window.__html__);
    }));
    beforeEach(inject(function ($controller, $rootScope) {
        scope = $rootScope.$new();
        sampleCtrl = $controller('sampleController', {
            $scope: scope
        });
    }));
    it('should ...', function () {
		hogehoge();
    });
});
```

ログへの出力は次の通り。

```
undefined
```

使えませんでした。やれやれだぜ。


# 解決編
勘の良い皆様にはタイトル見た瞬間からおわかりかと思いますが、テストの都合で [karma-ng-html2js-preprocessor](https://github.com/karma-runner/karma-ng-html2js-preprocessor) を入れていたことが原因でした。 __パッケージを削除して終了。__

・・・というわけにも行かないのが辛いところで、テストで使うために ng-html2js を入れてるんだから、ng-html2js を削除したらテストが動かなくなるのがこの世の摂理っていうもんです。どうやらこの問題を解決するためにはもっと踏み込む必要がある。karma-ng-html2js-preprocessor の中身を見てみましょう。


```javascript:karma-ng-html2js-preprocessor/lib/index.js
// PUBLISH DI MODULE
module.exports = {
  'preprocessor:ng-html2js': ['factory', require('./html2js')],
  // TODO(vojta): remove this in 0.11
  'preprocessor:html2js': ['factory', require('./html2js')]
};

```

karma-ng-html2js-preprocessor が自分自身をプリプロセッサとして出力する際に、　ng-html2js と html2js 両方の名前で出力するため、本来の html2js を上書きしてしまっていたことが原因だったようです。```// TODO(vojta): remove this in 0.11``` とか書いてあるので、そのうち消えるのでしょう。 ~~気付いた時点で消してくれ。~~

現時点(2015/04/16)での暫定的な解決策は以下のどっちか。
- ```node_modules/karma-ng-html2js-preprocessor/lib/index.js``` から```'preprocessor:html2js': ['factory', require('./html2js')]```を消す
- ng-html2jsを使わないで頑張る

どっちでも動くようになりました。が、 node_modules の中身の変更なんて普通は同期しないですし、暫定的に ng-html2js を使わない方向で進めることにします（マジか）。
MySQLのユーザー権限設定(GRANT)

すぐ忘れるのでメモ。

サーバーlocalhostからパスワードpasswordでアクセスするユーザーusernameにデータベースdbnameへのすべての権限を与える。
```GRANT ALL PRIVILEGES ON dbname.* TO 'username'@'localhost' IDENTIFIED BY 'password';```
frontail: サーバ上のログファイルをWebブラウザでTailするnpm


はじめに
=========

「サーバサイドのログをブラウザでTailしたいんすよねー」って言われたので調べたらいいのがあったので共有します。

* frontail: https://github.com/mthenw/frontail
	* tail -F を ブラウザ上に出力する node.js アプリケーション

とても導入が簡単なので上記URLを見てもらえれば、特に説明は不要ですが、一応書いておきます。

frontail
===========
特徴
-------

* 検索ができる
* Basic認証をかけることができる(コマンドラインで指定できる）
* サーバ側のLogRotationに対応している
* auto-scrolling （ちゃんとログの最新が表示される）
* ログの行にMarkを付ける（色を反転させる）ことができる
* 未読の行が faviconで表示される
* 予め指定したキーワードでhighlightができる（今回この機能はちょっとうまくいきませんでした）

Install
--------

```
% npm install frontail -g
```

起動
---------

```
% frontail [option] [file1 file2 ...]

例：

% frontail --theme dark ~/log1 
```

とてもシンプルです。

表示
-------

frontailは、デフォルトでは port 9001をlistenするようになっています。
`http://localhost:9001/` などにアクセスすると、こんな感じに表示されます。

### theme: default
![tail_-F__Users_k_morishita_log1.png](https://qiita-image-store.s3.amazonaws.com/0/11124/f646ae3f-48fa-5f7c-8063-18c0a5a0ed2c.png "tail_-F__Users_k_morishita_log1.png")

### theme: dark

![tail_-F__Users_k_morishita_log1.png](https://qiita-image-store.s3.amazonaws.com/0/11124/28c0b1f0-0bf9-cb90-476f-42f2aadf1df1.png "tail_-F__Users_k_morishita_log1.png")

複数ファイルを指定した時
------------

```
frontail ~/log1 ~/log2
```

というように、起動時の引数に複数のファイルを指定することで一応複数ファイルをTailすることができます。

表示としては以下のようになります。

![tail_-F__Users_k_morishita_log1__Users_k_morishita_log2.png](https://qiita-image-store.s3.amazonaws.com/0/11124/0ea20a3c-4be0-c599-6d78-39abb41c5636.png "tail_-F__Users_k_morishita_log1__Users_k_morishita_log2.png")

こんな感じで真ん中にセパレータが表示される形式になるみたいです。
ここで、`log1`に追記があると、


![tail_-F__Users_k_morishita_log1__Users_k_morishita_log2.png](https://qiita-image-store.s3.amazonaws.com/0/11124/58cd2a3e-e232-0618-a067-332f04524594.png "tail_-F__Users_k_morishita_log1__Users_k_morishita_log2.png")

というように、行末にセパレータ付きで追記される形になります。

更新頻度が低いログを１画面で見たいというときには便利かもしれません。

流量が速いアクセスログのようなものを複数同時にみたい場合は、別々に frontail を portを分けて起動するのが良さそうです。

さいごに
=====

こういうの便利ですねー
【CoffeeScript】`this.hoge = hoge`を書かない

CoffeeScriptはメソッドの仮引数に`@`をつけることができる．

```coffeescript
class Animal
  constructor: (@name) ->
```

上記のコードはこんな感じに展開される．

```javascript
var Animal;

Animal = (function() {
  function Animal(name) {
    this.name = name;  // ← この行に注目！！
  }

  return Animal;

})();
```

このように，仮引数名に`@`prefixを付与すると`@name = name`を書かなくても済む（コンストラクタ以外でも同様）．


CoffeeScriptで怠惰を極めよう．
CentOSにheroku toolbeltを入れて、AngularJSアプリをherokuにアップする

**前置き**

普段はrailsで作成したアプリをherokuにアップしているのですが、
AngularJSアプリだと結構‥いやだいぶ苦労したので書いてみます。

ちなみにAngularJSのベースは[angular-seed](https://github.com/angular/angular-seed)を使用しています。

この記事を見ると
http://blog.mah-lab.com/2014/02/01/angular-fullstack/

[generator-angular-fullstack](https://github.com/DaftMonk/generator-angular-fullstack)だともっと簡単に挙げられそうなので、こっちをベースに使えばよかったのです。。。

とりあえず[angular-seed](https://github.com/angular/angular-seed)は、Node.js＋Expressですね。
詰まったところだけでも長いので、
Node.jsやnpmのインストール部分、git等の基本操作は割愛します :bow: 



**CentOSにheroku-toolbeltのインストール**


まず`wget`コマンドが入っていない場合は

```
$ sudo yum install wget
```

で入れてください。
その後は[公式](https://toolbelt.heroku.com/standalone)ページ通り、

Standaloneソースを持ってきて

```
$ wget -qO- https://toolbelt.heroku.com/install.sh | sh
```

パスを通します

```
$ export PATH="/usr/local/heroku/bin:$PATH"
```

`/usr/local/heroku`に入ったので、herokuコマンドが使えるようになります。



**SSH keyを登録**

```
$ heroku keys:add
```

**package.jsonを編集**

Express で生成された `/package.json` ファイルに、Heroku 用の記述を追加します。

`"dependencies"` のあとに `"engines"` を追加して、Node.js と npm のバージョンを記述します。

```
--- 省略 ---
  "dependencies": {
    "http-server": "^0.6.1",
    "bower": "^1.3.1"
    "express": "3.x"
  },
  "engines": {
    "node": "0.10.26",
    "npm": "2.7.5"
  },
--- 省略 ---
```

```
$ heroku create アプリ名

```


**Procfile を作成**

Procfileとは、Heroku で必要となる実行されるコマンドが何であるかを宣言するファイルなようで、
とりあえず動くようにするには、以下の内容を1文だけ書いて作成し、プロジェクト直下に置きます。

```
web: node app.js

```


これでも動かない場合は

**web.jsを編集**

```
var port = Number(process.env.PORT || 8000);
var express = require('express'); var app = express();
app.use(express.static(__dirname + '/app')); var server = app.listen(port, function() { console.log('Listening on port %d', server.address().port); });
```


```
$ git push heroku master

```

アップ出来た！！

長かった。疲れたパトラッシュ :dog: