OmniAICreator/Qiita-1.07M huggingface dataset:
IntelliJのIDEをある程度日本語化しよう(Android Studio, PhpStorm等)

[Android Studio 日本語化、簡単な方法ですよ | 所感 ~android~](http://thjap.org/android/android-software/android-studio/1395.html)さんより。

ファイルをダウンロード
==================

[Pleiades - Eclipse プラグイン日本語化プラグイン | MergeDoc Project](http://mergedoc.sourceforge.jp) から必要なファイルをダウンロード。

![スクリーンショット 2014-02-12 12.18.40.png](https://qiita-image-store.s3.amazonaws.com/0/25728/8c552a94-0f94-c5db-b232-343e08c90b30.png)

配置
==================

ダウンロードし中身を見ると、`pleiades/plugins/jp.sourceforge.mergedoc.pleiades/`
というフォルダ構造になっているので、以下にファイルをコピー。

Android Studio
---------------

* /Applications/Android Studio.app/plugins/jp.sourceforge.mergedoc.pleiades/

PhpStorm
-----------

* /Applications/PhpStorm.app/plugins/jp.sourceforge.mergedoc.pleiades/


設定ファイルに記述
==================

Android Studio
-------------

```bash:/Applications/Android&nbsp;Studio.app/bin/idea.vmoptionsに追記
-javaagent:../plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar
```

PhpStorm
-----------


```bash:/Applications/PhpStorm.app/bin/idea.vmoptionsに追記
-javaagent:../plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar
```

半分くらい日本語化された
==================

Android Studio
----------------

![スクリーンショット 2014-02-12 12.27.24.png](https://qiita-image-store.s3.amazonaws.com/0/25728/c312531b-4f60-4605-d172-89684d69b2a8.png)

phpstorm
----------------

![スクリーンショット 2014-02-12 12.36.21.png](https://qiita-image-store.s3.amazonaws.com/0/25728/9c06555a-e344-5ec1-6762-178e0bc18bb2.png)
web制作で使うwget

### ディレクトリ構造を保ったまま、HTMLのみをダウンロード

```shell-session
wget -x http://hoge.com/
wget -x http://hoge.com/report/
wget -x http://hoge.com/service/
wget -x http://hoge.com/portfolio/
wget -x http://hoge.com/press/
wget -x http://hoge.com/company/
wget -x http://hoge.com/recruit/
```

### HTMLページを表示するのに必要なリソース一式を取得
```
wget -p http://hoge.com/
```
※css内で@importしているファイルまで取得する場合はこのオプションが必要

### サイト丸ごとダウンロード
```
wget -r http://hoge.com/
```

### リンクチェック
```
wget --spider --recursive --no-directories --no-verbose http://hoge.com/
```

### ベーシック認証
```
wget -p --http-user={ID} --http-passwd={PW} http://hoge.com
```
`!`などの記号は`\!`のようにエスケープする

### ユーザーエージェント（iOS6）

```
wget --user-agent="Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5376e Safari/8536.25" http://hoge.com
```

### 別ドメインのファイルも取得
```
wget -p -H  http://m.hoge.com/
```

### 特定ディレクトリ以下を全てダウンロード
```
wget -r -np http://hoge.com/fuga/
```

### 拡張子を指定
```
wget -A jpg,gif http://hoge.com/fuga/
```

### 拡張子を除外
```
wget -R css http://hoge.com/fuga/
```
EmacsからGuake Terminalにコマンドを送る

[EmacsからiTermにコマンドを送る - $shibayu36->blog;](http://shibayu36.hatenablog.com/entry/2014/02/10/174424)の`Guake Terminal`版です。

`execute-on-guake`でコマンドを送り、`toggle-guake`で`Guake Terminal`の表示をトグルします。

```el
(defun execute-on-guake (command)
  "Execute `command' on Guake Terminal."
  (interactive "MCommand: ")
  (start-process-shell-command "guake" nil (format "guake -e '%s'" command)))

(defun toggle-guake ()
  "Toggle visibility of Guake Terminal."
  (interactive)
  (start-process-shell-command "guake" nil "guake -t"))
```

`Guake Terminal`が起動していないと一回のコマンドではうまく行かないので、`Guake Terminal`をスタートアップ時に起動させておくといいと思います。

現在`Emacs`で開いているファイルのディレクトリに移動するのは、`cd-on-guake`でできます。

```el
(defun cd-on-guake ()
  "Move to current directory in Guake Terminal, then show Guake Terminal."
  (interactive)
  (execute-on-guake (format "cd %s" default-directory))
  (toggle-guake))
```
paperclipでS3にアップするとき「AWS::S3::Errors::PermanentRedirect」なんて怒られたら


## そもそものはじまり

paperclip、便利ですよね。
s3と組み合わせるとクラウド上におけたりしてもっと便利です。

でも設定間違えるとなかなかアップできなくてもどかしい思いをしたりします。今回は以下のエラーでつまづいたので対処法を。

```
AWS::S3::Errors::PermanentRedirect (The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint.):」
```

要するにendpointのURL間違っているよーってことです。

paperclipのちょっと前のバージョンでは「s3.amazon.com」直書きだったようですが、新しいものからは以下の設定が必要になります。

## s3にアップする設定を用意する


そこにはこんな感じで書きます。

```yml
  has_attached_file :file, 
                    :storage => :s3,
                    :s3_credentials => {
                      :access_key_id => S3KEY,
                      :secret_access_key => S3SECRET,
                      :s3_host_name =>  "s3-ap-northeast-1.amazonaws.com"
                    }
```

:s3_host_nameが必要です。
これをわすれるとs3.amazon.comが指定され、タイトルのようなエラーが発生してしまいます。

あとはいつもどおりフォームをつくってアップしてみてください。
CentOS6にAWSコマンドラインインターフェースをいれる手順メモ

最初にyumでpython環境を整えます。
epelリポジトリは導入済みが前提です。

```shell-session:command
yum -y install python python-devel --enablerepo=epel
```

pythonで公式に提供されているsetuptoolsをyumでいれます。
これでpythonのeasy_installコマンドがインストールされます。

```shell-session:command
yum -y install python-setuptools
```

easy_installコマンドを使ってpipコマンドをインストールします。

```shell-session:command
easy_install pip
```

pipコマンドまで入れば後はAWS公式ページの通りpipコマンドでawscliをインストールします。

http://aws.amazon.com/jp/cli/

```shell-session:command
pip install awscli
```

以上でインストールは完了します。
環境変数の設定などは別途設定が必要です。

こちらをご覧ください。
http://qiita.com/mychaelstyle/items/e09309104dd6daa7c01b
自マシンの共有フォルダを確認するコマンド

```bat:
>net share

共有名       リソース                            注釈

-------------------------------------------------------------------------------
ADMIN$       C:\windows                      Remote Admin
C$           C:\                             Default share
D$           D:\                             Default share
IPC$                                         Remote IPC
コマンドは正常に終了しました。
```

#参考
- [デフォルト共有（管理共有）を停止させる方法 － ＠IT](http://www.atmarkit.co.jp/fwin2k/win2ktips/281stpdefshare/stpdefshare.html)
意外と知らない古代コマンド(pushd/popd)


#概要


昔と違ってtabで高速でパスが補完されるのでそんなに需要が減ってきた気もするが、すごい長いパスの時には使えるのではないかと思ったので1976年([wikipediaより](http://en.wikipedia.org/wiki/Pushd_and_popd))より使われているpushd/popdを上げてみる。

|command|summary|
|:---|:---|
|pushd|ディレクトリ位置の記憶|
|popd|記憶したディレクトリへ戻る|
|dirs|記憶したディレクトリを確認|

#実行

###ディレクトリ位置の記憶(pushd)

```bash:pushd
$ pwd
/home
$ cd /tmp
$ pushd `pwd`
/tmp /tmp
$ dirs
/tmp /tmp
$ cd /usr/local
$ pushd `pwd`
/usr/local /usr/local /tmp
$ cd /var/log
$ pushd `pwd`
/var/log /var/log /usr/local /tmp
```

###記憶したディレクトリへ戻る(popd)

```bash:popd
$ pwd
/var/log
$ popd
/var/log /usr/local /tmp
$ pwd
/var/log
$ popd
/usr/local /tmp
$ pwd
/usr/local
$ popd
/tmp
$ pwd
/tmp
$ dirs
/tmp
```

#便利オプション

`-v` をつけることでいくつ目のディレクトリか見やすくなる

```bash
$ dirs -v
 0  /usr/local
 1  /usr/local
 2  /tmp
```

いっぱい記憶した時にいちいちpopdで戻るのが面倒！一気に戻りたいときには`pushd +[戻りたい数]`が便利

```bash
$ dirs -v
 0  /var/log
 1  /var/log
 2  /usr/local
 3  /home
 4  /tmp
$ pushd +2
/usr/local /home /tmp /var/log /var/log
$ pwd
/usr/local
```

#まとめ

aliasもちゃんと使ってあげるともっと便利になるかもしれない
【開発効率アップ↑】Xcodeでよく使うショートカットまとめのまとめと解説

「ショートカットを制するものは開発を制す」だそうです。
一つ一つは微々たる時間の節約でも毎日何度も使うと、膨大な時間が節約出来ることを
考えると、そうかもと思います。

今回は個人的に使う頻度順にまとめてみました。13inchのMBAで開発をしており、作業スペースが狭いと感じることが多いので、それを広げるショートカットが多めです。

こんなのも良く使うというご指摘あれば追加致しますので宜しくお願い致します。
その他間違いのご指摘、ご意見等頂けますと幸いです。

★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

## Cmd + R

- ビルドしてラン

## Cmd + .

- ストップ。ランの状態の終了。
- シュミレーターで起動しているアプリを落としたい時によく使います。

## Cmd + Q

- シュミレーターの終了
- シュミレータは起動するのに、アプリは立ち上がらない・立ち上がりが異様に遅いことって多くないですか？そんな時は終了してまたランすると、上手くいくことが多いです。

## Cmd + Shift + K

- クリーン
- クリーンとは？：ビルド時に作成される様々なファイルを削除する処理
- エラー発生→実装は間違っていない→とりあえずクリーン

## Cmd + Ctr + ←

- 戻る的な動作のショートカット。ファイルをまたいで色々移動した後に、前に選択していた箇所（別のファイル）に戻りたいという時によく使います。

## Cmd + Ctr + →

- 進む的な動作のショートカット。

## Ctr + E

- 行の最後に移動

## Ctr + A

- 行の先頭に移動

## Cmd + Shift + → or Ctr + Shift + E

- 現在のカーソルの位置からその行の最後までを選択
- 一気に選択してコピペや削除した時に使います。

## Cmd + Shift + ←

- 現在のカーソルの位置からその行の最初までを選択
- 一気に選択してコピペや削除した時に使います。

## Cmd + Shift + F

- プロジュクト内検索
- 検索結果を一つずつ全て確認した場合は、検索結果表示画面で↑と↓で該当箇所を移動します。

## Cmd + F

- ファイル内検索
- Returnで該当箇所の次に移動。

## Cmd + Ctr + ↓ or ↑

- ヘッダーファイルと実装ファイルの切替

## Ctr + 6

- 現在のファイル内のプロパティとメソッドを表示します。
- 素早くメソッドを検索して移動したい時に使います。
- 合わせてpragmaの使い方を勉強すると役に立つかなと思います。

## Cmd + B

- ビルド

## Cmd + 0~7

- ナビゲータエリアの表示/非表示切替は０。
- プロジェクトナビゲータを表示したい時には１。小さいアイコンをクリックしてファイル一覧を表示して、という作業は面倒臭いので良く使います。
- 4のイシューナビゲータの表示もデバッグをしている時に良く使います。

## Ctr + 5

- 選択中フォルダ内のファイルを一覧を表示します。
- 上下でファイルの選択を移動して、Returnで選択出来ます。
- 他にもCtr + 1~6は、まだ頻繁に使えてはいないのですが、便利機能があります。

## Cmd + Opt + 0~7

- 0でユーティリティエリアの非表示をよくします。使う時と使わない時の差が激しいので、基本非表示にして使うときは0で出すという使い方です。
 
## Cmd + Shift + Y

- デバッグエリアの表示/非表示切替。
- 使う時と使わない時の差が激しいので、基本は表示せずです。デバッグモードでランすると勝手に表示されるので、それを隠す為に使う時が多いです。

## Cmd + Ctr + Y

- ブレークポイントで止まった処理をコンティニュー
- ステップイン、ステップアウト等のショートカットもありますが、ここでは割愛

## Cmd + Shift + O

- プロジェクト内のファイル、メソッド、変数を検索

## Ctr + K

- カーソル位置から行端までを切り取り。

## Cmd + Click

- 選択したオブジェクトの定義に移動。
- この変数の型とかメソッドの実装なんだっけの時によく使います。

## Cmd + T

- タブの追加。
- タグは慣れるとすごく便利で、特にStoryBoardファイルは開いてからちゃんと表示されるまでに少し時間が掛かる(1.7GHz Intel Core i7・4GB 1600 MHz DDR3環境)ので、タブで開いといて、編集時にタブ移動のショートカットで移動することが多いです。

## Cmd + Shift + [ or ]

- タブの移動。
- ちなみにSafariのタブをこれで移動出来ます。ただ、Safariのタブは[]の代わりに→←でも移動出来る（カーソルが文字列を非選択の状態で）のに対して、Xcodeは[]でしか移動出来ないようです。

## Cmd + Opt + C

- コミット

## Cmd + Return

- コミットのコメント挿入画面（コミット実行画面？）で、コミットの実行
- カーソルでコミットボタンまで移動してクリックが面倒臭いので、これで済ましています。取り

## Cmd + Shift + J

- 現在編集中のファイルをプロジェクトナビゲーターで選択。
- その後、↓↑で選択ファイルの移動が出来ます。

## Ctr + I

- インデントの調整

## Cmd + /

- コメントアウト

## Cmd + Ctr + J

- 定義に移動。
- 慣れてくるとCmd + Clickよりもこちらの方が早い気がします。 

## Opt + Click

- Descriptionの表示

## Opt + Double Click

- 選択オブジェクトに関するDocumentを表示。


冒頭にも書かせて頂きましたが、まだまだ便利ショートカット等はたくさんあると思います。
皆様がよく使っているのに、書かれていないもの等あれば、ご指摘頂けましたら幸いです。
宜しくお願い致します。
「Re:haskellの数値のなんか」+「Rational と Double の考察」

yomi322 さんの[「haskellの数値のなんか」](http://qiita.com/yomi322/items/bf5b1d872b2caed6d2e2)について、自分なりに考えてみました。

本来、yomi322 さんが目指したのは、

　1. 2つの引数に、"Integer", "Rational", "Double" のどれが来ても加算することができる。
　2. 引数の種類によって、返り値の型を自動的に決める。

の2つだと思います。

ところが `2.` を満すのがかなり面倒くさい（笑）

そこで、`2.` の条件を緩和して、返り値の型は人間が決めることにすれば、次のように
非常にシンプルになるんですけどね…。

```haskell
import Data.Ratio

-- 2つの引数を加算し、結果を Rational にする。
addToRational :: (Real a, Real b) => a -> b -> Rational
addToRational a b = toRational a + toRational b

-- 2つの引数を加算し、結果を Integer にする。（小数点以下は切り捨て）
addToInteger :: (Real a, Real b) => a -> b -> Integer
addToInteger a b = truncate $ addToRational a b

-- 2つの引数を加算し、結果を Double にする。
addToDouble :: (Real a, Real b) => a -> b -> Double
addToDouble a b = fromRational $ addToRational a b


main :: IO ()
main = do
  let x = 3 :: Integer
      y = 3%4
      z = 2.0 :: Double
  print $ addToInteger x x
  print $ addToRational x y
  print $ addToDouble x z
  print $ addToRational y y
  print $ addToDouble y z
  print $ addToDouble z z
```

myuon_myuon さんは[「Re:haskellの数値のなんか」](http://qiita.com/myuon_myon/items/0a87c1e2a24170e59c38)で引数を Double に変換してから計算をしていますが、このコードでは引数を一旦 Rational に変換してから計算をしています。

なぜ、このような方法をとったかというと、「Double を Rational に変換してから足したものを再び Double に変換しても、誤差は浮動小数点数の計算の誤差でしかありませんが、Rational を Double に変換してから足したものを再び Rational に変換すると、誤差が大きくなることがある」からです。

例えば、次のコードを見てください。

```haskell
import Data.Ratio


a = 1%3
b = 1%7

rr = a + b                      -- Rational をそのまま足したもの
rdr = toRational (a' + b')      -- Rational を Double に変換して足したもの
  where
    a' = fromRational a :: Double
    b' = fromRational b :: Double


c = 1 / 3 :: Double
d = 1 / 7 :: Double

drd = fromRational (c' + d') :: Double -- Double を Rational に変換して足したもの
  where
    c' = toRational c
    d' = toRational d

dd = c + d                             -- Double をそのまま足したもの
```

結果は次のようになりました。

```
*Main> rr
10 % 21
*Main> rdr
4289142502257615 % 9007199254740992
*Main> drd
0.47619047619047616
*Main> dd
0.47619047619047616
```

drd と dd は同じ結果ですが、rr と rdr は全く違った結果になっています。

これは Double から Rational の変換は誤差を生じないけど、Rational から Double の変換の際には Double の有効桁数を越えた部分が切り捨てられるからです。
RubyMineでGo To Declarationできないときの対処法

RubyMineでcommand+クリックしてもGo To Declarationしてもジャンプできなかったので困った。以下のようにしたら治りました。

`File → Invalidate Caches / Restart...`

公式は英語だけどけっこう情報が豊富だった。Googleで検索するよりこっちのほうが効率よさそう。

## 参考文献

* [&#39;Go To Declaration&#39; not working with New Projects : RUBY-13891](http://youtrack.jetbrains.com/issue/RUBY-13891)
[android-ndk]ndkでのdlopen()

Androidでは、sdcard内(/mnt/sdcard/xxx)等はfopen()ができるが、dlopen()してしまうと、
<pre> Operation not permitted </pre>
となってdlopen()できない

dlopen()するときは、soファイルを libsフォルダ以下に置き、パスを
<pre>/data/data/(パッケージ名)/lib</pre>
で指定すれば、dlopen()できる。
テキストフィールドがEnterキーでサブミットされるのを防ぐ


※コメントの指摘を修正済みです。

HTMLではForm内にテキスト一行入力系のフィールドが一つだった場合、そこでEnterキーを押すとSubmitされる仕様になっている。

詳しい仕様に関しては以下を参照：

- HTML5の仕様: http://www.w3.org/TR/html5/forms.html#implicit-submission
- 古くからの仕様: http://www.w3.org/MarkUp/html-spec/html-spec_8.html#SEC8.2 

具体的には、inputのtypeが
`text, search, url, tel, email, password, datetime, date, month, week, time, datetime-local, number`
のどれかだと、この挙動になる。


これが厄介なのは、Form内にチェックボックスやテキストエリアなどの他のフィールドがあってもテキストフィールドが一つだったらサブミットしてしまう事。意外とそういう風になっていることに気づかないのでデフォルトでオフにしておくことをオススメする。
逆に、検索Boxなどsubmitして欲しい場合もあるので、`allow_submit`というクラスを明示的につけるとデフォルトの挙動に戻るように設計する。

## デフォルトでこの挙動を解除する方法

常にロードされるJavascriptファイルないで以下のように記述する。

```javascript
$(function() {
  $(document).on("keypress", "input:not(.allow_submit)", function(event) {
    return event.which !== 13;
  });
});
```

自分のためにCoffeeScriptバージョンも書いておく。

```coffee
$ ->
  $(document).on "keypress", "input:not(.allow_submit)", (event) -> event.which != 13
```


こうすることで、allow_submitを明示的にクラス名に付けない限り、Enterキーでサブミットされることを防ぐことが出来る用になる。
gitの便利なalias


`status`の入力を短くします。

```Bash
$ git config --global alias.st status

$ git st
```

次は`branch`の入力を短くします。

```Bash
$ git config --global alias.b branch

$ git b
```

`log`を短くして更に`graph`と`decorate`付きにします。

```Bash
$ git config --global alias.l "log --graph --decorate"

$ git l
```

設定コマンドが正しいかどうかは`~/.gitconfig`ファイルの中身を見てください。

一応スクリプト化しておきました。[GitHub](https://github.com/shoma2da/utils)の`git/write_aliases.sh`です。
pod install で何やらconflictエラーが大量に出た

CocoaPodsで$ pod installしたときになにやら

```
[!] Pod::Executable pull

Auto-merging geos/3.4.2/geos.podspec

CONFLICT (add/add): Merge conflict in geos/3.4.2/geos.podspec

Auto-merging Typhoon/1.6.6/Typhoon.podspec
```

みたいなエラーがずらずら出たので、'pod install conflict'でググったら解決法が出た。
http://blog.cocoapods.org/Repairing-Our-Broken-Specs-Repository/

```
$ sudo rm -fr ~/.cocoapods/repos/master
$ pod setup
```
bowerへの登録方法


## 概要

http://bower.io/ への登録方法

## 初期化

コンポーネントがあるディレクトリで実行

```shell
bower init
```

## 設定編集

```bower.json
{
  "name": "",
  "version": "gitに登録したタグと同じものを記載",
  "homepage": "",
  "authors": [
    ""
  ],
  "description": "",
  "main": "主要なファイルを1つ、pathを書く",
  "keywords": [

  ],
  "license": "MIT",
  "ignore": [
	"ここに記述されたファイルはbower installしてもダウンロード物に含まれない"
  ]
}
```

## 登録

まず、Gitにタグを登録

```shell
git tag 0.1.0
git push origin master --tags
```

bowerに登録

```shell
bower register ${componentName} git://〜〜
```

## 更新

`bower.json`のバージョンと、gitのタグを更新するのみ

```shell
vi bower.json // versionを編集
git tag 0.1.1
git push origin master --tags
```
enchant.jsでのマップ作成と画像の切り取り

#マップを作る

##サンプル
[enchant.jsでマップを作る - jsdo.it](http://jsdo.it/matsui_q/enchant05/)

##書き方
```js
//MapコンストラクタでMapオブジェクト生成。引数にはタイルの幅と高さを指定
var map = new Map(16, 16);

//imageプロパティでマップで使用する画像を読み込み
map.image = core.assets['imgname.png'];

//loadDataメソッドでマップデータを読み込み
map.loadData([
  [1,1,1,1,1,1,20,20],
  [1,1,80,80,80,80,80,80]
]);

//CollisionDataプロパティにマップの当たり判定を設定
map.collisionData = [
  [1,1,1,1,1,1,0,0],
  [1,1,0,0,0,0,0,0]
]

//rootSceneにマップを追加
core.rootScene.addChild(map);
```

##Mapデータの構造
値にはタイルセットのフレーム番号（タイルを配置しない部分には「-1」）を指定。
複数のマップデータを指定して重ねることもできる。
Mapデータの生成は[EnchantMapEditor](https://github.com/wise9/enchantMapEditor)を使うと便利っぽい。

##当たり判定データ
「1」で当たり判定有り、「0」で当たり判定無し。
当たり判定があるか調べるには「hittest」メソッドを使う。

```js
if(map.hitTest(this.x + 16, this.y + 40)) this.x += 5;
```

#画像を切り取って表示する
画像の範囲を切り取って表示するにはSurfaceオブジェクトを使う。

```js
draw(image,dx,dy,dw,dh)
draw(image,sx,sy,sw,sh,dx,dy,dw,dh)

//例
object.draw(core.assets['imgfile.png'], 0, 16, 126, 64, 64, 64, 126, 64);
```

画像の（sx,sy）の位置から幅sw、高さshの領域を、
サーフィス(dx,dy)の位置に幅dw、高さdhで描画する。
EclipseでRobolectricのテスト環境を作る


最近触り始めたrobolectricについて、Eclipseから環境を作る手順を忘れないようにメモしておく。

## テスト対象のプロジェクトを作る
 - EclipseからAndroid Applicationのプロジェクトを作る

## Javaのプロジェクトを作る
 - robolectricはJVM上でテストするため、Javaのプロジェクトとして作る必要がある。
 
## robolectricのjarを追加する
 - robolectric-X.X-jar-with-dependencies.jarをダウンロードする（またはrobolectricおよび依存ライブラリのjarをそれぞれダウンロードする）
 - プロジェクト直下にlibsフォルダを作り、ダウンロードしたjarを置く

## build pathを設定する
 - Projectsからテスト対象のプロジェクトをbuild pathに追加する
 - Add JARsからrobolectricのjarをbuild pathに追加する
 - Add External JARsからSDKに含まれるandroid.jarをbuild pathに追加する
 - ライブラリの読み込み順序でrobolectricのjarが先に読み込まれるようにしておく
 - Add LibraryからJUnitをbuild pathに追加する

## ハマりポイント
 - Android Testプロジェクトを作ってしまう
  - robolectricはJVM上でテストするためのライブラリなので、Android Testプロジェクトだとうまく動かない
 - テスト対象がbuild pathに含まれてない
  - テスト対象のクラスなどが使えない
  - テスト対象は別プロジェクトなので忘れがち
 - android.jarがbuild pathに含まれていない
  - 各apiを参照する必要があるので、SDKに含まれるjarをbuild pathに含めないとうまく動かない
  - sdk/platforms/android-xx/ にある
 - android.jarが先に読み込まれてしまう
  - android.jar側の実装が読み込まれてしまい、robolectric側の実装が使えない

## 参考
- http://robolectric.org/eclipse-quick-start.html
gowebでresponseからdとsのキーを省きたいとき

gowebでRESTFUl APIを使ってwebアプリを作ったんですが、
gowebでそのままだと、responseのJSONにdとsのキーがデフォルトで入るようになってて、ちょっとだけ不便でした。

例 : goweb レスポンス

```json
{
  "d": { "mydata": true },
  "s": 200
}
```

みたいな感じで、そのままだとdにdataそのものが入り、sにstatusコードが入るようになってます。
これはこれで慣れれば使いやすいのかもしれませんが、生のJSONだけを取得したいときには不便。

省きたいときは以下のようにしましょう。

```go
apiResponder := NewGowebAPIResponder(goweb.CodecService, goweb.Respond)
apiResponder.AlwaysEnvelopResponse = false
goweb.API = apiResponder
```

参考 [https://github.com/stretchr/goweb/wiki/Controlling-API-output](https://github.com/stretchr/goweb/wiki/Controlling-API-output)
ORACLE OPLAN


## What's this?

OPatchにいつの間にか組み込まれていたツール。
パッチの適用する時の手順書を生成してくれる。
   
*  RACにPSUを適用する時
*  Exadataにバンドルパッチを適用する時
    
手順書が生成できる構成やパッチ種別はまだまだ限られている。
今後はシングル構成とかでも動くようになるのだろうか。

## What's good?

*  ほぼコピペでいけるレベルの手順を自動作成してくれる。
*  日本語の環境であれば日本語の手順も作ってくれる。
*  ロールバックの手順も生成してくれる。

オラクルのREADMEは基本的に英語なので和訳しなくてよいのは助かる。
生成されるのはHTML。以下サンプルイメージ。

![oplan](https://31.media.tumblr.com/093d1bb4e1201f27fdbfd0dd68c411d7/tumblr_inline_n0ubynsE181rbrz95.png)

## How to use

```
${ORACLE_HOME}/OPatch/oplan/oplan generateApplySteps [patch bundle directory]
```

正しく実行出来ていればこんな感じの出力となる。

``` SAMPLE
${ORACLE_HOME}/OPatch/oplan/oplan generateApplySteps /home/oracle/psu/17478514/

リクエストを処理しています...

次のファイルに取得されたログ・メッセージを確認してください: /u01/app/oracle/product/11.2.0/dbhome_1/cfgtoollogs/oplan/2014-02-12-01-03-51/log.txt

成功しました。

次のインストール手順のドキュメントに記載されている手順に従って、システムにパッチを適用してください:

適用手順(HTML)    : /u01/app/oracle/product/11.2.0/dbhome_1/cfgtoollogs/oplan/2014-02-12-01-03-51/ApplyInstructions.html
適用手順(テキスト)    : /u01/app/oracle/product/11.2.0/dbhome_1/cfgtoollogs/oplan/2014-02-12-01-03-51/ApplyInstructions.txt
```

使うのはgenerateApplyStepsだけど、一応シンタックスは以下。

```
usage: oplan  [-h] [-v] { generateSteps <patch> | generateApplySteps
             <patch> | generateRollbackSteps <patch> | saveConfigurationSnapshot
             <configXML> | configurationCompare <configXML1> [<configXML2>] }
             [-RACPatches <Comma separated list of patches to be applied to Database
             Homes>] [-GIPatches <Comma separated list of patches to be applied to Grid
             Infrastructure Homes>] [-NodeNumberPerReadme <Node Number for each readme
             file for a execution plan>]
 -GIPatches <gipatches>                       Comma separated list of
                                              patches to be applied to Grid Infrastructure Homes
 -MoveConfigToOH <MoveConfigToOH>             Database Home to migrate the
                                              config
 -NodeNumberPerReadme <NodeNumberPerReadme>   Node Number for each readme
                                              file for a execution plan
 -RACPatches <racpatches>                     Comma separated list of
                                              patches to be applied to Database Homes
 -h,--help                                    Prints help message.
 -logDir <logDir>                             Directory for logging and
                                              output
 -v,--version                                 Prints OPlan's version
                                              information.

generateSteps
    - パッチの適用およびロールバック手順を生成します
generateApplySteps
    - パッチの適用手順を生成します
generateRollbackSteps
    - パッチのロールバック手順を生成します
saveConfigurationSnapshot
    - 現在の構成情報をXMLファイルに保存します
configurationCompare
    - 変更がないか、2つのシステム構成を比較します
```

## 参考
[Oracle Software Patching with OPLAN](https://support.oracle.com/epmos/faces/DocumentDisplay?id=1306814.1)
awscli インストール

# MacBookAirにaws-cliをインストールする。

## インストール手順
まずpipをインストールしてからaws-cliをインストールすればOK

```
$ sudo easy_install pip
$ sudo pip install awscli
```


## 初期設定実施

各キーの情報はIAM作った時にダウンロードしている
credentials.csvに入っている情報を登録
リージョンは東京リージョン
アウトプットはtextとjsonとtableの３種類があります
今回はtextを選択しています

```
$ aws configure
AWS Access Key ID [None]: <あなたのアクセスキー>
AWS Secret Access Key [None]: <あなたのシークレットアクセスキー>
Default region name [None]: ap-northeast-1
Default output format [None]: text
```

## 補完機能
awsコマンドは引数が多くて覚えきれないので補完を入れます
これでtabキーでガシガシ補完できます

```
$ echo "complete -C aws_completer aws" >> ~/.bash_profile
$ source ~/.bash_profile
```
Tableau Desktop：ExcelなしでもExcelファイルを読み込む方法

先日参加した[ハンズオン](http://tableau.doorkeeper.jp)では、

> "営業部長に「地域ごとの売上を製品グループごとに見せてほしい」と言われた"

のようなミニ課題を解く形で[体験版](http://www.tableausoftware.com/ja-jp/products/trial)をさわれた。

Windows 8上で問題なく起動したけれど、サンプル使用のExcelファイルの読み込みできず何も始められない状態に。。どうやらExcelがインストールされていないからのようだ。Webサイトに用意されていたドライバをインストールしたらうまくいったので念のためメモ：

#### 現象
- [Tableau Desktop](http://www.tableausoftware.com/ja-jp/products/desktop)をインストールしたWindows上で
- Excelがインストールされていない状態で
- Tableau Desktop起動後の「データ接続」でExcelファイルを指定すると、以下が表示される

![111.png](https://qiita-image-store.s3.amazonaws.com/0/12779/4d051800-5f4b-c0ea-f306-7f203815ad5b.png)

#### 対処
- メッセージでの指示通りのサイト（日本語版は[ここ](http://www.tableausoftware.com/ja-jp/support/drivers)）へアクセス
- それらしいドライバを探す（"Excel"でページ検索）と以下の項目が見つかる

> Microsoft Access Database Engine 2007
> For connecting to:
> Excel 2007, 2010 and 2013
> Access 2007, 2010 and 2013

> Only required if you do not already have Office 2007, 2010 and 2013 installed, or if you have the 64-bit version of Office 2010 or Office 2013 installed.

- リンク先を開くと以下のページが開くので、ダウンロードしインストール
  - [2007 Office system ドライバ: データ接続コンポーネント](http://www.microsoft.com/ja-jp/download/details.aspx?id=23734)

![112.png](https://qiita-image-store.s3.amazonaws.com/0/12779/13210e74-f7a6-281a-8a72-710187abb7cd.png)

- この後Tableau Desktopを開くと、「データ接続」で問題なくExcelファイルを指定できる（Excelインストールは不要のまま）
Nginxインストールメモ

# コンパイルに必要なものをインストール
## Debian or Ubuntu
```
sudo apt-get -y install build-essential libc6 libpcre3 libpcre3-dev libpcrecpp0 libssl0.9.8 libssl-dev zlib1g zlib1g-dev lsb-base
```

## CentOS
```
sudo yum groupinstall "Development Tools"
sudo yum install -y openssl-devel pcre-devel zlib-devel
```

# 必要なディレクトリ作成
```
sudo mkdir -p /var/log/nginx
sudo chown -R <user>:<group> /var/log/nginx
```

# コンパイル
```bash
export CFLAGS="-O3 -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g"
./configure --prefix=/usr/local/nginx-1.4.4 \
--error-log-path=/var/log/nginx/error.log \
--pid-path=/var/run/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--http-log-path=/var/log/nginx/access.log \
--http-client-body-temp-path=/var/log/nginx/body \
--http-proxy-temp-path=/var/log/nginx/proxy \
--http-fastcgi-temp-path=/var/log/nginx/fastcgi \
--with-http_ssl_module \
--with-http_stub_status_module \
--with-http_realip_module \
--with-http_addition_module \
--without-http_userid_module \
--without-mail_pop3_module \
--without-mail_imap_module \
--without-mail_smtp_module
make
sudo make install
```

# symlink張る
簡単にバージョンアップできるように、symlinkを張っておく

```
sudo ln -s /usr/local/nginx-1.4.4 /usr/local/nginx
```
多段SSH越しにrsyncする方法

ちょっとしたTIPSです。

複数のSSHサーバー越しにrsyncする方法です。

事前に、sshでログインしてみて接続ができることを確認してください。

例えば、AAA, BBB越しにCCCというサーバーからディレクトリーDIRをコピーする方法です。

```bash
rsync -av --rsh="ssh -A AAA ssh -A BBB ssh" CCC:"DIR/" "DIR/"
```

rshオプションが便利ですね。
Chef-soloのrun_list、Vagrantfileのadd_recipe にcookbook名を渡す理由

## add_recipe に cookbook ファイル名を渡しても動く理由

例えば、barというcookbookの、default.rbレシピを実行したい時、以下のように記述します。

Chef-solo の attributes.json ファイル

```
{
   "run_list" : [
        "recipe[bar]"
   ]
}
```

Vagrantfile ファイル

```
  config.vm.provision :chef_solo do |chef|
    chef.cookbooks_path = "repo/site-cookbooks"
    chef.add_recipe "bar"
  end
```


どちらも、
- ```::XXXXX``` が無い場合は ```::default``` が使われる
という仕様になっています。

ですので、省略せずに記述する場合は以下のようになります。

```
{
   "run_list" : [
        "recipe[bar::default]"
   ]
}
```


## default.rb 以外のレシピファイルを実行したい場合

レシピファイル名をそれぞれ明示的に記述します。

例えば、「bar クックブックの recipe/hoge.rb レシピファイルを実行したい」場合は、以下のように記述します。

```
{
   "run_list" : [
        "recipe[bar::hoge]"
   ]
}
```


```
  config.vm.provision :chef_solo do |chef|
    chef.cookbooks_path = "repo/site-cookbooks"
    chef.add_recipe "bar::hoge"
  end
```
Androidゲーム開発事始め

#ゲームフレームワーク
ようやくAndroidゲームAtoZの２Dゲーム開発まで終了したので、ぼちぼち自作アプリを開発行きたいと考えている今日このごろです。
そんなわけで、先日本格的にゲームを開発の構想をしていたのですが、途中まで作ってみて見たのですが、やはり１から（タッチイベントの処理やら音楽再生、OpenGLでの描画のためのビューポート等の設定ほかいろいろ）自作していくとなると、簡単なゲームでも相当な時間がかかる上、使い回しのできるフレームワークの作成も難しいです。
サンプルゲームを作成した時に一緒に作成した簡易フレームワークを使用してもいいかもしれないのですが、せっかくなのでフリーのゲームフレームワークを使用してみようと考えました。

今回使用することにしたゲームフレームワークは、 **libGDX** です。
これもメジャーなゲームフレームワークで、２Dだけでなく３Dも扱え、外部ライブラリの使用も可、マルチプラットフォームに対応しているうえ、何よりJavaでコーディングができる、なかなか私向きなものです。
日本語での入門書やチュートリアルが無いので公式のチュートリアル等を読むのが少し疲れますが、軽く触ってみた感じなかな使い勝手は良さそうな感じです。


#libGDX導入
libGDXなのですが、[公式サイト](http://libgdx.badlogicgames.com/"公式サイト")から無料で入手でき、ダウンロードするとlibgdx....というzipファイルが保存されるます。
で、このファイル自体は解凍しないで構わないのですが、gdx-setup-ui.jarというファイルだけはコピーなりなんなりして別にしておきます。



![キャプチャ.PNG](https://qiita-image-store.s3.amazonaws.com/0/36379/18630944-19dd-a221-6343-89df07a93656.png)


こうして置かないと、プロジェクト作成の時にエラーが出てしまいます。

さて、つぎはプロジェクトを作成していくわけですが、まず上記のgdx-setup-ui.jarファイルを開きます。
すると下のようなセットアップツールが表示されます。



![キャプチャ2.PNG](https://qiita-image-store.s3.amazonaws.com/0/36379/391800dd-71c2-f7f8-aaa4-4be6d37b5065.png)


これのCreateをクリックすると次の画面が表示されます



![キャプチャ3.PNG](https://qiita-image-store.s3.amazonaws.com/0/36379/9b70f324-c0b7-3a20-06b5-cc87d311f26c.png)


プロジェクトやパッケージ、クラスの名前、プロジェクトを作成するフォルダ、プラットフォームを選択したら、LIBRARY SELECTIONで先ほどダウンロードしたlibgdx....zipファイルを指定します。

後はOpen the generation screenを選択し、Lanch!をクリックすると、指定したディレクトリにプロジェクトが作成されます。
あとは、使用しているIDEに作成されたプロジェクトをすべてインポートすれば終了です。デフォルトで外すことのできなくなっているプラットフォーム（core projectとandroid project）は必ずインポートするようにしてください。

とりあえず以上でlibGDXを使って開発を行う準備は終了です。



どうもlibGDXについて日本語で書かれているサイトが見つからなかったので簡単にですがまとめてみました。
まだわからないことだらけですが、次回からもこのフレームワークについて説明していきたいと思います。また、Androidで使用する基本的なAPIの説明なんかも学習したことのアウトプットがてらやっていこうかななんて考えてます。
ArchLinux@RaspberryPiでGmail経由のメール送信


自分用設定手順メモ。
下記のページを参考にしました。（何となくでしか理解していません）
http://linuxaria.com/pills/how-to-configure-postfix-as-smtp-relay-for-gmail-on-archlinux?lang=en

## 必要パッケージのインストール
```
pacman -Sy postfix ca-certificates
```

## Postfix設定ファイルの編集
```
nano /etc/postfix/main.cf
```

以下を追記。
hostname, domainnameは読み替え部分です。
元々書いてある該当行のコメントを外して編集してもOKです。

```txt:/etc/postfix/main.cf
myhostname = hostname # your host name
mydomain = domainname # your domain name
myorigin = $myhostname
mydestination = $myhostname, localhost.$mydomain, localhost
mynetworks = 127.0.0.0/8

relayhost = [smtp.gmail.com]:587

header_checks = regexp:/etc/postfix/header_checks

smtp_generic_maps = hash:/etc/postfix/generic
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/relay_password
smtp_sasl_security_options = noanonymous
smtp_use_tls = yes
smtp_tls_CAfile = /etc/postfix/cacert.pem
smtp_enforce_tls = yes

disable_dns_lookups = yes
```


## 設定ファイル編集

### Gmail認証設定
```
nano /etc/postfix/relay_password
```
以下の1行を書いてファイルを保存。

```txt:/etc/postfix/relay_passoword
[smtp.gmail.com]:587    youraccount@gmail.com:yourpassword
```

### /etc/postfix/header_checks
```
nano /etc/postfix/header_checks
```

下記の行を追記。
hostname, domainname, youraccountは読み替え部分です。

```txt:/etc/postfix/header_checks
/^To:.*@hostname.localnet/ REDIRECT youraccount@gmail.com 
/^From:(.*@domainname[>]*)/ PREPEND Reply-To:$1
```

### /etc/postfix/generic

```
nano /etc/postfix/generic
```

下記の行を追記。
例によってhostname, domainname, youraccountは読み替え部分です。

```txt:/etc/postfix/generic
root@domainname           youraccount@gmail.com
root@hostname.localnet    youraccount@gmail.com
user@hostname.localnet    youraccount@gmail.com
```

## 設定の反映等

次のコマンドを実行

```
postmap /etc/postfix/generic
postmap /etc/postfix/relay_password
cat /etc/ssl/certs/Equifax_Secure_CA.pem >/etc/postfix/cacert.pem
```

## Postfix起動

```
systemctl start postfix
```

## 自動起動設定

```
systemctl enable postfix
```

## テスト送信
```

echo "body of the message" | mail -r "youraccount@gmail.com" -s "TEST MAIL" to@email.com
```
C言語についてメモ


Objective-Cをやっていくにあたって、やはりC言語は必須。
てか、よく考えたらプログラムに興味を持ったのって、友達の家でC言語の本を開いて変数の仕組みを知ったのがきっかけだったことを思い出した。一周回った感ｗ

## コマンドライン引数の取り扱い

```console
$ ./hoge a.txt 3
```

みたいな形で指定した場合に、プログラム側での取り扱いについてです。

```c
// argcが引数の数
// argvが実際に渡された文字列（ただし、argv[0]は`./hoge`が入る）
int main(int argc, char *argv[]) {
	if (argc != 3) {
		// 想定している引数ではない
		return 0;
	}

	char *test = argv[1];

	printf("%s", test); // => a.txt
	
	return 0;
}
```

## 文字列を整数値に変換

上記のようにコマンドラインで値を受け取ると、すべて文字列扱いになってしまいます。
数字を指定してなにか処理をしたい場合は、文字列を数値にしなければなりません。

### atoiを使う

以下のようにすることで変換することができます。

```c
#include <stdlib.h>

// 略

char *arg = argv[1];
int i = atoi(arg);
```

## 配列数の計算

イディオム的な。

```c
int data[5] = {0, 1, 2, 3, 4};
int length = sizeof(data) / sizeof(data[0]);

// あるいは明示的に型を渡す
int length = sizeof(data) / sizeof(int);
```

##enum型の宣言について

enum型はややこいのでまとめておく。
enum型にはいくつか宣言の方法があって、以下のような感じ。

* enum E { e1, e2 };
* enum E { e1, e2 } e;
* enum { e1, e2 } e;
* typedef enum E { e1, e2 } OtherE;
* typedef enum { e1, e2 } E;

意味を理解すればなんてことはないですが、最初はなにがなんだか分かりませんね。
それぞれまとめると以下の意味になります。

##enum型の宣言

```enum1.c
//タグEを使って宣言
enum E { e1, e2 };

int main(void)
{
	enum E hoge = e1;
	printf("%d", hoge); //=>0
}
```

使うところを見てもらうと分かるけど、`enum E`という型で、`hoge`という変数名を宣言している。
値は列挙した`e1`を初期化時に代入している。


##無名enum型の宣言

次に無名のenum型。

```enum2.c
enum { e1, e2 };

int main(void)
{
	enum { e1, e2 } hoge = e1;
	printf("%d", hoge);
}
```

サンプルを見れば「無名」の意味が分かると思う。
最初の例は`E`というタグがついていたのでタグ名で型宣言できたけど、無名のため列挙した内容自体も型宣言に含めないとならない、という点が違う。


##宣言と同時に変数宣言

```enum3.c
enum { e1, e2 } hoge = e1;

int main(void)
{
	printf("%d", hoge);
}
```

こちらは無名enum型＋変数宣言の組み合わせ。
宣言すると同時に変数`hoge`に`e1`を代入している。
`= e1`を省略して宣言することもできる。（これは普通の変数宣言と同じ）

##typedefパターン1

```enum4.c
typedef enum E { e1, e2 } OtherE;

int main(void)
{
	OtherE hoge = e1;
	printf("%d", hoge); //=>0

	enum E fuga = e2;
	printf("%d", fuga); //=>1
}
```

こちらは`typedef`を使った型定義の例。
`int`などと同じように`OtherE`という型だけで宣言ができる。
さらに通常のタグ名による宣言も可能になっているのが分かると思う。
宣言と同時に変数宣言するパターンと若干、書式が似ているので分かりづらいけど、typedefを使った方は変数名ではなく型定義名になる。

##typedefパターン2

```enum5.c
typedef enum { e1, e2 } OtherE;

int main(void)
{
	OtherE hoge = e1;
	printf("%d", hoge); //=>0
}
```

こちらはタグ名を省略した形。
ただ、`typedef`により型定義されているので短く宣言できる。
基本的にはこれを使うので問題ないと思う。
RSSに登録したい英語圏の技術系ブログとかサイト

自分がRSSでフォローしているブログやサイトが結構溜まって来たので今回吐き出したいと思います。英語圏には良質のサイトやブログが沢山ありますが、あまり知られていないとサイトも多いと思うので、それらを紹介する意味で今回は英語圏に絞りました。

## Ruby (Rails)系
[GIANT ROBOTS SMASHING INTO OTHER GIANT ROBOTS](http://robots.thoughtbot.com/)
thoughtbotの会社ブログです。thoughtbotはアメリカでは結構有名な会社でコンサルや開発委託などをしている会社です。業務で実際に役立つRuby (Rails)に関しての記事が多いです。

[Signal vs. Noise](http://signalvnoise.com/)
37signalsのブログです。直接Ruby (Rails)中心のブログというわけではありませんがRailsの生みの親DHHがいる会社なので時々あります。純粋に技術系のネタよりも、働き方に対する考え方や会社の運営方法についての記事が多い気がします。

[The Carbon Emitter ](http://www.carbonfive.com/work)
Carbon Fiveの会社ブログです。最近までCarbon Fiveは知らなかったのですが、業務内容もブログ内容もthoughtbotに似ている気がします。Rails系のネタが時々あります。

[RailsCasts](http://railscasts.com/)
便利なGemやRailsで使えるテクニックを紹介しています。全部読まなくても頭の片隅に入れておけば、いざと言うとき使えます。

[Virtuous Code](http://devblog.avdi.org/)
Exceptional Rubyの作者サイトです

[Ruby Inside](http://www.rubyinside.com)
Ruby関連のニュースを知ることができます。あと、Rubyの深いところについての記事も時々あります。更新頻度はあまり高くありません。

## Web系
[Github](https://github.com/blog/category/engineering)
技術以外の記事も時々まざりますが、Githubがサイトを運営するためのノウハウを紹介してくれています。Githubは間違いなくWebトレンドの先端にいる会社なので、ここで紹介される問題や課題が時差で世間に注目されることは珍しくありません。

[Igvita.Com](http://www.igvita.com/)
Ilya Grigorikの個人ブログです。Ilya GrigorikはGoogleで働くエンジニアで、[High Performance Browser Networking](http://www.amazon.co.jp/High-Performance-Browser-Networking-Ilya-Grigorik/dp/1449344763)の作者です。自分は読んだことないですが、いい本だと同僚が言っていました。ブラウザ内部の話や最新のWeb技術について記事を書いています。各記事がしっかり書かれているのでいつもとても勉強になります。

[Jeff Lindsay](http://progrium.com/)
Jeff Lindsayの個人ブログです。Jeff Lindsayは最近では[Dokku:500行のbashで書いたPaaS](https://github.com/progrium/dokku)を作った人です。Web技術に関する記事が多いですが、様々な技術をカバーしています。いや、この人マジですごいです。

[Egor Homakov](http://homakov.blogspot.jp/)
Egor HomakovはGithubをクラックしてマスアサイメントの脆弱性を世に知らしめた人です。彼は悪意があってクラックしたのではありません。Githubが聞く耳を持ってくれなかったのでクラックして証明したのです。彼のブログは常に最新の脆弱性について書かれていますが、そのいくつかは世の中が理解してくれないので、彼はブログの中で常にそれらの深刻さを訴えています。彼のセキュリティに対する情熱には目を見張るものがあります。

## まとめ系
[The Changelog](http://thechangelog.com/)
ここをフォローするだけで海外のトレンドはしっかり把握できると思います。人気のある新しいツールやライブラリやサービスを高頻度でお届けする良サイトです。

[ワザノバ](http://wazanova.jp/)
日本語で書かれているので、この記事のタイトルからは少し脱線しますがいいサイトなので入れました。英語圏のブログやサイトを翻訳しているサイトです。ポイントを要約してくれているのですごく読みやすいです。元ネタを英語で読むのが面倒ならここはおすすめです。

## その他
[Pragmatic Bookshelf](http://pragprog.com/)
Pragmatic BookshelfはDRM Freeな技術系オンライン書籍を販売する会社です。ここをフォローしておけば書籍のプレビュー版が無料で読めたり、どんな系統の本が発行されているのか知ることができます。

[Ars Technica](http://arstechnica.com/)
Ars Technicaは技術系の記事を掲載しているサイトです。雰囲気はギズモードをもっと技術的にした感じのサイトです。詳細な技術についてではなく最新のガジェットやITでのホットな話題が中心です。Stack Overflowに掲載された質問を時々ピックアップして載せてくれるのをいつも楽しみにしています。

[Y Combinator Posthaven](http://blog.ycombinator.com/)
言わずと知れたPaul GrahamのY Combinatorが書いているブログです。さすがベンチャーキャピタルだけあって最新のサービスの情報が集まっています。

[Hackers News](https://news.ycombinator.com/)
同じくY Combinatorに設立されたハッカーのためのニュースサイト。
MacOS Lionでrabbitを起動する方法


## 環境
* MacOS
 * 10.7.5
* Ruby
 * 2.0.0p0
* Gem
 * 2.0.0
* gtk+
 * 2.24.22

## Rabbitの環境
* rabbit
 * 2.1.1
* glib2
 * 2.1.0
* gtk2
 * 2.1.0

## 実行すると
```
(eval): line 1
   Gdk-WARNING **:shmget failed: error 12 (Cannot allocate memory)
/Users/<user_name>/.rbenv/versions/2.0.0-p0/lib/ruby/gems/2.0.0/gems/rabbit-2.1.1/lib/rabbit/renderer/engine/cairo.rb:152:in `restore': out of memory
```

こんなエラーが出てました。

## 対応

```
% export DYLD_LIBRARY_PATH=/usr/local/opt/cairo/lib
```

## 追記
本当は、glib2とgtk2のversionを2.0.0に指定しないと動かないというネタも書こうと思っていたのだけど、再現しなくなってました^^;
環境をよごさないでPadrino使ってみる

# Padrinoをローカルインストールしてみたかった
はい [Rails開発環境の構築（rbenvでRuby導入からBundler、Rails導入まで）](http://qiita.com/emadurandal/items/a60886152a4c99ce1017) のパクリ記事です．

どういうことかというと上の記事のPadrino版なので上の投稿をストックしてから出なおしてまいれということです．

どうもrbenvとかSinatoraぐらいの簡単さが丁度いいおじさんです．
いやただのRVMとかRailsとかがよくわからなくて世間から置いてけぼりおじさんなのではと思いつつそれではいけないってことでPadrinoに手を出してみようかと思ったおじさんです．（超理論）
そこで複雑なのが苦手なおじさんは何をするにも単純な方がいいのでライブラリも全部ローカルインストールおじさんなので今回もそのつもりだったわけで．

# それでは早速スタートです
[Padrinoのチュートリアル（日本語）](http://jp.padrinorb.com/guides/blog-tutorial)を追ってｲｸｿﾞｰと思ったらいきなり
`$ sudo gem install padrino`
うｎしってた．
やだやだ！ローカルインストールするんだい！
でもそういう記事見なかったので諦めかけたその時！（この間わずか5分）
Railsでググれば解決するのではという逆転の発想で調べると [上記の記事](http://qiita.com/emadurandal/items/a60886152a4c99ce1017) を見つけたのでPadrinoでも出来そうだったので試してみた．
ということでhistory晒す

```
echo "-----padrino-----"
mkdir padrinoTest
cd padrinoTest/
bundle init
ls
echo 'gem "padrino"' >>Gemfile
cat Gemfile
bundle install --path vendor/bundle
```

ここまでてんぷれ
ここで参考にしたrailsの方では`--skip-bundle`とか指定して勝手に`bundle install`しないようにしてるわけだけどどうすればいいのかな？とチュートリアル見てると

>なお、上記の -b フラグは、最後に bundler で自動的にすべての依存 gem をインストールすることを意味しています。

書いてありました．（近年稀に見るピンポイント親切）
という事で，padrinoでは`-b`をつけないと`bundle install`をしないらしい．
すばらしい．勝手に余計なことしないのっていいよね．
ということでチュートリアルから`-b`を抜いて

```
bundle exec padrino g project sample_blog -t shoulda -e haml -c sass -s jquery -d activerecord
```

で出来ました．
あとは，bundlerが作ったファイルを消してプロジェクトディレクトリに移動して再度そこで`bundle install`すると出来上がり．
チュートリアルそのままやったので`bundle install`を2回もしてたりするけど気にすんな！

```
rm -rf Gemfile Gemfile.lock .bundle vendor
ls
cd sample_blog/
ls
cat Gemfile
bundle install --path vendor/install
ls
emacs app/app.rb 
bundle exec padrino g admin
bundle install --path vendor/bundle
bundle exec padrino rake ar:create
bundle exec padrino rake ar:migrate
bundle exec padrino rake seed
bundle exec padrino start
```

たいへんよくできました．
かなり簡単にできたのでもうちょっと調べれば何かしら出てきたかと思いつつもできちゃったのでもういいや．

# おまけ
あとおまけで`emacs app/app.rb`でいじってる部分なんだけど
チュートリアルでは以下のように追記してください的なこと書いてるんだけど

```rb
# app/app.rb
class SampleBlog < Padrino::Application
  register Padrino::Rendering  
  register Padrino::Helpers

  # Add these routes below to the app file...
  get "/" do
    "Hello World!"
  end

  get :about, :map => '/about_us' do
    render :haml, "%p This is a sample blog created to demonstrate the power of Padrino!"
  end
end
```

そんなクラスは生成されませんでした（半ギレ）
バージョンは0.12.0でした
代わりに

```rb
module SampleBlog
  class App < Padrino::Application
    register SassInitializer
    use ActiveRecord::ConnectionAdapters::ConnectionManagement
    register Padrino::Rendering
    register Padrino::Mailer
    register Padrino::Helpers

    enable :sessions
  end
end
```

こんなんでてきましたけど！こんなんじゃチュートリアルになんねーんだよ！
どうなってるんですかね？チュートリアルさんの情報が古いんですかね？
空気を読んでそれっぽく書いた

```rb
module SampleBlog
  class App < Padrino::Application
    register SassInitializer
    use ActiveRecord::ConnectionAdapters::ConnectionManagement
    register Padrino::Rendering
    register Padrino::Mailer
    register Padrino::Helpers

    enable :sessions
    
    # maybe here...
    get "/" do
      "Hello, Padrino!"
    end
  end
end
```

動きました（あへがお）
チュートリアルさんがいつもやさしいとは限らないということが今回一番勉強になりました．
以上参考サイトは上に書いたので省略！
scrollViewの中のimageViewの大きさをスクロールに合わせて変更する

https://github.com/reikubonaga/scrollViewSample


### ざっくり
スクロールさせているとき、Bounceの設定の仕方と、スクロールに合わせて画像の大きさを変える動作の実装

![スクリーンショット 2014-02-10 17.01.31.png](https://qiita-image-store.s3.amazonaws.com/0/4585/32a8a337-6714-7bd0-7f2c-570d0b57c1b6.png "スクリーンショット 2014-02-10 17.01.31.png")

### BounceとBounce Verticallyの違い
* scrollViewのcontentSizeが親viewよりも大きいときにスクロールし、境界を超えてもスクロールする。
* contentSizeが親viewよりも小さいときもbounceさせるには、alwaysBounceVerticalをYESにする(defaultはNO)
* alwaysBounceVerticalは、storyboardでは、Bounce Verticallyと書かれている。

### BounceしているときのcontentSizeとcontentInsetとcontentOffset
* 上にbounceさせるとbounceさせただけ、contentOffsetのyに負の値が入る。
* contentSizeとcontentInsetは変わらない
* boundsのyも動きに合わせて負の値が入る

![スクリーンショット 2014-02-10 17.02.15.png](https://qiita-image-store.s3.amazonaws.com/0/4585/9fd60078-c5b4-55af-3030-6c1e0773de02.png "スクリーンショット 2014-02-10 17.02.15.png")

### scrollに合わせてimageViewの大きさを変える
* bounceさせた時にimageViewの大きさを変更するとき、imageViewの大きさの変更でscrollのsizeが変わるとcontentOffsetが0になるのでそのまま配置しただけではだめ。
* imageViewの上にviewをセットして動きに合わせてImageViewのtopVerticalHeightを変更する。親のviewからimageViewははみ出すようにすることで、bounceの動作とimageViewの大きさの変更を連動させる
* viewのclipSubviewはoffに

```
ScrollView
- View
-- ImageView
-- Constraint
--- Height - (182) View
--- VerticalSpace - View - ImageView = imageVerticalHeight
```
```
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    if (scrollView.contentOffset.y < 0) {
        self.imageVerticalHeight.constant = scrollView.contentOffset.y;

    }
}
```

### imageViewの大きさを変更するときにimageの比率を保つ
* imageViewのModeをAspect Fillに設定する
* scale to fitを使いながら、imageViewの大きさを調整したいときは、水平方向の位置を中心に固定し、imageViewのwidthに対してconstraintを設定する。動きに合わせてconstraintを変更する。

```
imageViewDefaultHeight = 320;
imageViewDefaultWidth = 182;
if (scrollView.contentOffset.y < 0) {
    self.imageVerticalHeight.constant = scrollView.contentOffset.y;
    self.imageViewWidth.constant = imageViewDefaultHeight*(imageViewDefaultWidth-scrollView.contentOffset.y)/imageViewDefaultWidth;
}
```

## その他
### scrollViewDidScrollの中でcontentInsetを変更する
* viewWillApearで、contentInsetを変更すると、contentOffsetもは、-contentInset.topの値が入る。
* contentInsetの値を変更するとscrollViewDidScroll:(UIScrollView *)scrollViewが実行される

### scrollViewDidScrollの中でbouncesの値を変更する
* scrollViewのbouncesの値を変更するとscrollViewDidScrollが実行される

### 参考
https://developer.apple.com/library/ios/documentation/uikit/reference/UIScrollView_Class/Reference/UIScrollView.html
DOM操作のパフォーマンス

backbone.jsなどのjsライブラリで画面生成されるアプリだと、javascript部分のパフォーマンスがアプリのさくさく感にすごい影響を与える。特に、レンダリング部分がトロいと、画面スクロールとか最初の画面生成にもたつきが発生して、いちいち引っ掛かりを感じるアプリとなってしまう。

では実際のところ、どう書いたら性能良くなるの？、ということでネットをさまよってると、「DOM操作を極力なくせ」、というのが共通の見解のようだ。

例えば、イテレーションの中で一つ一つappendするのではなくてまとめてappendしたほうが良いとか、そもそもappendじゃなくて文字列でinnerHTMLに入れたほうが良い、一度作ったDOM構成をcloneして使うと良い、cloneしたDOMを操作してからreplaceしたほうが良い、とかいろいろTIPSが出てくる。

そんなわけで、自分として気になるtipsをjsperfで試してみた。

append vs htmlについてはすでに[こちら](http://jsperf.com/append-vs-html)に。html使ったほうが早いようだ（古いブラウザだと結果が逆のようだけど）。

まずはappendについて。1.逐次appendと、2.一括append、3.append先をcloneした描画されない状態のDOMに対して逐次appendして最後にreplace、4.DocumentFragmentにappendして最後にターゲットのDOMにappendするケースの4つ。

[appendの比較](http://jsperf.com/dom-manupilation-performance)

一括appendが早いのは予想通り。clone,DocumentFragmentはあまり目立った効果はなく、性能が良い時もあれば悪い時もあった。もっと複雑なDOM構造だと効果が出るかもしれない。

そこで、（cloneを使った実装を勝たせる気見え見えの実験だけど）あまりいけてない実装をした時に、cloneするとしないで差があるか、というのをやってみた。処理としては、5イテレーションごとにdivブロックを生成し、個々のアイテムをそのブロック内に逐次appendしていく。テストケースとして、1.画面上のDOMにappendする、2.cloneしたDOMにappendし最後に差し替える、の2パターンを試した。

[cloneの比較](http://jsperf.com/dom-clone-performance)

cloneのほうが確かに性能は良い。が、大きな差が出た、というわけでもないので、わざわざリファクタリングで直すほどでもないのかな。それよりもまずは逐次appendをやめるべきだし、5イテレーションごとのブロックも$newBlockみたいな変数にキャッシュしてそこにappendしてから$viewにappendするべきでしょう。あるいは、もっと複雑なDOM構造だと効果が出るのかも。

他に気になるTIPSがあったら随時追記していく。
MPI_Comm_split のテスト


MPIのプログラム書いててコミュニケータを分割するようなプログラムを書いたことなかったなぁと思ったのでメモ．

## プログラム

```Fortran:split.f90
program main
    use mpi
    implicit none

    integer :: i, ierr, comm_rank, comm_size, color, key
    integer :: new_comm, new_rank, new_size

    ! program main
    !! init
    call MPI_INIT(ierr)

    !! rank, size for MPI_COMM_WORLD
    call MPI_COMM_RANK(MPI_COMM_WORLD, comm_rank, ierr)
    call MPI_COMM_SIZE(MPI_COMM_WORLD, comm_size, ierr)

    !! set colors
    key = 0
    color = comm_rank/4

    !! split MPI_COMM_WORLD
    call MPI_COMM_SPLIT(MPI_COMM_WORLD, color, key, new_comm, ierr)

    !! rank, size for `new_comm'
    call MPI_COMM_RANK(new_comm, new_rank, ierr)
    call MPI_COMM_SIZE(new_comm, new_size, ierr)

    if (comm_rank == 0) then
        write(*,'(A)') "old rank/size => new rank/size/color"
    end if

    call MPI_BARRIER(MPI_COMM_WORLD, ierr)

    do i=0,comm_size-1
        if (i == comm_rank) then
            write(*,'(I8,"/",I4," => ",I8,"/",I4,"/",I4)') comm_rank, comm_size, new_rank, new_size,color
        end if
        call MPI_BARRIER(MPI_COMM_WORLD, ierr)
    end do

    !! finalize
    call MPI_FINALIZE(ierr)
end program main
```

## 説明

*MPI_COMM_WORLD*を4プロセスごとに分割する．
やっていることは，各rankにcolorを割り当てて`MPI_Comm_split`関数を呼ぶだけ．

+ 分割後のコミュニケータのrankはkeyの昇順に割り振られるが，同一値のkeyがある場合，それらは分割元のコミュニケータのrankの昇順で割り振られる
+ 分割後はcolorを利用してプログラムの条件分岐を行えば良い

## 実行結果

```
[20:22:22,****@****:split]$ mpirun -np 8 ./a.out
old rank/size => new rank/size/color
       0/   8 =>        0/   4/   0
       1/   8 =>        1/   4/   0
       2/   8 =>        2/   4/   0
       3/   8 =>        3/   4/   0
       4/   8 =>        0/   4/   1
       5/   8 =>        1/   4/   1
       6/   8 =>        2/   4/   1
       7/   8 =>        3/   4/   1
[20:22:24,****@****:split]$ mpirun -np 6 ./a.out
old rank/size => new rank/size/color
       0/   6 =>        0/   4/   0
       1/   6 =>        1/   4/   0
       2/   6 =>        2/   4/   0
       3/   6 =>        3/   4/   0
       4/   6 =>        0/   2/   1
       5/   6 =>        1/   2/   1
```
【Laravel】POSTリクエスト→Redirectしたときの処理の流れ

考えてみれば当たり前のような気もするけどハマったのでメモ

LaravelでPOSTリクエストして、その処理の中で

```php
return Redirect::route("/");
```

のようにリダイレクトさせたとき、素直にリダイレクトしてくれない。

大雑把に処理を追った感じ
一旦、Redirectクラスの中で302のステータスコードを作ってブラウザに渡す
↓
GETでリクエストしなおす

ってな感じで動いてるっぽい。ちなみにPOSTでアクセス中にvar_dumpとかさせても結果画面には表示されない。(当たり前？)

よってPOSTでアクセス中は

```php
return Redirect::route("/")->withInput($data);
```

とかでRedirectで変数を渡すこともできない。(ってか処理が中断されるから意味ない？)

POSTリクエストしたときの各ブラウザの動きはこちらにまとめてあった
http://hakobe932.hatenablog.com/entry/20090707/1246985195

ちなみに、
/project/vendor/laravel/framework/src/Illuminate/Routing/Redirector.php

の中でステータスコードを直接弄ったら無理矢理行けないかなーと思ったけど無理だった。
307にしたら恐怖の無限ループに…

なのでPOSTリクエスト中はRedirectは使わない？方が無難？うまい方法があるんだろうか。謎。

あとディスる気はまっっっっっ
っっっっっっ
たくないけど、
Laravel 4 CookBook
https://leanpub.com/laravel4cookbook-jp
これほんと動いたもん載せてんだろーな！？

ってすごく思いました。
てかPOSTリクエスト中Redirectしまくってるけどこれ上手く動いてたの？
安いけど。

終わり。
UITableViewCellの高さが常に一定の時はrowHeightを使う


```objc
self.tableView.rowHeight = 44.0f;
```

みたいに書く。

高さ可変のケースが多いから、他からコピペしてきて

```objc
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
  return 44.0f;
}
```

とか書いてしまうけど、これは無駄。

セルが100個あったら、100回`heightForRowAtIndexPath`呼ばれるから。
ChromeだけTEXTAREAのフォントサイズが小さく表示される

font-sizeを相対指定にしていると、ChromeだけTEXTAREAのフォントが小さく表示されることがある。
そのようなときは、font-familyを指定することで、正しいフォントサイズになる。

```css
textarea { 
  font-family: sans-serif;
}
```
ListViewのlistSelectorを使ってタップしたときに色を変える

ListViewのアイテムを選択されたときに色を変える方法は、<selector>を用意して、その子要素をタップしたときの色を指定するitemは android:state_pressed をtrueにしたものを用意し、選択していないときの色はデフォルトの色で行います。

ここで、
ListViewのアイテム選択にはバグがあるようです。
listSelectorを下記のようにすると、リストのアイテムを選択したときに
Android2.xだと選択行以外も選択されてしまいます。(Android4.xではこの現象はおきません。)

```selector.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">  
     <item android:state_pressed="true">  
         <color android:color="#FFFFFF">  
         </color>
     </item>  
     <item>  
         <color android:color="#000000">  
         </color>
     </item>  
</selector>
```

ここでは、私は何も考えずにcolorを使ってしまったのですが、shapeを使って色を指定すれば回避できるようです。


```selector.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">  
    <item android:state_pressed="true">  
        <shape android:shape="rectangle">  
            <solid android:color="#FFFFFFc">  
        </solid></shape>  
    </item>  
    <item>  
        <shape android:shape="rectangle">  
            <solid android:color="#000000">  
        </solid></shape>  
    </item>  
</selector>  
```
SublimeTextの`Ctrl+0`の行方


普通にみんな知っているかもしれませんが、
私は知らなかったので備忘録メモです。

SUblimeText3で2ColumLayoutなどにしていた場合、
移動は(Macの場合は)`ctrl+1`や`ctr+2`などで
それぞれのViewに移動する事が可能な事は、周知の事実だと思います。

では`Ctrl+0`をした場合にフォーカスが消えるので、
どこに行くのだろうなぁと思っていました。

ある日[File Navigation and File Management](http://docs.sublimetext.info/en/latest/file_management/file_management.html#file-navigation-and-file-management)を見ていたらこんな記述を見つけました。


> The sidebar can be navigated with the arrow keys, but first you need to give it the focus by pressing Ctrl+0. To return the focus to the view, press Esc. Alternatively, you can use the mouse to the same effect.

というわけで、`Ctrl+0`をした場合はサイドバーにフォーカスが移るとの事。
知らずに毎回マウスでやっていましたよ。
これで作業効率がちょっとアップします。

## 余談
これも実は知らなかった(というか`Command+P`で移動するのであんまり気にしない)のですが、
SideBar自体はフォーカスを与えてやればカーソルキーで移動出来るんですね。

やはり奥が深いエディターだなと思う今日この頃です。
MvvmCross だけじゃない！クロスプラットフォームMVVMフレームワーク「QuickCross」を試す


[以前、MvvmCross を紹介しました](http://qiita.com/amay077/items/c4227663b5a5e540dc13) が、Xamarin で使える同種のフレームワークはまだいくつかあります。

今回は、その中の一つ、「QuickCross」を見てみます

* [MacawNL/QuickCross](https://github.com/MacawNL/QuickCross)

## なぜ他のMVVMフレームワークが必要なのか？

[Why another cross-platform Mvvm framework?](https://github.com/MacawNL/QuickCross#why-another-cross-platform-mvvm-framework) にて、MvvmCross があるのになぜ？という事を説明しています。

要約すると、MvvmCross は、高機能だが Fat で複雑で、拡張が大変であるのに対し、QuickCross は、軽量で生産性が高く、拡張が簡単である、との事です。

## 主な機能

[Features](https://github.com/MacawNL/QuickCross#features) より。

* Xamarin.iOS, Xamarin.Android, Windows Phone, Windows Store Apps に対応。
* バイナリは使ってない！Snippet と、プロジェクトにソースコードの追加を行うだけです。
* ViewModel や View の追加は package manager console からコマンドを実行して行います。
* いくつかのコードスニペットを提供します。
* 以下略…

## 仕組み

![](https://raw.github.com/MacawNL/QuickCross/master/assets/quickcross_pattern.png) 
via https://github.com/MacawNL/QuickCross#features

Navigator って概念があるのが MvvmCross と違うとこですかね。

## 使い方

[Getting Started](https://github.com/MacawNL/QuickCross#getting-started) を見てください。

Nuget の Package manager console を使う必要があるので、Mac と Xamarin Studio 、そして Indie Edition では試せません、残念。
Visual Studio ＋ Xamarin Business Edition以上を使ってる方、試してみてください。

## サンプルを動かしてみた

Getting Started は試せませんでしたが、github に含まれるサンプルは Mac + Xamarin Studio でも動かせました。

[QuickCross.ios.sln](https://github.com/MacawNL/QuickCross/blob/master/QuickCross.ios.sln) を Xamarin Studio で開いて実行したところ↓

![](http://blog.amay077.net/assets/images/posts/introduce_quickcross_01.png)

MvvmCross と同じく、ViewModel などは Shared プロジェクトの方にあります。
Shared プロジェクトは PCL にできるんじゃないかなーと思いやってみましたが、

* Profile147(.NET4.0) では ``System.Windows.Input.ICommand`` が無いと言われ
* Profile78(.NET4.5) では、この[バグ](https://bugzilla.xamarin.com/show_bug.cgi?id=17247) にエンカウント※

してビルドできませんでした、残念。
(※Alpha版では修正されてるようです)

## まとめ

MvvmCross は確かに大規模すぎて使うのが大変です。拡張するには Plugin を自作する事になりますし。
QuickCross は、すべてのソースコードがプロジェクトにあるので、カスタマイズが手軽に行えそうだというのは分かりました。

Xamarin Starter Edition の場合、64kbyte までのバイナリ制限があるので、MvvmCross は使えませんが、QuickCross なら使えるかも知れません。

ただ残念なのは、Nuget の Package Manager Console を使う必要があるために、Visual Studio が必要で、その為には Xamarin も Business Edition 以上が必要になってしまう所です。

Xamarin Studio のみでも使えるくらい Lightweight だったら、もっと試してみたくなるフレームワークです。