OmniAICreator/Qiita-1.07M huggingface dataset:
UbuntuのPATHの設定方法

#一時的にコマンドラインからPATHに追加する

```bash
$export PATH="$PATH:/opt/mono/3.10/bin"
```
#起動時に自動的に読み込む
Ubuntuの起動時に自動的に読み込まれるようにするには、~/.profileにパスを設定をすればいい。
テキストエディタで開いて、末尾に設定を追加する。

```bash
$vi ~/.profile 
```
追加するのか下記の行。

```bash
PATH="$PATH:/opt/mono/3.10/bin"
```
再起動させずに即時反映させるには、下記のコマンドを実行する。

```bash
$source ~/.profile
```
#パスの確認

```bash
$echo $PATH
```
10分でMacにGo言語開発環境をインストールする方法

#概要
* MacでGo言語の開発環境をインストールする方法です
* Macのパッケージ管理システムHomebrewを使ったお手軽インストールです
* コマンドライン8行、所要時間10分。(ほぼ待ち時間)

#前提
* Xcodeがインストール済みなこと(入っていない場合は以下からインストール)
* https://itunes.apple.com/jp/app/xcode/id497799835?mt=12

#全体の流れ
* 1.Command Line Tools for Xcodeをインストールする(2分)
* 2.Homebrewをインストールする(2分)
* 3.Homebrewを使ってGoをインストールする(4分)
* 4.Hello Worldで確認(1分)

# 手順

## 1.Command Line Tools for Xcodeをインストールする(2分)
まずXcodeのCommand Line Toolsをインストールします。
ターミナルを開き以下のコマンドを実行。

```
$ xcode-select --install
xcode-select: note: install requested for command line developer tools
```
ダイアログが表示されるので、「インストール」>利用許諾に「同意する」でインストール完了。

## 2.Homebrewをインストールする(2分)
Homebrew（ホームブリュー）は、Macでソフトウェアのインストール・アンインストールをお手軽に行うパッケージ管理システムのひとつです。
ターミナルで以下のコマンドを実行

```
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
```
途中でEnterキーとパスワードの入力が必要です。

以下が表示されればインストール完了。

```
==> Installation successful!
==> Next steps
Run `brew doctor` before you install anything
Run `brew help` to get started
```

「brew doctor」コマンドで確認します。以下のように表示されればOK!

```
$ brew doctor
Your system is ready to brew.
```

## 3.Homebrewを使ってGoをインストールする(4分)

ターミナルで以下のコマンドを実行。

```
$ brew install go
```

完了まで3分ほどかかりました。進行状況は逐一更新されます。
以下が表示されればインストール完了。

```
==> Summary
?  /usr/local/Cellar/go/1.3.3: 4344 files, 114M
```
?はビールの絵文字でした…こいつめ……!
「go version」で確認します。バージョンが表示されればOK!

```
$ go version
go version go1.3.3 darwin/amd64
```

## 4.Hello Worldで確認(1分)

試しにHello Worldしてみます。

```
$ vi hello.go
```

```lang:hello.go
package main

import "fmt"

func main() {
    fmt.Println("Hello World!!")
}
```

「go run」コマンドで確認します。

```
$ go run hello.go
Hello World!!
```

できました!

# 参考
*[MacにHomebrewをインストールする](http://qiita.com/_daisuke/items/d3b2477d15ed2611a058) 
* [Macでgo言語開発環境を作る](http://qiita.com/puttyo_bubu/items/4e60e42ff041f2474428)
SCPによるファイル転送

# 概要
AのサーバーからBのサーバーへscpによるファイル転送を行う。

# 制約
- 使えるのはコマンドのみ。
- ssh鍵を使用した認証を用いること。

# 環境準備
## AWSを利用して環境を用意する。

【OS】Red Hat Enterprise Linux 7.0 (HVM), SSD Volume Type
【ポート】ssh用に22番ポートのみ開放

`Launch More Like This`でもう一個作成
![aws.png](https://qiita-image-store.s3.amazonaws.com/0/39243/be29da00-2c26-aee3-bf59-72799e57cfc7.png)

# レッツチャレンジ╭( ･ㅂ･)و ̑̑ ｸﾞｯ !
## TeraTermでログイン
初期ユーザー名はec2-user

パスワードなし

## ssh-keygenが使用できるかどうか確認
![keygen.gif](https://qiita-image-store.s3.amazonaws.com/0/39243/53bb97b7-b8bf-697c-274b-361439b38992.gif)

## 鍵を作成
`ssh-keygen -t rsa`
![key2.png](https://qiita-image-store.s3.amazonaws.com/0/39243/104ad9d7-467a-966d-4735-8c36c701079c.png)

## 鍵の確認
![key3.png](https://qiita-image-store.s3.amazonaws.com/0/39243/93e7ce9b-3597-7444-7cb9-b35655299636.png)

**id_rsa**が秘密鍵
**id_rsa.pub**が公開鍵

## 作成した鍵をサーバーBへ格納
サーバーBのauthorized_keysにid_rsa.pubをコピペ。
`vi ~/.ssh/authorized_keys`

## テスト用ファイル準備
![touch.png](https://qiita-image-store.s3.amazonaws.com/0/39243/02888355-6484-67e3-f241-16774fdd0d88.png)

## SCPで転送
![scp_err.png](https://qiita-image-store.s3.amazonaws.com/0/39243/edf4b4c5-502d-427e-5681-711b13d7be14.png)

あれっ？

・・・うん、セキュリティのところでIPをMyIPに制限してた。(ﾉ≧ڡ≦)てへぺろ

とりあえずAnywhereに変更して再度チャレンジ(灬╹ω╹灬)┣¨ｷ┣¨ｷ*

![scp_su.png](https://qiita-image-store.s3.amazonaws.com/0/39243/01356139-2aa5-d4c3-9503-e0e8d7a27664.png)

出来た～┣¨ ୧(๑ ⁼̴̀ᐜ⁼̴́๑)૭ ヤ

↓gif（上がサーバーA、下がサーバーB）
![scp.gif](https://qiita-image-store.s3.amazonaws.com/0/39243/695096da-8a25-d0f9-b9a9-07c9d759c866.gif)
※なんか変な緑の点々が出てるけど、気にしないでください。

# 終わりに
AWSはお手軽に環境作成できて良いですね。

ところでssh-keygenがもしも使えなかったらどうするんだろう。
公開鍵と秘密鍵をサーバー外で作ってサーバーにぶち込めばいいのかな？
perlでtwitterにアクセスしてみる。



## OAuth認証の準備

twitterのAPIを利用するためには[apps.twitter](https://apps.twitter.com/)に登録して認証キーを取得する必要がある。
・


## Net::Twitterのインストール

*Net::Twitter*
 http://search.cpan.org/dist/Net-Twitter/lib/Net/Twitter.pod

cpanmでインストールする。

```
[masato@mba] $ sudo cpanm Net::Twitter
--> Working on Net::Twitter
Fetching http://www.cpan.org/authors/id/M/MM/MMIMS/Net-Twitter-4.01004.tar.gz ... OK
Configuring Net-Twitter-4.01004 ... OK
 ...
Successfully installed Net-Twitter-4.01004
9 distributions installed
[masato@mba] $
```
YAMLあれこれ


## perlでYAMLを扱う準備

cpanmでYAMLライブラリをインストールしておく。

```
[masato@mba] $ sudo cpanm YAML
--> Working on YAML
Fetching http://www.cpan.org/authors/id/I/IN/INGY/YAML-0.98.tar.gz ... OK
Configuring YAML-0.98 ... OK
Building and testing YAML-0.98 ... OK
Successfully installed YAML-0.98
1 distribution installed
```

おけ
使用しているiPhoneのモデルを推定する

#iPhoneのモデルを解像度から取得する方法があるらしい

[iPhone5かどうかを、画面サイズで判別する方法](http://ios-dev.info/how-to-check-screen-size/)

この方法、非常に素晴らしいんですが、残念なことに今はSwiftを使ってる。この方法は使えない・・・

モデル判定のためだけに、Objective-Cを使う。そんなわけにもいかないのでSwiftで書き直せないかやってみました。

#Swiftで書いてみた
```swift:Swift
	/**
	使用しているiPhoneのモデルを推定する
	
	:returns: 解像度から推定される使用デバイス
	*/
	func iOSDevice() -> String {
		if UIDevice.currentDevice().userInterfaceIdiom == .Phone {
			if 1.0 < UIScreen.mainScreen().scale {
				let size = UIScreen.mainScreen().bounds.size
				let scale = UIScreen.mainScreen().scale
				let result = CGSizeMake(size.width * scale, size.height * scale)
				switch result.height {
				case 960:
					return "iPhone4/4S"
				case 1136:
					return "iPhone5/5s/5c"
				case 1334:
					return "iPhone6"
				case 2208:
					return "iPhone6 Plus"
				default:
					return "unknown"
				}
			} else {
				return "iPhone3"
			}
		} else {
			if 1.0 < UIScreen.mainScreen().scale {
				return "iPad Retina"
			} else {
				return "iPad"
			}
		}
	}
```

本家ではscaleが呼べるかどうかで判定していたようなのですが、どうもSwiftではそれに該当する機能が見つからない・・・そもそもscaleが普通にプロパティとして常時存在しているような？

そこで、scaleの本来の意味に戻って、scaleが１以上＝retinaだ！という感じで解釈してコードを分岐させています。ドキュメントによればretinaなら2、そうじゃないなら1らしい。
公式：[UIScreen Class Reference - Apple Developer](https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIScreen_Class/#//apple_ref/occ/instp/UIScreen/scale)

ちなみに、iPhone6 Plusなら3とかじゃないの？とも思ったけど持ってないので検証してない。どのみち1より大きいので、このコードでも問題ないでしょう。
OSX Yosemiteでpython動作環境を設定した(pyenv + pip)

1) pyenvをインストール
```brew install pyenv```

2) pyenvのrehashを自動化するプラグインをインストール
```brew install pyenv-pip-rehash```

3) シェルの起動スクリプトにpyenvの情報を追記 (bashの場合はzshの部分を置換)
```echo 'export PYENV_ROOT="${HOME}/.pyenv"' >> ~/.zshrc
echo 'if [ -d "${PYENV_ROOT}" ]; then' >> ~/.zshrc
echo '    export PATH=${PYENV_ROOT}/bin:$PATH' >> ~/.zshrc
echo '    eval "$(pyenv init -)"' >> ~/.zshrc
echo 'fi' >> ~/.zshrc
exec $SHELL -l```

4) pyenvで特定のバージョンのpythonをインストール
```pyenv install 3.4.2```

5) 特定のディレクトリにおけるpythonのversionを決定する
```pyenv local 3.4.2```

6) easy_installでpipをインストール
```sudo easy_install pip```

7) 確認 (step5でversionを決定したディレクトリで)
```which python```
/Users/Owner/.pyenv/shims/python

```python --version```
Python 3.4.2

```which easy_install```
/Users/Owner/.pyenv/shims/easy_install

```easy_install --version```
setuptools 2.1

```pip --version```
pip 1.5.6 from /Users/Owner/.pyenv/versions/3.4.2/lib/python3.4/site-packages (python 3.4)


以下分かりづらかったところ
1) easy_installは、pipを使う場合pipのインストール時にしか使わない。
Windowsを買って、最初にIEでChromeを入れてからはIE使わないみたいなもの。
なぜなら、pipはeasy_installの一部置換版であるため。

2) pipインストール時、sudoを付けないとpermission deniedと言われる。rootが必要なディレクトリを触るため。
pythonでcレイヤーにブレイクポイントを張る

cpythonのcコードをデバッグしたい場合、gdbを使って以下のようにデバッグできる。

cレイヤーの実行ステップを追いかけたいときに。

```
$ gdb -- /usr/bin/python
# ブレイクポイントを設定したい箇所を、ファイル名:行数で指定する。
(gdb) break bltinmodule.c:1665
# スクリプトを実行
(gdb) run /usr/bin/nosetests test.py
...
```

以下の記事を見て、こうやってやるんだーと知ったので覚書。（記事ではlldbを使ってます）
http://flowerhack.dreamwidth.org/3594.html?utm_source=Python+Weekly+Newsletter&utm_campaign=b17d7f3658-Python_Weekly_Issue_167_December_4_2014&utm_medium=email&utm_term=0_9e26887fc5-b17d7f3658-312730089
SwiftでFacebook popのPOPSpringAnimationを行う

#POPSpringAnimationをやってみる
![fbpop2gif.gif](https://qiita-image-store.s3.amazonaws.com/0/26043/e2e10f9e-657e-9b0a-6744-d7a59726c2e9.gif)


四角形がバウンドしながら大きくなるアニメーション(POPSpringAnimation)を作ってみます。

##PopをSwiftで使用する
「ProjectName-Bridging-Header.h」というヘッダファイルを作成し、以下を記述します。

```objc
#import <POP/POP.h>
```

・参考
[Swift内でObjective-Cで定義したクラスを利用する](http://qiita.com/edo_m18/items/861d090a5471f4f0eeae#swift%E5%86%85%E3%81%A7objective-c%E3%81%A7%E5%AE%9A%E7%BE%A9%E3%81%97%E3%81%9F%E3%82%AF%E3%83%A9%E3%82%B9%E3%82%92%E5%88%A9%E7%94%A8%E3%81%99%E3%82%8B)

#アニメーション作成
##Viewを作成
```swift
// myViewを生成.
myView = UIView(frame: CGRectMake(0, 0, 10, 10))
myView.backgroundColor = UIColor.orangeColor()
myView.layer.position = CGPointMake(self.view.frame.width/2, self.view.frame.height/2)

self.view.addSubview(myView)
```

##アニメーションを定義
```swift
func scaleView(view: UIView) {
    let anime = POPSpringAnimation()

    anime.property = POPAnimatableProperty.propertyWithName(kPOPLayerSize) as POPAnimatableProperty
    anime.springBounciness = 12.0
    anime.springSpeed = 10.0    

    anime.toValue = NSValue(CGSize:CGSizeMake(300, 300))
    view.pop_addAnimation(anime, forKey: "bound")
}
```

##実行
```swift
scaleView(myView)
```

・参考
https://github.com/facebook/pop
http://stackoverflow.com/questions/24150240/swift-nsvalue-valuewithcgrect
zshで直前のコマンドラインの最後の単語を挿入する

zshでは、直前のコマンドラインの最後の単語を挿入する機能がある。1つのファイルに対して違うコマンドを実行するときに便利なので紹介する。

## insert-last-wordを使う
標準でinsert-last-wordという機能がある。これを使うと、直前のコマンドラインの最後の単語がカーソル位置に挿入される。キーバインドはESC-\_と ESC-.に割り当てられているので、`ESC`を押したあとに`_`、または`ESC`を押したあとに`.`で使える。

```
% git diff foo.txt
% git add # <= ここでESC-.
% git add foo.txt # <= 前のコマンドラインの末尾にある単語が挿入される
```

これを使ってもいいんだけど、次のsmart-insert-last-wordというやつをつかうともっと便利なので紹介する。

## smart-insert-last-wordを使う
smart-insert-last-wordというのもある。これを有効にするための設定は次のとおり。

```zsh
autoload -Uz smart-insert-last-word
zle -N insert-last-word smart-insert-last-word
```

これを使うと、標準のinsert-last-wordがスマートなやつに置き換わる。具体的には、[a-zA-Z], /, \ のうち少なくとも1文字を含む単語だけが挿入の対象になって、そうじゃない単語は読み飛ばされる。

キーバインドはinsert-last-wordと変わらないので、そのまま同じように使える。

```
% git diff foo.txt 2>&1
% git add # <= ここでESC-.
% git add foo.txt # <= 2>&1は出てこない
```

## smart-insert-last-wordをカスタマイズする
「match」というスタイルを使うと、smart-insert-last-wordでどういう文字列を単語とみなすのかをカスタマイズできる。

標準は「[a-zA-Z], /, \ のうち少なくとも1文字を含む文字列」という条件になってる。

```zsh
# [a-zA-Z], /, \ のうち少なくとも1文字を含む単語
zstyle :insert-last-word match '*[[:alpha:]/\\]*'
```

これを「[a-zA-Z], /, \ のうち少なくとも1文字を含む**長さ2以上の文字列**」というふうに変更する例は次のとおり。

```zsh
# [a-zA-Z], /, \ のうち少なくとも1文字を含む長さ2以上の単語
zstyle :insert-last-word match '*([[:alpha:]/\\]?|?[[:alpha:]/\\])*'
```

これは1文字のグローバルエイリアスを使っているときに便利。末尾に`H`とかあってもそれは読み飛ばされるようになる。

```
# alias -g H='| head' というエイリアスを設定しているとする
% git diff foo.txt H
% git add # <= ここでESC-.
% git add foo.txt # <= Hは出てこない
```

## キーバインドを変更する
もちろん、キーバインドは変更できる。次の例では`^]`(Ctrlを押しながら])に変更している。

```zsh
bindkey '^]' insert-last-word
```

標準のキーバインドはちょっと押しにくいので、よく使うなら変更しておいたほうが便利。

## まとめ
最後に、今回紹介した設定をまとめておく。これを~/.zshrcに書いておけば今回紹介した機能が使用できる。

```zsh
autoload -Uz smart-insert-last-word
# [a-zA-Z], /, \ のうち少なくとも1文字を含む長さ2以上の単語
zstyle :insert-last-word match '*([[:alpha:]/\\]?|?[[:alpha:]/\\])*'
zle -N insert-last-word smart-insert-last-word
bindkey '^]' insert-last-word
```
[iOS]ウィジェットのサイズとレイアウトについて

iOS8からToday Extensionという機能が追加されました。
いわゆるウィジェットというものです。
iPhoneの画面上部から下に引っ張った時に出る「今日（Today）」タブにウィジェットを表示することが可能になりました。
自分も[東北ずん子メモウィジェット](https://itunes.apple.com/us/app/id926118978?mt=8)を作るときに若干いじったので、改めて[こちら](https://developer.apple.com/jp/devcenter/ios/library/documentation/ExtensibilityPG.pdf)のApple公式のページを参考に調べてみました。
アプリ作ってた当初はまだ英語の公式資料しか無かったのに、いつの間にか日本語訳されたものができていたので読みやすかったです。

##ウィジェットの最大サイズ
ウィジェットの最大のサイズは以下の画像の通りです。

###iPhone 6Plus
![iPhone6Plus.png](https://qiita-image-store.s3.amazonaws.com/0/46597/ffb3b299-eacf-2d0a-c796-bcc4724c7d28.png)


###iPhone 5s
![iPhone5s.png](https://qiita-image-store.s3.amazonaws.com/0/46597/95c3f99f-c051-300e-00eb-a0d71e55bb96.png)

機種によって画面のサイズは違いますが、画像の赤枠が最大サイズのようです。
画面一枚分のサイズですね。


##サイズとレイアウト


###preferredContentSize
ウィジェットで利用する画面サイズを指定するときに使います。
型はCGSizeなので使うときはこんな感じ

```
self.preferredContentSize = CGSizeMake(320, 568)
```

###widgetMarginInsetsForProposedMarginInsets(defaultMarginInsets: UIEdgeInsets) -> UIEdgeInsets
ウィジェット画面の上下左右に余白を作るメソッド。
使うときはこんな感じ

```
func widgetMarginInsetsForProposedMarginInsets(defaultMarginInsets: UIEdgeInsets) -> UIEdgeInsets {
    let edgeInsets = UIEdgeInsets(top: 20, left: 20, bottom: 20, right: 20)
    return edgeInsets
}
```

このメソッドはTodayViewController（ウィジェットのUIViewController）に採用されているNCWidgetProvidingプロトコルのメソッドなので、メソッドをそのままTodayViewController内に書くことで使えます。
SVNサーバ1.8、チェックアウト等でChecksum mismatch error発生時の対応

SVNサーバ1.8へのアップデート後、チェックアウト等の操作時にChecksum mismatch errorが発生するトラブルがありました。
下記対応し解決しましたのでメモしておきます。

# 現象

SVNサーバ1.8へのアップデート後、チェックアウト時にChecksum mismatch error発生する場合がある。

・チェックアウト量が極少ない場合は発生しない。
・SVNクライアント1.8で発生、1.7では発生しない。
(サーバ側はSVN1.8-Apache2.4で社内ADのアカウントを利用)

# 原因

SVN1.8で、デフォルトの転送モードがBulk→Skeltaに変更になった。
http://subversion.apache.org/docs/release-notes/1.8.html#serf-skelta-default
1.8サーバ-1.8クライアントの場合、デフォルトでSkeltaモードを利用して転送する。
1.7クライアントではデフォルトでBulkモードとなる。

SkeltaモードでSVNサーバ-Apache-SVNクライアント間の通信が失敗するケースがある模様。(発生条件不明、バージョン依存可能性有)

# 解決策

## SVNクライアント側(TortoiseSVN利用)

%appdata%\Subversion\servers に下記追記

http-bulk-updates: yes

## SVNサーバ側対応

httpd.conf に下記追記

SVNAllowBulkUpdates Prefer

# 解決策(上記原因以外)

httpd.confで、＜Directory＞ ではなく、＜Location＞ を使用するよう修正する。

http://subversion.apache.org/docs/release-notes/1.8.html#mod_dav_svn-fsmap
VagrantでGuest Additionsが更新できない件について



## 内容

GuestのGuest Additionsが古いと/vagrantの同期ができなくなるので、以下を入れた。

```bash
$ vagrant plugin install vagrant-vbguest
```

これで ``$ vagrant up`` や ``$ vagrant vbguest`` するとGuest Additionsが更新されうまくいっていた。
しかし何故かこの際に以下のエラーが出るようになった。

```bash
Building the main Guest Additions module[FAILED]
```

kernelを更新しようとしてパッケージが見つからないとかそんなエラーらしい。
ゲストに入って ``$ sudo yum -y update`` してからなら正常にインストールできる。
なので、正常にインストールできたゲストをBox化してこれからは使うことにした。


## 参考

* [VagrantのboxのGuest Additionsのアップデート方法](http://qiita.com/isaoshimizu/items/e217008b8f6e79eccc85)
* [Vagrant BoxのGuest Additonsのアップデート方法](http://qiita.com/kangju1988/items/1a7444b8886260d5105f)
[Swift] forControlEventsの種類一覧

addTarget:action:forControlEvents:」メソッドでボタンがタップされたときに、「forControlEvents:」ラベルの引数によりボタンのアクションを指定することが出来ます。具体的には以下のような値が使用可能です。

<table>
  <tr><th>UIControlEventTouchDown</th><td>タッチダウン</td></tr>
  <tr><th>UIControlEventTouchDownRepeat</th><td>2回以上のタッチダウン</td></tr>
  <tr><th>UIControlEventTouchUpInside</th><td>境界内でのタッチアップ</td></tr>
  <tr><th>UIControlEventTouchUpOutside</th><td>境界外でのタッチアップ</td></tr>
  <tr><th>UIControlEventAllTouchEvents</th><td>すべてのタッチイベント</td></tr>
</table>
EC2にDockerを入れてSSH接続する方法

##この投稿について

DockerのホストOSにAWSのEC2(Ubuntu)、ゲストOSにCentOSという構成で、SSH接続可能なコンテナを立ち上げた際のメモ

##EC2の準備

今回はAWSの「Community AMIs」からUbuntuの64ビット(ami-e74b60e6)を選んで使用。

「Configure Instance Details」のステップで、「Advanced Details」をクリックして、以下のように入力すると、勝手にDockerがインストールされた状態で立ち上げてくれる。



##Dockerfileの設定

```Dockerfile
FROM centos

# Install
RUN yum update -y
RUN yum install -y sudo
RUN yum install -y passwd
RUN yum install -y openssh-server
RUN yum install -y openssh-clients

RUN /usr/bin/ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key -C '' -N ''
RUN /usr/bin/ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -C '' -N ''
RUN sed -ri 's/UsePAM yes/#UsePAM yes/g' /etc/ssh/sshd_config
RUN sed -ri 's/#UsePAM no/UsePAM no/g' /etc/ssh/sshd_config

RUN echo 'root:root' |chpasswd
RUN sed -ri 's/#PermitRootLogin yes/PermitRootLogin yes/g' /etc/ssh/sshd_config

EXPOSE 22
```

##Dockerの実行

まずはビルドしてイメージを作成

```
$ sudo docker build -t test-sshd .
```

イメージが出来ているか確認

```
$ sudo docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
test-sshd           latest              9349fc717edb        1 minutes ago      353.6 MB
```

次にイメージを実行して、コンテナ作成。

```
$ sudo docker run -d -p 22 test-sshd /usr/sbin/sshd -D
```

ここでのポイントは、

* `sshd`をバックグラウンドで起動
* 22ポートをポートフォワーディング


次に、起動中のコンテナを確認する

```
$ sudo docker ps

CONTAINER ID        IMAGE               COMMAND               CREATED             STATUS              PORTS                   NAMES
2dfaa7ed4bce        sshd:latest         "/usr/sbin/sshd -D"   14 minutes ago      Up 14 minutes       0.0.0.0:49163->22/tcp   cocky_archimedes
```

49163番ポートが22番ポートにポートフォワーディングされているのが確認できる。

次に`ifconfig`でゲストOSのipを調べる

```
$ ifconfig

docker0   Link encap:Ethernet  HWaddr 56:84:7a:fe:97:99  
          inet addr:172.17.42.1  Bcast:0.0.0.0  Mask:255.255.0.0
          inet6 addr: fe80::5484:7aff:fefe:9799/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:9001  Metric:1
          RX packets:16796 errors:0 dropped:0 overruns:0 frame:0
          TX packets:19160 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:992133 (992.1 KB)  TX bytes:111073684 (111.0 MB)

```

次のようにすればログインできるはず！（パスワードは`Dockerfile`で設定したように`root`）

```
$ ssh root@172.17.42.1 -p 49163
```
『UNIXという考え方』　読書メモ

#概要
* [『UNIXという考え方』](http://www.amazon.co.jp/dp/4274064069
)の要約というか、読書メモです。
* UNIXの設計思想にフォーカスしているはずが、「処理効率より移植性」「100%ではなく現実的な90%を目指す」「後から変更しやすいプログラムにする」「車輪の再発明はしない」などUNIX以外にも当てはまる汎用的なテーマが多く面白い。

#UNIXの考え方 : 基本的な9つの定理
* [定理1] スモール・イズ・ビューティフル
* [定理2] 1つのプログラムには1つのことをうまくやらせる
* [定理3] できるだけ早く試作する
* [定理4] 効率より移植性を優先する
* [定理5] 数値データはASCIIフラットファイルに保存する
* [定理6] ソフトウェアを梃子(てこ)として使う
* [定理7] シェルスクリプトによって梃子(てこ)の効果と移植性を高める
* [定理8] 過渡の対話的インターフェースを避ける
* [定理9] すべてのプログラムをフィルタとして設計する

#面白かった部分のメモ

## 小さなプログラムという発想
「なるべく小さな部品に分けよう」という主張や、「小さいほうが保守もテストも楽だ」というメリットはよく聞くが、「みんなそう思ってるのになぜプログラムは肥大化するの?」という点に言及しているのが面白かった。

> * 一般にソフトウェアの開発者は、巨大なプログラムを書いてしまう。これは「あらゆる不測の事態に対応できるように」という誤った考えに基づくものだ
* 一方、小さなプログラムの開発者は、未来の予測など最初からあきらめている。彼らの予測することは、明日作られるものは今日作っているものとは違うということでしかない。
* 作った時には予測できなかったことに対しても、小さなプログラムなら直ちにそれに対処できる。
* 現実には、その場かぎりの小さな解決策でも解決できない問題はそれほど多くはない。
* creeping featurism(しのびよる多機能主義)

## なぜソフトウェアは「ソフト」ウェアなのか
未来の予測はむずかしいし、たいてい予測どおりにはいかない。

> * ソフトウェア開発に終わりはない。あるのはリリースだけだ。
* ソフトウェア技術者たちが、ユーザーが現在必要としている機能と将来必要になるであろう機能とをすべて把握していたとすれば、ソフトウェアはいらないだろう。すべてのプログラムは、最初からROMに書かれていればいい。
* ソフトウェアのエンジニアという職業には、継続的な改訂作業がつきものだ。

## プログラムを速くすることに時間をかけない
> * 多くのUNIXプログラマが犯す間違いの一つに、わずかな速度を求めてシェルスクリプトをC言語で書き直すというものがある。
* 将来のハードウェアでの性能向上を常に視野に入れて置かなければならない。
* そのプログラム自身のためだけに、速くしようとする誘惑に抵抗することだ。来年の新マシンはすぐそこまで来ている。
* プログラムの速度に多少の不満があっても、現在のニーズが満たされていればそれでよしとする。

## シェルスクリプトをC言語で書き直すという誘惑に負けない
> * UNIX環境においてのC言語には、シェルスクリプトのような移植性はない
* シェルスクリプトの持つ思わぬ利点は、C言語で書いたプログラムよりずっと移植性が高いことだ。
* 変わった意見に聞こえるかもしれないが、C言語でプログラムを書くのは、絶対に必要な場合以外はなるべく避けるべきだ。

##効率より移植性
* C言語よりシェルスクリプトの方が移植性が高いとありますが、今ならGo言語がいいかも、という意見を見つけました。

> 移植性の話でシェルスクリプトが礼賛されてるけど
> 今だとクロスコンパイルの効くgolangが良いと思う。
> [UNIXという考え方読んだ - はこべブログ](http://hakobe932.hatenablog.com/entry/2014/06/28/004005)

## 最も効率のよい方法は、ほとんどの場合移植性に欠ける
> * ハードウェアと切り離すことができないソフトウェアは、そのハードウェアが競争力を持ち続ける間しか価値を維持できない
* より高速なハードウェアによって既存のハードウェアが置き換えられる度に書き直さなければならない。

## プログラムはデータを作らない。人間がつくる
> * ソフトウェアの本質は、データを処理することで、生成することではない。

## 理想を追いかけるより現実的な小さな解決
> * さまざまな批判を浴びせかけられるだろう。しかし、当の本人は「ああ、そりゃちょっと汚いのは分かってる。でもちゃんと役に立ってるだろ!」と、こういうだろう。
* 「正しく」やる時間がない人間は、重要な箇所だけに集中して枝葉を無視する。その結果、いくつかの細かい点は次のバージョンに回そうと計画する
半径を入力して、円の面積を求める


こんにちは、[@Solpha](https://twitter.com/solpha)です。

今回は円の面積を求めるプログラムを書いてみたいと思います。

#概要

- 半径のみ入力
- 円周率は1世代前の学校の授業で使われていた「3.14」を適用

#プログラム

##コード
```go:circle.go
package main

import "fmt"

func main() {
	var radius, circle float32

	fmt.Printf("半径を入力してください --> ")
	fmt.Scanln(&radius)

    // 半径×半径×3,14の結果をcircleに代入
	circle = radius * radius * 3.14

	fmt.Println(circle)
}
```
変数radiusとcircleの型が`float32（浮動小数点型）`になっているのがポイントです。

仮にradiusの型を`int`にした場合、実行したら、

`cannot use radius * radius * 3.14 (type float32) as type int in assignment`

とエラーが出ます。これはcircle求める式において、

`radius(int型) * radius(int型) * 3.14(浮動小数値型)`

型の違うもの同士を計算しようとしているために起こるエラーなので、radiusを”3.14”に合わせて、int型から浮動小数値型に変えることで解決することができます。

##実行結果
```
$ go run circle.go
半径を入力してください --> 4
50.24
```

##コード（改）
[heliac2000](http://qiita.com/heliac2000)さんより、mathパッケージ関するコメントをいただいたので、コメント内容を反映した形でプログラムを改良しました。heliac2000さんありがとうございます。

```go:circle2.go
package main

import (
	"fmt"
	// mathパッケージを宣言
	"math"
)

func main() {
	var radius, circle float32

	fmt.Printf("半径を入力してください --> ")
	fmt.Scanln(&radius)

	// math.Piが円周率となる
	circle = radius * radius * math.Pi

	fmt.Println(circle)
}
```
これまで`fmt`パッケージしか使用していませんでしたが、基本パッケージの中にある`math`パッケージ（定数や数学的な関数を使用できる）を使用してみました。

`math`パッケージの中で今回使用しているのは定数`Pi（π）`で、`math.Pi`といった形で書くことで円周率を表すことができます。

パッケージを知ってるか否かで、プログラムの書き方って変わってくるんですね。面白い！！

##実行結果（改）
```
$ go run circle2.go
半径を入力してください --> 4
50.265484
```
コード改良前と比べて小数点以下の桁数が増えて、より正確な値になっていることが分かります。

#所感
型が誤っていればエラーで教えてくれるので素敵ですね。

型はたくさんあるようなので、次回は主要な型を整理したいと思います。
LinuxでCPU使用率を取得する(top)


窓OSのタスクマネージャーにあるCPU使用率みたいなものが必要になったので簡単(適当)なスクリプトをメモ程度に書いときます。


####スクリプト
```
#!/bin/sh
CPU=`top -n 2 -b -d 1 | grep ^Cpu | tail -n 1`
IFS=','
set -- $CPU
echo $1 | sed -e "s/\Cpu(s):  //" | sed -e "s/\Cpu(s): //" |sed -e "s/\%us//"
```

####出力結果

```
# sh cpu.sh 
20.1
```

間違えてたらごめんなさい。
Dockerで溜まったコンテナをまとめて削除する方法

よく忘れて調べるのでメモ


コンテナの削除は

```
sudo docker rm -f [コンテナID/コンテナ名]
```

で、出来るがいっぱあるのを一個ずつ削除していくのは面倒。
以下のようにすると一回でまとめて全部消せる。

```
sudo docker rm -f `sudo docker ps -a -q`
```
macでwiiリモコンを使う

## 参考

* [MacでWiiU Pro Controllerを使ってみる | RexLab.](http://cgi-games.com/~rexent/mac%E3%81%A7wiiu-pro-controller%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%8B.html)

## インストール

OSX 10.10 で確認。

[wjoy](https://code.google.com/p/wjoy/downloads/detail?name=wjoy%200.7.1.dmg&can=2&q=)をダウンロード

![スクリーンショット 2014-12-07 15.22.20.png](https://qiita-image-store.s3.amazonaws.com/0/25728/9a5acf63-297a-45ec-f283-aae32f6f0528.png)

![スクリーンショット 2014-12-07 15.22.13.png](https://qiita-image-store.s3.amazonaws.com/0/25728/da0bc71d-32f4-cb71-a474-143c1ee1c408.png)

## 起動

![スクリーンショット 2014-12-07 15.21.38.png](https://qiita-image-store.s3.amazonaws.com/0/25728/d7fe3515-647a-0949-985d-f67a9d3253cc.png)

wiiリモコンの 1 と 2 を同時押しすると接続され、
wiiリモコンが振動する。


## キー割り当て

* [Controllers - Play games with console controllers on Mac.](https://vividmachine.com/controllers/)
* [Releases · fyhuang/enjoy2](https://github.com/fyhuang/enjoy2)
AndroidでTwitterに連携する時に悩んだこと

URLで文字列をTwitterのアプリに渡す時、＃をそのまま書いても表示されません。

詳細は省きますが、＃を入れてハッシュタグを付けたい時は

%23

といれましょう。
もしくは

エンコード変更することで解決できます。

`String myTweet = Uri.encode("text=ツイートしたい内容 #テスト”);`
SCIPをMacにインストール

非商用で最も高速に混合整数（非）線形計画問題を解けると言われるSCIPのMacへのインストール方法です．
結論から言えば，特に問題なくソースからコンパイルできました．

私の理解ではSCIPは以下の点が良いです：

- 非商用，無償の中では速い
- いろいろ解ける
   - linear programming (LP), mixed integer programming (MIP), and mixed integer nonlinear programming (MINLP) 
- PythonやJavaから呼び出せる
   
執筆時点2014.12.07にて最新のVer. 3.1.0を前提に書いています．
また，SCIPの非商用ライセンス[ZIB Academic License](http://scip.zib.de/academic.txt)にて利用する場合の内容です．

# ダウンロード

`scipoptsuite-3.1.0.tgz`を[SCIP](http://scip.zib.de/)からダウンロード

- [Download](http://scip.zib.de/#download)をクリック
- [Source code: SCIP Optimization Suite](http://scip.zib.de/download.php?fname=scipoptsuite-3.1.0.tgz)をクリック
- **I certify that I will use the software only as a member of a noncommercial and academic institute and that I have read and accepted the ZIB Academic License.**を選択
- **Start Download**をクリック

# コンパイル

```bash 
tar fzxv scipoptsuite-3.1.0.tgz
cd scipoptsuite-3.1.0
make
```

# テスト
```bash
** Build complete.
** Find your SCIP binary in "/Users/kato/dev/SCIP/scipoptsuite-3.1.0/scip-3.1.0/bin".
** Enter "make test" to solve a number of easy instances in order to verify that SCIP runs correctly.
```

と表示されるので

```bash
make test
```

を実行．

# SCIPのインストール
```bash
cd scip-3.1.0
make install INSTALLDIR=/usr/local/
```

特に問題なくインストールが終わってしまった．
（Macでインストールする時に何か問題が起こることを期待していたのだけれど･･･）．

# Interactive Shell
以下を実行するとInteractive Shellを開ける：

```bash
scip
```

問題の読み込み

```bash
SCIP> read check/instances/MIP/stein27.fzn

read problem <check/instances/MIP/stein27.fzn>
============

original problem has 29 variables (29 bin, 0 int, 0 impl, 0 cont) and 118 constraints
```

問題の最適化

```bash
SCIP> optimize
...
SCIP Status        : problem is solved [optimal solution found]
Solving Time (sec) : 0.79
Solving Nodes      : 3838
Primal Bound       : +1.80000000000000e+01 (315 solutions)
Dual Bound         : +1.80000000000000e+01
Gap                : 0.00 %
```

解の出力

```bash
SCIP> display solution

objective value:                                   18
true                                                1 	(obj:0)
x0001                                               1 	(obj:1)
x0002                                               1 	(obj:1)
x0005                                               1 	(obj:1)
x0008                                               1 	(obj:1)
x0009                                               1 	(obj:1)
x0011                                               1 	(obj:1)
x0012                                               1 	(obj:1)
x0016                                               1 	(obj:1)
x0017                                               1 	(obj:1)
x0018                                               1 	(obj:1)
x0019                                               1 	(obj:1)
x0020                                               1 	(obj:1)
x0022                                               1 	(obj:1)
x0023                                               1 	(obj:1)
x0024                                               1 	(obj:1)
x0025                                               1 	(obj:1)
x0026                                               1 	(obj:1)
x0027                                               1 	(obj:1)
```
Androidでプロジェクト生成時に自動でimportされるsupport-v7-appcompatを解除する

Androidでプロジェクト生成時に自動でimportされてしまう、support-v7-appcompatを解除します。

普通に設定からimportを外すだけだとエラーが発生してしまうので、stylesを変更します。

◆values/styles.xml
    `style name="AppBaseTheme" parent="Theme.AppCompat.Light"`
　　↓
    `style name="AppBaseTheme" parent="android:Theme.Light"`

◆values-v11/styles.xml
    `style name="AppBaseTheme" parent="Theme.AppCompat.Light"`
　　↓変更
    `style name="AppBaseTheme" parent="android:Theme.Holo.Light"`

◆values-v14/styles.xml
    `style name="AppBaseTheme"parent="Theme.AppCompat.Light.DarkActionBar"`
　　↓変更
    `style name="AppBaseTheme"parent="android:Theme.Holo.Light.DarkActionBar"`
slackの★をタスクリストとして使う


slackの★ってtwitterのfav的な雰囲気あるけど、そうじゃなくてタスクリストとして使うと便利です。

## [Shift+Cmd+s]で開けるStarred Items

![スクリーンショット_2014-12-07_14_09_24.png](https://qiita-image-store.s3.amazonaws.com/0/8463/d88d3650-dc17-787c-fd14-0be634f51d9d.png "スクリーンショット_2014-12-07_14_09_24.png")

僕らのチームではGithubやTrello、それからカスタマーサポート用にZendeskと連携してて、プロジェクトのやりとりがすべてslackに集約する形式にしています（連携する時は通知するものは結構絞った方がいいです。僕らのチームではタスク系が作られた時かコメントした時しか通知飛ばしてません）。

slackも複数のやりとりがなされてたりすると一瞬で会話が流れていってしまうことになるし、slackに情報が集約してきたりするとそこで仕事完結したい感じもあります。

そこで僕は下記フローにてチャットで後でやらなければならないことに★を付けてタスク管理しています。

1. あとで処理しなければならない投稿を見つけたら★

2. [Shift+Cmd+s]をつけると★付けた投稿一覧が見れる

3. タスクが処理し終わったら★を外す

タスクリストとして使ってるので基本的にStarred Itemsは空になるように運用するのがいいですね。
iOS + Railsでturbolinks使うとshouldStartLoadWithRequestが呼ばれなくて困った時に

iOSでWebViewベースのアプリを作成しようとした時に、
Railsつかってサクッとやろうと思ったら意外とハマったのでメモ。

shouldStartLoadWithRequestフックでヘッダメニューのボタンを切り替えようとしたら、
なぜか呼ばれたり呼ばれなかったりしてどうも意図通り動いてくれず...
あれこれshouldStartLoadWithRequest呼ばれない条件について調べてみると、
どうもajax呼び出しだと反応してくれない模様。

はて、というかそもそもajax呼び出しでページ切替なんてしてたっけと思いつつ、
Railsについてあれこれ調べていると、(Rails初心者)
どうもturbolinksが入っているとajaxでページ読み込みをして
余計なデータの読み込み(js/cssなど)を抑えてくれるということが判明。

turbolinksをoffれば話は終了なのですが、
いやいやしかし、せっかくよしなってくれているのをoffるのもナンセンスなので
turbolinksについてあれこれ調べてみると、
どうも遷移ごとにjavascriptでカスタムイベントを発行してくれている模様。
(参考: http://qiita.com/saboyutaka/items/bcc0966313c6f7399a6e)

てなわけで、一旦以下のようにしたら動くようになりましたとさ。

```coffeescript:application.js.coffee
$(document).on 'ready page:load page:restore', ->
  location.href = 'turbolinks://pageload'
```

```objc:ExampleController.m
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    if ([request.URL.scheme isEqualToString:@"turbolinks"]) {
        // 何かしらの処理

        return NO;
    }

    // ...
}
```

なんかもっといい感じのやり方ありそうだけど、
とりあえずはこれで何とかしたというお話。
vim から :shell で抜けたときにわかりやすくする（bash 版）

[dayflower](http://qiita.com/dayflower) さんの「[vim から :shell で抜けたときにわかりやすくする](http://qiita.com/dayflower/items/06cba1bc3d8bf5403659)」を bash でやりたいなあ，と思ったという話です．vim からシェルを呼び出すと，作業するうちに vim 経由であることを忘れてしまうので，vim 経由であることをプロンプトに明記します．目標は以下のような感じ．

```
(vim) user@host:~$
```

頭の `(vim)` は緑色にします．

# 設定

```.bashrc
[[ $VIM ]] && PS1="\[\e[1;34m\](vim)\[\e[00m\] $PS1"
```

上記の内容を `~/.bashrc` に書き込んで `source ~/.bashrc` で更新します．

# 解説

vim 経由でシェルを呼び出すと `$VIM` という変数が定義されるので，`$VIM` の有無でプロンプトを書き換えます．

`\[\e[1;34m\]` と `\[\e[00m\]` で囲まれたテキストの色が明るい緑色になります．色の設定は「[bashrcの設定でコマンドプロンプトの色をかえたりあれこれするメモ](http://babyp.blog55.fc2.com/blog-entry-663.html)」を参考にしました．
Redmineサーバ統合事例

運用中Redmineサーバを統合しました。

資料公開しましたので、必要な方は参考にしてください。
http://www.slideshare.net/y503unavailable/redmine-42182169

Redmineサーバ統合の関連情報を下記にまとめました。
https://redmine.tokyo/issues/247

---

統合作業は
・設計統合
・統合事前準備/利用者習熟
・データ統合
の３段階で実施しました。

REST/SQL併用で実施

Redmineの適切な運用規模？

＃ 11月のredmine.tokyo勉強会で発表した内容です。
http://redmine.tokyo/projects/shinared/wiki/%E7%AC%AC7%E5%9B%9E%E5%8B%89%E5%BC%B7%E4%BC%9A
Mac OS X Yosemite のクリーンインストール用、ブート可能なインストールディスクを作成する方法


元記事
http://ja.katzueno.com/2014/12/3325/

1. App Store から Mac OS X Yosemite を ダウンロード
1. 8GB 以上の USB ドライブを用意。（データを全て消去するので、 USB ドライブの既存のデータは他に移動させておくこと）
1. USB ドライブの名前を「YosemiteInstaller」という名前に変更する
1. 「アプリケーション」「ユーティリティ」から「ターミナル」を起動
1. 次のコマンドを実行させる
```
sudo /Applications/Install\ OS\ X\ Yosemite.app/Contents/Resources/createinstallmedia --volume /Volumes/YosemiteInstaller --applicationpath /Applications/Install\ OS\ X\ Yosemite.app --nointeraction
```
1. 20分ほど待つと、 USB ドライブの内容がインストールデータに置き換えられます

参考記事
http://macs.about.com/od/OS-X-Yosemite/ss/How-to-Make-a-Bootable-USB-Drive-of-the-OS-X-Yosemite-Installer.htm
protected, private な method を unitTest する


ググれば出てくるので今更感は否めないのですが、Reflection を利用して実現するのが一般的ですね。ただ、TestCaseの記述には時間をかけたくないものです。

```php:exampleClass.php

<?php
class Example
{
	private function sampleMethod()
	{
		return true;
	}
}
```

```php:exampleClassTest.php
class function ExampleTest
{
	protected $object;
	
	protected function setUp()
	{
		$this->object = new Example;
	}
	
	public function sampleMethodTest()
	{
		$reflection = new \ReflectionClass($this->object);
		$method = $reflection->getMethod('sampleMethod');
		$method->setAccessible(true);
		$res = $method->invoke($this->object);
		$this->assertTrue($res);
	}
}
```

まあ、こんな具合…。

ずぼらなんで、この５行が面倒くさい。
そこで、こんなことしてみました。

```php:trait.php
<?php
trait CommonTrait
{
	public function __call($name, $arguments = array())
	{
		if (MODE === TEST) {
			$reflection = new \ReflectionClass($this);
			$method = $reflection->getMethod($name);
			$method->setAccessible(true);
			return $method->invokeArgs($this, $arguments);
		} else {
			$msg = 'アクセス不能なメソッドをコールしました。';
			throw new Exception($msg);
		}
	}

	public static function __callStatic($name, $arguments = array())
	{
		if (MODE === TEST) {
			return $this->__call($name, $arguments);
		} else {
			$msg = 'アクセス不能なメソッドをコールしました。';
			throw new Exception($msg);
		}
	}

```


```php:exampleClass.php

<?php
class Example
{
	use CommonTrait;
	
	private function sampleMethod()
	{
		return true;
	}
}
```

```php:exampleClassTest.php
<?php
class function ExampleTest
{
	protected $object;
	
	protected function setUp()
	{
		$this->object = new Example;
	}
	
	public function sampleMethodTest()
	{
		$res = $this->object->sampleMethod();
		$this->assertTrue($res);
	}
}
```

定数のMODE, TESTは実行環境がテスト環境であることを表しています。
そうでないと、いつでもprivate, protected な method が実行できてしまうので…。

実行モードはbootstrap.php に定義しておくだけですね。

```php:bootstrap.php
<?php
ini_set('include_path'
	, ini_get('include_path')
	. PATH_SEPARATOR . '/usr/share/pear'
);

//	テスト環境
if (!defined('TEST')) {
	define('TEST', 1);
}
//	開発環境
if (!defined('DEVELOPPING')) {
	define('DEVELOPPING', 2);
}
//	本番環境
if (!defined('PRODUCTION')) {
	define('PRODUCTION', 3);
}
//	実行モード
define('MODE', TEST);
```
外部リンクにtarget=”_blank”と別窓アイコンを付ける(jQuery)

# <i class="fa fa-check-circle-o"></i> 動機
HTMLでaタグを書くとき、外部リンクと内部リンクを区別してtarget="_blank"など付与するのは面倒くさい。
jQueryで解決する先人の例 (http://web-pc.net/jquery007) があったので、これを応用しようと考えた。

そこで、hrefで指定するURLを目印に付与するようにしてみた。

# <i class="fa fa-check-circle-o"></i> やりたいこと
*あらかじめ、外部リンクと内部リンクは、"http://" ありなしで区別しておく
・外部リンク: target="_blank" & 目印アイコンを付与
・内部リンク: 修飾なし

## <i class="fa fa-check-square-o"></i> コード
```html
<!-- External Resources -->
<link href="//maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css" rel="stylesheet">
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<!-- Main JS -->
<script>
    $("a[href^='http://']").attr("target","_blank");
    $('a[target="_blank"]').after(' <i class="fa fa-external-link"></i>');
</script>

<!-- Example HTML-->
<ul>
<li><a href="example.html">内部リンク</a></li>
<li><a href="http://google.com">外部リンク</a></li>
<li><a href="//google.com">外部リンク(修飾なし)</a></li>
</ul>
```

## <i class="fa fa-check-square-o"></i> 結果
```html
<ul>
<li><a href="example.html">内部リンク</a></li>
<li><a href="http://google.com" target="_blank" >外部リンク</a><i class="fa fa-external-link"></i></li>
<li><a href="//google.com">外部リンク(修飾なし)</a></li>
</ul>
```
![20141207.PNG](https://qiita-image-store.s3.amazonaws.com/0/1582/212a6ac7-01f5-2f17-b3f0-82b137d477b9.png)

2番目のリンクのみ、target="_blank"と目印が付きました。
hrefに"http://" がない1番目・3番目のリンクには、target="_blank"や目印は付きません。

# <i class="fa fa-check-circle-o"></i> 参考
外部リンクにtarget=”_blank”とclassを付与するjQueryで別窓アイコンを付ける - ホームページ制作やリニューアル印刷物デザインなら大阪のWPC
http://web-pc.net/jquery007

少しのコードで実装可能な20のjQuery小技集 | Webクリエイターボックス
http://www.webcreatorbox.com/tech/jquery-tips20/

[まとめ] Font Awesomeのイケてる使い方をまとめました # sakainote
http://sakainote.com/?p=1820
CentOSでグループの一覧を表示する

CentOSでグループ一覧を確認したいことあります。

# グループ一覧を表示
catコマンドで/etc/groupを表示すると、グループの一覧を確認できます。

```bash:グループ一覧を表示
cat /etc/group

略

pugiemonn:x:500:
```

pugiemonnグループを表示できました。

## getentコマンドを利用して、グループ一覧を表示
コメントをいただきました。getentコマンドを使用しても、グループ一覧を表示できます。

```bash:getentコマンドでグループ一覧を表示
getent group
```

グループ一覧をグループ名で絞り込むパターンです。

```bash:getentコマンドでグループ名で絞り込み表示
getent group group_name　
```

例、mysqlグループを検索

```bash:グループ名で絞り込み表示
getent group mysql
mysql:x:27:
```

# 関連：ユーザーの一覧を表示
CentOSでユーザーの一覧を確認する
http://qiita.com/pugiemonn/items/aca73990736f26c9cded
VimmerがPycharmに乗り換えた時のTips


ここにあるとおり、IdeaVimを入れるとvimのキーバインドが使える
http://nwpct1.hatenablog.com/entry/pycharm-vim

## projectのrootとdjangoのrootフォルダーが一緒になっていないとき
左上のエクスプローラーから、Mark Directory Asを選んで、Source Rootに設定する。
こうしておかないと、djangoのアプリケーションのファイルを読み込んでもソースエディターで参照エラーを指摘される

## ファイルを開くとき
shiftを２回連続押すと検索になるので、ファイル名を指定する
djangoの場合views.pyとか同じようなファイルになるので、pecoみたいに絞込できるといいんんだけど

## タブの切り替え
Ctrl + Tabでスイッチャーが起動

## terminalを開く/閉じる
option(alt) + F12 キー

## 自動フォーマット
Command + option(alt) + L

## snippetの検索
Command + J

## 行番号の表示
Preferences>Editor>General>Appearance>Show line numbers
ActiveRecordのコピー時にPaperclipのAttachmentも正しくコピーする

`paperclip`付きの`ActiveRecord`を`dup`した時に`attachment`は同じファイルが別パスにコピーされるようにしようとして、はまりました。

# 何が起きたか

paperclipのattachmentをコピーする場合、以下のような方法が取れることがネット上でよく書かれている。

imageがpaperclip attachmentだとして、`foo`の`image`を`bar`にコピーすることを考えます。

```rb
bar.image = foo.image
```

これ自体は正しいです。
でも、これをインスタンスのコピー`dup`に適用しようとすると、うまくいかないことがあります。

```rb
def dup
  copy = super
  copy.image = self.image
  copy
end
```

paperclipは[内部でアクセッサを動的に定義して](https://github.com/thoughtbot/paperclip/blob/981fb513e6559466537ff51363c1434f1cf7cef1/lib/paperclip/has_attached_file.rb#L43)おり、`dup`や`clone`メソッドを使うと、この動的に作られたアクセッサもコピーされてしまいます。
そのため、上のコードで言うと、`copy.image === self.image`が成り立つことになります。

# 解決策

汚いやり方ですが、`dup`内でアクセッサをクリアします。
`paperclip`の内部ロジックが`paperclip 4`から変わっているので両方に対応させたものが以下です。

```rb
  def dup
    copy = super
    if self.respond_to?(:each_attachment)
      copy.instance_variable_set("@_paperclip_attachments", {})
      self.each_attachment do |name, attachment|
        copy.__send__("#{name}=", self.__send__(name)) if self__send__(name).exists?
      end
    # Hack for paperclip 4
    elsif self.class.respond_to?(:attachment_definitions)
      self.class.attachment_definitions.keys.each do |name|
        copy.instance_variable_set("@attachment_#{name}", nil)
        copy.__send__("#{name}=", self.image) if self.__send__(name).exists?
      end
    end
    copy
  end
```

これで、正しく`attachment`をコピーすることができました。
rvestでDribbbleに投稿されたshotのカラーパレットを作る

`rvest`というwebスクレイピングを簡単にやってくれるパッケージが便利ですわ、という話。さすが羽鳥氏の作りしパッケージ...。

このパッケージを使って、Rの**カラーパレットを生成**してみました。

今回は[Dribbble](https://dribbble.com)というおしゃれなイラストが投稿されるサイトから、投稿画像で使われているカラーパレットを取得します。

例えば[このページ](https://dribbble.com/shots/1617296-Dribbble-is-5)だと、ほぼピンクです。合わせて４色が使われているみたいです。

パッケージは`rvest`とパイプ演算子を使用するために`magrittr`、デモ用に`ggplot2`を使用します。インストールしていない人はインストールしてください

```{r}
# 上記パッケージをインストールしていない場合...
library(devtools)
install_github("hadley/rvest")     #https://github.com/hadley/rvest
install_github("smbache/magrittr") #https://github.com/smbache/magrittr
```

## URLを指定

```{r}
get_palette <- function (url, col.n = 8) {
  url <- html(url)
  cols <- url %>% 
    html_nodes("ul.color-chips li a") %>%
    html_attr("title")

  cols[1:col.n]
  na.omit(cols)
}
# 'usage
# get_palette(url = "https://dribbble.com/shots/1617296-Dribbble-is-5")
```

## カテゴリーから取得

```{r}
get_shot_palette <- function (col.n = 8, genre = c("debut", "recent", "teams", "playoffs", "animated")) {
  base.url <- c("https://dribbble.com")
  
  request.url <- html(paste(base.url, "/shots?list=", genre, sep = "")) %>%
    html_nodes(".dribbble-img a") %>%
    html_attr("href") %>%
    head(1)
  
  request.url <-paste(base.url, request.url, sep = "")
  
  url <- html(request.url)
  cols <- url %>% 
    html_nodes("ul.color-chips li a") %>%
    html_attr("title")
  
  cols[1:col.n]
  na.omit(cols)
}
# 'usage
# get_shot_palette(genre = "debut")
```

## カラーパレットの使用

取得したカラーパレットをもとに作図をしてみます。

```{r}
my.col <- get_shot_palette(genre = "animated")
my.col
[1] "#2F2F2F" "#B1DC76" "#7BECED" "#FF85A7"
[5] "#F3BB72" "#57595B" "#DBDFD4" "#927C78"

library(ggplot2)

x <- c(1:8)
y <- rep(1, 8)

z <- c(letters[1:8])
xyz <- merge(x, y) %>%
  cbind(z)

ggplot(data = xyz, 
       aes(x = x, y = y)) +
  geom_point(size = 12, aes(color = z)) +
  scale_colour_manual(values = my.col)
```

![Rplot2.png](https://qiita-image-store.s3.amazonaws.com/0/19462/738c56a3-1071-fe2a-63a0-053d9e164c81.png)

```{r}
qplot(factor(cyl), data=mtcars, geom="bar", fill=factor(vs)) + 
  scale_fill_manual(values = my.col)
```
![Rplot.png](https://qiita-image-store.s3.amazonaws.com/0/19462/d4681736-3039-99c2-2071-601f274bb342.png)


## おわりに

デザインに関わる人が考えた色使いなので綺麗ですね。他にもカラーパレットが作れそうなwebサイトがありましたら教えてほしいです。HTML中にカラーコードを出力しているのが良いです...。

### 参考

* [hadley/rvest](https://github.com/hadley/rvest)
* [rvest すげえ。#rstatsj - Qiita](http://qiita.com/hoxo_m/items/264b45684fcb657cf285)
* [karthik/wesanderson](https://github.com/karthik/wesanderson)... いんすぱいあ
Octopressで最後に編集した記事だけをgenerate

# はじめに

以前、[Octopressのpreviewを高速化する](http://gam0022.net/blog/2013/09/28/speed-up-octopress-site-generation/)という記事を書きました。

この記事では、`rake isolate` と `rake integrate` を使って特定の記事だけを `generate` することによって、
`rake generate` を高速化していました。

しかしながら、この方法は手順が複雑で使うコマンドが多く、面倒だし使い方を忘れるという問題がありました。

通常、最後に保存したファイルを generate することが多いので、これを利用してもっと便利な Rake の task を作ります。

<!--more-->

# rake generate_only

`Rakefile` に `generate_only` という task を追加します。頻繁に使うので、`go`というaliasも定義しました。

使い方は、`rake generate_only [filename]` という形式で使います。
`filename`を省略すると、最後に保存されたファイルが自動的に設定されます。

```rb:Rakefile
# usage rake generate_only[my-post]
# thanks to http://rcmdnk.github.io/blog/2013/12/06/blog-octopress-rake/
desc "Generate only the specified post (much faster)"
task :generate_only, :filename do |t, args|
  if args.filename
    filename = args.filename
  else
    filename = Dir.glob("#{source_dir}/#{posts_dir}/*.#{new_post_ext}").sort_by{|f| File.mtime(f)}.last
  end
  puts "## Test build for #{filename}"
  puts "## Stashing other posts"
  Rake::Task[:isolate].invoke(filename)
  Rake::Task[:generate].execute
  puts "## Restoring stashed posts"
  Rake::Task[:integrate].execute
end
task go: :generate_only
```

## 補足

`rake generate_only` を実行した後に `_stash` にファイルが退避されたままだとしたら、
Octopress が古いために、次のパッチが入ってない可能性が高いです。

- [[BUGFIX] Unbreak generate_only task.](https://github.com/imathis/octopress/pull/682)

# 参考

以下の記事がとても参考になりました！ありがとうございます！

- [Octopressのgenerate_onlyをモット便利に2](http://rcmdnk.github.io/blog/2013/12/06/blog-octopress-rake/)

# ブログやってます。

全く同じ内容ですが、こちらにもポストしました。

- [Octopressで最後に編集した記事だけをgenerate - gam0022.net](http://gam0022.net/blog/2014/12/07/octopress-rake-generate-only/)
Confluenceのクイックサーチの動作を少し調整する


## やりたいこと / 理由

Confluenceの検索画面や検索フォームから検索をする場合。
指定したいキーワードを半角スペースで区切って入力すると、（なぜか）『AND』検索ではなく **『OR』検索** としてサーバサイドで処理されてしまいます。

残念ながら、この動作は、エンドユーザにとって直感的ではありません...。
『キーワードを複数入力したら、検索結果が絞り込まれる』ことを期待しているのに、逆に『検索結果が増える』という動作になってしまいます。

そこで、とにかくクイックサーチだけでも、もうちょっと直感的に操作できないかと、フロントを調整してみました。

## 調整項目

### 変更すること / クイックサーチEnter時の挙動

- クイックサーチのフォーム上に、複数キーワードをスペース区切りで入れてEnterしたら、サーバに送信する際に実際に送信するパラメータを調整する。（JavaScriptを利用）
- 半角スペースを" AND "に置き換え、文字列を連結させてる。
- サーバサイドには"AND検索" になるようなリクエストを送信するようにする。

### 変更しないこと

- クイックサーチの見た目に変更は加えない。
- Confluenceのサーバサイドの変更は行わない。（ソースコードの修正なども行わない）
- 検索時のパラメータの条件も調整を行わない。

検索機能は、画面上のUIだけではなく、APIなどでももちろん利用しているので、そこには手を出しません。
あくまでも、送信時に『AND検索』になるように、サーバに投げるパラメータをJavaScriptで調整してあげる、という動作になります。

## 調整方法

Confluenceでは、管理画面 → カスタムHTMLという場所で、追加のHTMLを加えたり、JavaScriptで要素を加えたりできます。
こちらを利用して、クイックサーチフォーム（#quick-search-query）の挙動を調整します。
だいぶ荒いコードですが、こんな感じ。

```source:JavaScript
<script>
AJS.toInit(function(){
  
  // TODO:デフォルトのフォームに、AND/OR切り替えのボタンかプルダウンあるといいかも
  //      デフォルト動作で検索したい場合があるので。
  
  // quick searchでEnterされた時のみの動作
  AJS.$( '#quick-search-query' ).keypress( function ( e ) {
    if ( e.which == 13 ) {
      
      var queryString = AJS.$('#quick-search-query').val();
      
      // 全角スペースは無理矢理半角に変換
      queryString = queryString.replace(/　/g," ");
      if (queryString.indexOf(" ")!=-1) {
        var array = queryString.split(' ');
        
        // ダブルクォートで囲むと、その文字列を分かち書きしないで検索。
        AJS.$('#quick-search-query').val(array.map(function(p){ return '"' + p + '"'; }).join(' AND '));
 
      } else {
        AJS.$('#quick-search-query').val('"' + queryString + '"');
      }
        return true;
      }
  });
});
</script>

```

### 結果

上記の結果、明示的に”AND検索" という条件を付けて、検索を実施となります。
サーバ側から返って来た結果画面の上部には、”キーワード１" AND "キーワード2" といったフォームが表示されます。

※ここから先は、とくに変更を加えません。とにかく『ANDで繋げれば、AND検索になるのね』ということが、その後利用する側に判ってもらえればいいかな...という感じです。
jQueryでdc:titleのような : (コロン) があるXMLタグの中身を読む

*単純なのですが、ハマったので記事にしてみます。*

##jQueryでコロン付きのXMLエレメントが読めない

RSSなど、AJAX経由でXMLで読み出すことがあるかと思います。
その場合、たとえばこんなコード。

**XML**

```
<dc:title>タイトル</dc:title>
```

**jQuery**

```
$( xml ).find( 'dc:title' ).text();
```

これでは読み出せません。

##解決策

こうすれば読めます。

**jQuery**

```
$( xml ).find( 'title, dc\\:title' ).text();
```

##かんたんな説明

###コロン付きのタグについて

XML名前空間に基づいたものです。
詳しくは[こちら](http://www.atmarkit.co.jp/fxml/ddd/ddd001/ddd001-namespaces1.html)をお読みください。

###jQueryではなぜ読めない？

コロンはjQueryではフィルタの役割を担っているため、そのままでは使えません。

###FirefoxとIEの場合

バックスラッシュ2つでコロンをエスケープします。

**jQuery**

```
$( xml ).find( 'dc\\:title' ).text();
```

###ChromeとSafariの場合

XML名前空間を使ったエレメントの場合、大域属性のほうを無視して読めるようです。

**jQuery**

```
$( xml ).find( 'title' ).text();
```

###すべてのブラウザで読む場合

"," で区切ることで、OR検索します。解決策と同じです。

**jQuery**

```
$( xml ).find( 'title, dc\\:title' ).text();
```
RubyMine で Git を使う


#はじめに
会社のメンバーの影響もあり、最近 RubyMine へ移行しました。
これまで、SublimeText + iTerm で主に開発していたのですが、移行して最初に戸惑ったのが、Gitを使うワークフロー。

いろいろ試行錯誤？もしながらもなんとか回るようになってきたので、まとめておきたいと思います。

なお、他にも良い方法やテクニックあると思いますので、Tipsあればコメントいただければと思います！

なお、普段は Mac と Ruby on Rails で開発をしています。

#基本設定
まず、プロジェクトのディレクトリを RubyMine で Open すれば、ほぼ自動的に Rails のプロジェクトとして認識してくれます。
.gitconfig なども読んでくれて、よろしく認識してくれます。

RubyMine は内部に ssh クライアントを持っているのですが、現在あまりよろしくないことがおきたりするようで、OSX にインストールしてある ssh クライアントを使うように指定しておきます。

Preferences の Version Control の、Git 項目にある SSH executable を、`Native` にしておきます。

![Preferences.png](https://qiita-image-store.s3.amazonaws.com/0/15529/08e14528-c9fd-9288-9b76-533f267c5e01.png "Preferences.png")

#ファイル編集後の確認
##まず一覧する
まとまった単位でコードを編集したら確認しますよね。
で、`cmd + 9` で、変更分を一覧表示します。

`git status` 相当です。

![blogs_controller_rb_-_yuk-blog_-____ror_yuk-blog_.png](https://qiita-image-store.s3.amazonaws.com/0/15529/3db84825-6145-277c-d586-97351a484c32.png "blogs_controller_rb_-_yuk-blog_-____ror_yuk-blog_.png")



##新規ファイルを Git に追加
行カーソルを、`Unversioned Fils`へ移動させて、`cmd + opt + a` で追加されます。`git add`相当です。

![blogs_controller_rb_-_yuk-blog_-____ror_yuk-blog_ 2.png](https://qiita-image-store.s3.amazonaws.com/0/15529/57d70e91-9fb8-3d67-3a42-3f5e61d77030.png "blogs_controller_rb_-_yuk-blog_-____ror_yuk-blog_ 2.png")


こんな感じで、グリーンになります。

![blogs_controller_rb_-_yuk-blog_-____ror_yuk-blog_ 3.png](https://qiita-image-store.s3.amazonaws.com/0/15529/d5db3143-89bd-2706-e7a3-5afe74320af7.png "blogs_controller_rb_-_yuk-blog_-____ror_yuk-blog_ 3.png")


##diff で確認
差分の確認は、`cmd + d` でビジュアルに！
ここで、次のファイルを確認したいときは、`cmd + shift + ]`で切り替えて確認していきます。

![_Users_yukiya_ror_yuk-blog_config_routes_rb.png](https://qiita-image-store.s3.amazonaws.com/0/15529/ba3e0c4c-23db-1e72-db2b-ffb0d74457af.png "_Users_yukiya_ror_yuk-blog_config_routes_rb.png")


ひととおり、こんな感じで確認していきます。

#Commit ＆ Push
##Commit
`cmd + k` でコミットダイアログが表示されます。
ここでコメントを記述します。

その後、右下の`commit`ボタンで確定です。
（ここ、キーボードショートカットないのかな…）

![Commit_Changes_と_blogs_controller_rb_-_yuk-blog_-____ror_yuk-blog__と_RubyMine_で_Git_を使う.png](https://qiita-image-store.s3.amazonaws.com/0/15529/69075855-deb3-a22c-e7aa-eea574940002.png "Commit_Changes_と_blogs_controller_rb_-_yuk-blog_-____ror_yuk-blog__と_RubyMine_で_Git_を使う.png")

また、`commit & push` のボタンも使えるので、必要に応じて使い分けましょう。

##Push
commit 後、cmd + shift + k で Pushダイアログが表示されるので、Push ボタン押下で確定です。

![Push_Commits.png](https://qiita-image-store.s3.amazonaws.com/0/15529/75d7d842-1cbf-879b-9393-c42a99d2ad59.png "Push_Commits.png")


#最後に
基本的に、このような流れで普段の開発にRubyMineで回るようになってきました。
他にも、branch操作やlog確認などありますが、追々勉強して追記できたらと思っています。


まだまだ試行錯誤中ですが、目標はRubyMineのみで回すこと！
これからはifconfigではなくipを使う時代だ！

新しいfedoraを使うと、ifconfigコマンドが無いのでどのようにしてIPアドレスを確認すれば良いか分からなかった

ifconfigなどのnet-tools系のコマンドはobsoleteになってしまったらしく、これからはiproute2系のipコマンドを使うようになるようだ

## コマンド比較表

net-tools	|iproute2
----------------+---------------
ifconfig	|ip l (ip link)
ifconfig -a	|ip a show (ip addr show)
ifconfig eth0 up	|ip link set eth0 up
netstat	|ss
netstat -i	|ip -s link
netstat -l	|ss -l
netstat -r	|ip r (ip route)
route [add｜del]	|ip route [add｜del]
route -n	|ip route show
arp -n	|ip n (ip neighbor)

## 参考
net-tools | The Linux Foundation
http://www.linuxfoundation.org/collaborate/workgroups/networking/net-tools

今までありがとう「ifconfig」 - DMMツチノコブログ
http://tsuchinoko.dmmlabs.com/?p=1387
AWS Lambdaさわってみたみた

AWS Lambdaについて学んだよー

##料金
AWS Lambdaは、リクエスト数と、コードが実行される時間に基づいて課金されます。

* 無料枠(月毎)
 * 100万リクエストまで
 * 40万GB/secondの実行時間

無料枠終了後は、100万リクエスト（1リクエストあたり0.0000002ドル）あたり0.20ドル
実行時間の対象範囲は、リクエストが終了するまでか返したりするまで。
コードが実行を開始する時間から計算し、最も近い100ミリに切り上げられます。
GB/second毎に0.00001667ドルが課金されます。

また、価格は機能に割り当てるメモリの量に依存します。

* 使用メモリ量によって対応する無料時間枠一覧こちら
http://aws.amazon.com/jp/lambda/pricing/



##機能概要

他のAWSサービスのイベントに応答して、Lambda functionと呼ばれるカスタムコードを実行できるサービス。
連携できる他のサービスは以下の通り、

* S3(ストレージサービス)
* DynamoDB(フルマネージドNoSQLDB)
* Kinesis(フルマージドデータストリーミング)



###プッシュモデル
例えば、以下のようなことが可能

* S3の通知設定から直接Lambda function呼び出せる
* アプリケーションからLambda functionを呼び出すことも可能。

プッシュモデルは、実行順序付けられていないモデル。つまりどのfunctionが先に実行されるかは分からない。

###プルモデル
KinesisStreamやDynamoDBのストリームからイベントをプルするAWSLambdaを設定することができる。
これにより、AWSLambdaはストリームから更新を引き出し、Lambda functionを呼び出せる、これはプルモデルと呼ばれる

プルモデルは、ストリームに公開された順序でイベントを処理する。

###アクセス許可
デフォルトでは、すべてのAWSリソースはプライベート。
リソースの所有者だけ（リソースを作成したAWSアカウント）、リソースにアクセスすることが可能。
Lambda functionの実行時に、それぞれのAWSのリソースにアクセスするためのアクセス許可権限が必要になるので注意。
IAMroleを経由してAWSLambdaにこれらの権限を付与できる。