OmniAICreator/Qiita-1.07M huggingface dataset:
ゲーム制作計画4日目！

#Unityあっぷでーと
本日の作業はUnityのアップデートから始めたいと思います。
アップデートサボっていたので…
4.2→4.3ということで、ウェブページななめ読みするだけでもけっこうな変化があるようです。
一番は2Dですかね
なにそれやってみたい！

#本日のUnity練習
今日は昨日のボーリング映像（！ゲーム）を改造しようと思います。
まず、昨日時点で滑り台発射だったボールをaddForceという物体に力を加える関数による発射に変更しました。
おかげて、いい感じの発射になりました。
ピンに弾力をつけたことでハジケ具合も上々です！

また、ボールの発射をボタンによって行うようにしました。
はじめはボタンを押すほど加速してそれも楽しかったのですが、
しっかりと一度しか押せないように修正をしました。

カメラの位置を修正しました。
カメラはボールを追いかけて移動し、
ある位置まで移動するとボールを追いかけるのをやめその場に停止します。
![ボーリング02.png](https://qiita-image-store.s3.amazonaws.com/0/32926/47313367-2533-baba-132f-e1024e128466.png)

htmlの出力を行い動作することを確認しました。
しかし、このデータの公開方法をイマイチ分かっていないので、
明日はそれについて調べようと思います。

#ゲーム計画
そろそろ企画書を考えないとと思います。
題材はボーリングで行こうと思います。
テーマは「すっきり」「スカッと」「ひまつぶし」みたいなあたり
なんかうまいこと言ったような一つのテーマにできればいいですね
アピールにも使いやすいですし。
とりあえず今考えているのは
「緻密に狙ってボールを投げてストライクを目指す！」
というよりかは
「とりあえず投げる！あたる！たのしー！」
みたいな雰囲気です。
ということで、
ピンを何百本も並べてそこにボールを思いっきり投げ込むみたいなゲームを考えています。
なんだかんだでいっぱい既存のものがありそうなのが残念なところ。
倒したピン数はゲーム開始当初からカウントしたものをいつでも確認できるようにします。
一定以上倒すと景品が！？
景品はボールとかを考えています。
ということでボールは選択可能にしようかなと思います。
ボールはたとえばテニスボールとかバスケットボールとかスイカとか。
模様だけでなく、実際の動きにも適応させたいです。バウンドしやすいなど。
スイカは強く投げると割れるとか。

今考えているのはこれくらいです。
スイカボールとかはちょっとネタを狙いすぎた感じがあるので、
もうすこしゲーム自体の面白さを頑張りたいです。

ところで最近流行ったカジュアルゲームの強豪「クッキークリッカー」（http://orteil.dashnet.org/cookieclicker/）をふと思い出しました。
自分はプレイしたことはなく、友人から概要を聞いただけなのですが、
なんだかわけがわからないけど、でも楽しい。
みたいな雰囲気がとてもいいと思います。自分も作れればいいなと思います。
自分なりに自分がよいと思い点を考えると、やはり
・単純さ
・壮大さ
がよかったのではないかと思います。

単純さというのは操作性に関しても目的に関しても言えると思います。
操作はクリックのみですし、
目的はクッキーを作ることです。
単純さは始めやすいことや、短い時間にやろうと思うことにつながると思います。

壮大さはそのクッキーの生産量についてです。
クッキーの生産枚数が1T枚/secなどというツイートを見た時は思わず笑ってしまいました。
こういうような思わずくすりとしてしまうような楽しさもほしいなーと切実に思います。

先人のゲームから何かを得て自分のものに生かしていきたいと思います。
ぱくりにはならないようにしなければ。
Googleカスタム検索：FireFoxで検索結果ページがうまく表示されないときの解決策

検索結果ページに記述している下記タグについて

```
<script>
(function() {
    ~
  })();
</script>
<gcse:searchresults-only></gcse:searchresults-only>
```

上記のままだとFireFoxで検索結果ページがうまく表示されない場合があるので

```
<script>
function() {
    ~
  }();
</script>
<gcse:searchresults-only></gcse:searchresults-only>
```

という風に<script>タグの頭の「function()」の前の「(」と最後の「})();」の「}」と「();」の間にある「)」を削除すると解決する。
googleMapAPIをjQueryPluginにしてみた！

# googleMapAPIを書くのが面倒で・・・
webサイト制作時にgoogleMapを埋め込む際にgoogleMapをいちいち面倒だと思っている人は自分だけじゃないはず！
いろいろgoogleMapをjQueryで使おうというプラグイン等はあったのですが、
イマイチしっくりこなかったので自分で作ってみました。
  
内部でジオコーディングを使用しているので、住所を入れるだけでmapにマーカーが表示されます。
緯度・経度の設定も可。

ムダの多いソースコードですが、よければ使ってやってください。

[https://github.com/rainProject/googlemapForjQuery](https://github.com/rainProject/googlemapForjQuery)

## 使い方
googleMapAPIと当プラグインを読み込んでください。  

```HTML
<script type='text/javascript' charset='utf-8' src='http://maps.googleapis.com/maps/api/js?&sensor=false'></script>
<script type="text/javascript" src="js/jquery.googlemaps.js"></script>
```

マップを表示したい場所に描画用のブロックを作成。

```HTML
<div id="map"></div>
```

プラグインを呼び出します。

```HTML
<script type="text/javascript">  
	$(function(){
		$('#map').googleMaps(options); 
	}) 
</script>
```

## オプション一覧
options | about
--- | ---
(String)addr | 住所（最優先されます）
(int)lat,lng | 緯度、経度
(int)zoom | 初期ズーム値 初期値 17
(Object)mapType | マップタイプを選択 [GoogleMapAPI参照](https://developers.google.com/maps/documentation/javascript/reference?hl=ja#MapTypeId) 初期値 google.maps.MapTypeId.ROADMAP
(boolean)showMaker | マーカーの表示有無 初期値 true
(boolean)showInfobox | インフォボックス表示有無 初期値 false
(boolean)useStreatView | ストリートビューの使用 初期値 false
(Object)marker | マーカーオプション
(Object)infoBox | インフォボックスオプション

### markerオプション
options | about
--- | ---
(String)markerTitle | マーカーのタイトル
(boolean)markerDraggble | マーカーのドラック可否
(Object)markerAnimation | マーカーのアニメーション  [GoogleMapAPI参照](https://developers.google.com/maps/documentation/javascript/reference?hl=ja#Animation) 初期値 google.maps.Animation.DROP

### infoBoxオプション
options | about
--- | ---
(String)content | インフォボックス内コンテンツ
(boolean)defaultOpen | インフォボックス表示時に開いているか閉じているか 初期値 true

## TODO
* 複数マーカーに対応
* 複数のインフォボックスに対応
* オーバーレイ・ポリゴンに対応
【PHP入門講座】 デバッグ用関数

### [目次に戻る](http://qiita.com/mpyw/items/752e19a578cf7d96fc5f)

# デバッグ用関数の導入

今までは全て表示に `echo` を用いてきました。この方法ではあらゆるものが **文字列** に変換されて表示されていました。しかし、中には文字列に変換せずにもとの形のままの情報を得たいこともあるでしょう。そこでよく使われるデバッグ用の関数、 **`var_dump`** の登場です。この関数を知っているのと知らないので作業効率が大きく変わることもあります。

**var_dump**
http://php.net/manual/ja/function.var-dump.php

まずは最も基本的な例から。整数をダンプしてみましょう。この関数の名前にもなっていますが、「ダンプ」とは **デバッグのために中身を確認する作業** のことを指します。

```php:PHPコード
<?php
$var = 1;
var_dump($var);
```

```text:実行結果
int(1)
```

1の左側に `int` と表示されました。これは次回から学んでいく、 **型** を表しているものです。 `int` は **整数型** を表します。次は以下のコードを実行してみましょう。

```php:PHPコード
<?php
$var = 1;
var_dump($var, 2, 3);
```

```text:実行結果
int(1)
int(2)
int(3)
```

ここで `var_dump` 関数の2つの特性が見えてくると思います。

- 変数だけでなく、直接 **値** をダンプすることも出来る。
- 複数の変数や値を渡すことが出来る。

このコードを実行して上記の結果にはならず、

```text:実行結果
int(1) int(2) int(3)
```

と表示されてしまった方、いますでしょうか？もしこう表示されてしまっても何か間違ったことをしてしまったわけではありません。あなたが恐らく<ins>ブラウザ上でそのまま見ている</ins>のが原因でしょう。そのままページの **HTMLソース** を表示してみてください。正しく表示されるはずです。HTMLを今まで学んできた方であれば、改行コードをソースに記載してもブラウザ上では反映されないのはもちろんご存知ですよね。

HTMLソース上ではなくブラウザ上でそのまま確認したい場合に、以下のように `<pre>` タグを利用することがあります。

```php
<pre>
<?php
$var = 1;
var_dump($var, 2, 3);
?>
</pre>
```

また、いっそのこと **「HTMLじゃなくてテキストとして扱ってしまえ！」** という発想で `header` 関数を使ってMIMEタイプを `text/plain` に変えてしまうのもアリです。これだとソースを見ているのと全く同じことになります。

```php:PHPコード
<?php
header('Content-Type: text/plain; charset=utf-8');
$var = 1;
var_dump($var, 2, 3);
```

さて、次に文字列をダンプしてみましょう。日本語をダンプする際にはブラウザ上での文字化けを防ぐために `header` 関数で文字コードを指定しましょう。

```php:PHPコード
<?php
header('Content-Type: text/html; charset=utf-8');
var_dump('a', 'bc', 'def', 'あ');
```

```text:実行結果
string(1) "a"
string(2) "bc"
string(3) "def"
string(3) "あ"
```

`string` の右の数字は勘のいい人なら **「文字数かな・・・？」** って予想されると思いますが、半分正解・半分誤りとでも言っておきましょうか。何故ならば最後の例の `あ` で文字数だとおかしな結果となるからです。厳密な正解は <ins>バイト数</ins>です。この概念に関しては次の項で詳しく解説していくので、お楽しみに。

最後にいろいろな例を掲載しておきます。これから先、最終的にはこの全てを説明します。

```php:PHPコード
<?php
var_dump('Test') // 文字列
var_dump(1); // 整数値
var_dump(1.0); // 浮動小数点数(一般値)
var_dump(1.8e308); // 浮動小数点数(無限大値)
var_dump(1.8e308 - 1.8e308); // 浮動小数点数(NAN値)
var_dump(true); // 論理値(真)
var_dump(false); // 論理値(偽)
var_dump(null); // NULL値
var_dump(array()); // 配列
var_dump(new stdClass); // オブジェクト
var_dump(tmpfile()); // リソース
```

```text:実行結果
string(4) "Test"
int(1)
float(1)
float(INF)
float(NAN)
bool(true)
bool(false)
NULL
array(0) {
}
object(stdClass)#1 (0) {
}
resource(1) of type (stream)
```

# Xdebugによる拡張

Xdebugは、`var_dump` による表示を見やすくするための機能などを備えた拡張ライブラリ（エクステンション）です。本来は **PECL (PHP Extension Community Library)** から自分でダウンロードしてきてインストールする必要があるのですが、何とXAMPPには既にインストール済みで、php.iniの設定で有効化するだけで使えるようになります。

**Xdebugによるデバッグ環境の構築**
http://keicode.com/cgi/introducing-xdebug.php
AutomatorでExcelで正しく開けるcsvに変換する

詳しい事情は[Win/Mac どちらの Excel でも正しく開ける Unicode な csv の出力方法](http://qiita.com/mashiro/items/0d0b9bbb0f4a6cca620c)を参照して欲しいのだけど、MacのExcelでUnicodeなcsvを適切に開くにはUTF-16LEなtsvにしなければなりません。

どうしてもUTF-8なcsvを吐き出すサービスがあり、毎回変換するのが面倒なのでAutomatorで自動化しました。

### 1. nkfをインストール

文字コードの変換に [nkf](http://sourceforge.jp/projects/nkf/) を使うのでインストールします。

```bash
brew install nkf
```

### 2. Automatorを起動してサービスを作る

![Screen Shot 2013-11-28 at 5.36.31 PM.png](https://qiita-image-store.s3.amazonaws.com/0/153/1a5fe464-cb95-451d-23f7-6ec7d2dfc953.png)

### 3. UtilitiesのRun Shell Scriptをドラッグドロップ

![Screen Shot 2013-11-28 at 5.41.14 PM.png](https://qiita-image-store.s3.amazonaws.com/0/153/4a7a5afa-add1-cee0-91d8-ead308f1c3ef.png)

### 4. Pass input: as argumentsを選択してコードを書く

 ![Screen Shot 2013-11-28 at 5.37.27 PM.png](https://qiita-image-store.s3.amazonaws.com/0/153/816a28be-911d-8959-4f7b-a89327e79a44.png)

```bash
for file
do
	ruby -Ku -e "require 'csv';CSV.foreach('$file', 'r') { |r| puts r.join(\"\t\") }" > ${file}-tmp
	/usr/local/bin/nkf -w16 ${file}-tmp > $file
	rm ${file}-tmp
done
```

画面上のService receives selectedをdocumentsに変更する。
あと終わったことを知らせるために何か選ぶ。ここでは'Display Notification'を使ってる。
画像の中でnkfの位置が/opt/boxenの中になっているのは、僕のMacはBoxenを使ってセットしているため。より正確には下記を実行するとクリップボードに入るものをペーストするといいです。

```bash
which nkf | pbcopy
```

### 5. 保存する

⌘+Sを押して適当な名前をつける。ここではutf16て名前にした。

### 6. 適当なファイルを選択して右クリック

![Untitled.png](https://qiita-image-store.s3.amazonaws.com/0/153/33aaf113-5485-652d-ce27-e081dce13d2e.png)

出てきたutf16をクリックしたら終わり。あとはExcelで開くだけ。
jQueryプラグイン作成で躓いたこと１

ドットインストールの[jQueryプラグイン入門](http://dotinstall.com/lessons/basic_jquery_plugin)見ながらプラグイン作りました。困ったことがあったので、メモ。

#オプションをcssのプロパティに使いたい

要素がfixedだったりして左右の位置をオプションで決めたいときなんかに、
オプションをプロパティに使いたいですがこれではエラーができます。
変数に入れてもダメでした。

```js
//プロパティにオプションをつっこむと、エラーでる
elements.css({
~省略~
    opts.pos: 0,
~省略~
});

//変数にオプションつっこむと、動かない
var opts_pas = opts.pos;
elements.css({
~省略~
    opts_pas: 0,
~省略~
});

//.css({})じゃなくて、.css()だと動いた！
elements.css(opts.pos, 0)
もしくは
var opts_pas = opts.pos;
elements.css(opts_pos, 0)
```

とりあえず動いたのを採用しようと思います。
SublimeText2からsbtを操作する

いちいちコマンドプロンプトを開くのは面倒なので、SublimeTextからsbtを動かします。

1: sbtをインストール。パスを通す
2: [SublimeREPL](https://github.com/wuub/SublimeREPL "SublimeREPL")をインストール
これだけです。

Tools->SublimeRepl->Scala->SBT for opened folder
からSBTを操作できます。

## Windowsで動かす場合
Windowsではコマンドを打った後、何も画面に出ません。
色々と調べた結果、sbtのjlineを無効にするといいっぽいです。
Sublime Text 2\Packages\SublimeREPL\SublimeREPL.sublime-settingsからjlineを無効にします

```json:SublimeREPL.sublime-settings
"default_extend_env": {},
```

を

```json:SublimeREPL.sublime-settings
"default_extend_env": {"SBT_OPTS": "-Djline.terminal=jline.UnsupportedTerminal"},
```

へ編集。
これで(多分)動きます。
Lua で AWK 的な一行野郎 (Windows)

Windowsで、AWKを使おうとすると、コードを囲むのも、コード中の文字列も両方ダブルクォーテーションで、いろいろしんどいので、大好きな Lua で AWK 的な一行野郎を書けるようにしてみた。
（いや、シングルクォーテーションでコード囲めるように手を加えてある AWK も多いんだが、NYAOSがうにゃうにゃ)

```lua:luawk.cmd
::rem:: --[[ vim:set ft=lua: 
@lua "%~f0" %1 %2 %3 %4 %5 %6 %7 %8 %9 & exit /b 0
]]--

-- requires Lua 5.2

if #arg < 2 then
    print(string.format('Usage: %s "ONELINEAR" {FILENAMES}', arg[0]))
    os.exit(0)
end

local function split(line)
    local S = {}
    for p in string.gmatch(line,"%S+") do
        S[#S+1] = p
    end
    S[0] = line
    return S
end

local onelinear = assert( load(arg[1] ) )

NR = 0
if #arg >= 2 then
    for i=2,#arg do
        FNR = 0
        FILENAME = arg[i]
        for line in io.lines(FILENAME) do
            NR = NR + 1
            FNR = FNR + 1
            S = split(line)
            onelinear()
        end
    end
else
    FNR = 0
    FILENAME=""
    for line in io.lines() do
        NR = NR + 1
        FNR = FNR + 1
        S = split(line)
        onelinear()
    end
end
```

だいたい、こんな感じで使う。

```
luawk "if #S>=1 then print('\tPageData.Position.'..S[1]..',') end" d2kcustomize63320.txt 
```

``$0`` , ``$1`` , ``$2`` … は ``S[0]`` , ``S[1]`` , ``S[2]``…。
NR,FNR,FILENAME といった組込み変数はサポートした。

が、正規表現はやっぱり AWK ほど手軽にはかけないねぇ。
複数のモジュールを使う場合に試験可能なJavaScriptのコード

主に前者でやってたけど後者の方が良いんじゃないかって気が最近してきた。

## 処理ごと包含

処理呼び出し部分をメソッドに分割し、試験時にはスタブメソッドに置き換える。

```js:module.js
define([ 'lib/util' ], function(util) {
  return {
    useUtil: function() {
      this._doAnything();
    },

    _doAnything: function() {
      return util.doAnything();
    }
  };
});
```

```js:moduleTest.js
function test() {
  module._doAnything = function() { return 'Dummy'; };
  module.useUtil();
}
```

## オブジェクトを手元に

処理オブジェクトをプロパティに格納し、試験時にはスタブオブジェクトに置き換える。

```js:module.js
define([ 'lib/util' ], function(util) {
  return {
    util: util,
    useUtil: function() {
      this.util.doAnything();
    }
  };
});
```

```js:moduleTest.js
function test() {
  module.util = { doAnything: function() { return 'Dummy'; } };
  module.useUtil();
}
```

----

おまけ:

## そのまま

だと`util`を破壊しないと置き換えられないので駄目。破壊すると他の箇所で利用しているときに困っちゃう。

```js:module.js
define([ 'lib/util' ], function(util) {
  return {
    util: util,
    useUtil: function() {
      util.doAnything();
    }
  };
});
```

```js:moduleTest.js
function test() {
  util = { doAnything: function() { return 'Dummy'; } };  // oops!
  module.useUtil();
}
```
IdobataにCapistrano（2系）のdeploy通知を投げる

[Idobata](https://idobata.io)というグループチャットサービスを試しています。GitHubやNew Relicとの連携機能が便利。

現在のプロジェクトではPHPを使っており、New Relicのdeploy通知を利用できないので自前で通知するようにしてみました。deployツールとしてはCapistrano 2系（with Multistage）を使っています。

Generic Hookを使って「[Idobataにデプロイの通知をさせる](http://asonas.hatenablog.com/entry/2013/10/06/040703)」を参考にしつつ、`config/deploy.rb`に以下の内容を追記すればOKでした。

```rb
after "deploy", "deploy:notify_revision"
namespace :deploy do
  task :notify_revision do
    user_name = `git config --global user.name`.gsub("\n", '')
    github_path = "https://github.com/YOUR-NAME/YOUR-REPOSITORY-NAME/tree/#{current_revision}"
    source = "<p>YOUR-PROJECT was deployed by #{user_name} <span class=\"label label-success\">#{stage}</span></p><ul><li>deployed source tree: <a href=\"#{github_path}\" target=\"_blank\">#{current_revision[0, 7]}</a></li></ul>"
    idobata_hook_url = "https://idobata.io/hook/xxxxx-xxxxx-xxxxx"  # Room Settings > Manage hooks
    run "curl --data-urlencode 'source=#{source}' -d format=html #{idobata_hook_url}"
  end
end
```

`source`オプションには好きなHTMLが指定できるので、いろいろ工夫できそうです。しばらく試してみようと思います。
git addの--allオプション

今までファイルをステージングに追加するときは

```bash
$ git add .
```

してたけど、

```bash
 git add --all
```

のがいいっぽい。

ドットだとgit管理下のファイル全部だけど、
--allだと変更が加えられたファイルと、
未追跡だったファイルだけをaddしてくれる。

http://yukiten.com/blog/info-tec/git-git-add/#content_1_11
UIColorでRGBをHex(16進数)で指定出来てアルファもキメちゃうマクロ

下記をpchファイルに書いといて、どっからでも使えるようにした。
マクロなのでビルド時にキメの値が返るだけで、起動動的に色を動的に変更したい場合はメソッドにしておく必要がある。

```objectivec
//RGB color macro
#define UIColorFromRGB(rgbValue) [UIColor \
colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 \
green:((float)((rgbValue & 0xFF00) >> 8))/255.0 \
blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0]

//RGB color macro with alpha
#define UIColorFromRGBWithAlpha(rgbValue,a) [UIColor \
colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 \
green:((float)((rgbValue & 0xFF00) >> 8))/255.0 \
blue:((float)(rgbValue & 0xFF))/255.0 alpha:a]
```


こんな感じで使う

```objectivec
self.view.backgroundColor = UIColorFromRGB(0xCECECE);
self.view.backgroundColor = UIColorFromRGBWithAlpha(0xCECECE, 0.8);
```
CapybaraでE2Eテストを始める

WAFに依存しない形でCapybaraを導入してE2Eテストを書けるようになるところまでの導入です。テストの実行自体はRSpecを使います。

```console
$ mkdir capybara-test
$ cd capybara-test
```

適当にGemfileを作ってbundle installで入れます

```ruby
# Gemfile
source "http://rubygems.org"

gem "rspec"
gem "capybara"
gem "capybara-webkit"
```

今回はcapybaraのドライバーはcapybara-webkitを使用しています。
※capybaraのドライバについては下記リンクが詳しいです。
http://qiita.com/take/items/779747e0981355e569ad  
　
  
```console
$ bundle install
```
ここでqtがないからインストールできない的なエラーが出るかもしれません。上記リンクに記述がある通りcapybara-webkitがqtに依存しているからです。
その場合は下記リンクより自分の環境に合わせた解決策を実行してみてください。（私の場合はmacだったので、brew install qtでできました）
https://github.com/thoughtbot/capybara-webkit/wiki/Installing-Qt-and-compiling-capybara-webkit  

インストールできたら、次にrspec initでspecディレクトリとspec_helper.rbを作ります。

```console
$ bundle exec rspec --init
```

capybaraを使うためspec_helperに次の記述を追加します。

```ruby
# spec_helper.rb
require 'capybara'
require 'capybara-webkit'

# ここは各自合わせて下さい
Capybara.app_host = 'url'
Capybara.javascript_driver = :webkit

RSpec.configure do |config|
  …

  config.include Capybara::DSL
end
```

ここまでできたらあとはspecファイルをsepcディレクトリ内に作っていってテストを実行していきます。

```ruby
# spec/login_spec.rb

require 'spec_helper'

describe 'login' do
  it do
    visit 'http://test.com/login'
    fill_in 'login', :with => 'test_user'
    fill_in 'password', :with => 'password'
    click_button 'Login'
    expect(page).to have_content('Logged in as')
  end
end
```
詳しい書き方はREADMEを見て下さい。
https://github.com/jnicklas/capybara

あとはアサーションを書いてキャプチャを撮ったりも簡単にできるのでどんどん書いて実行していってみてください。
シェルスクリプトで正規表現

なんかzshの書式とごちゃごちゃになってきたのでメモ。
## sh
```bash
if expr "hogehoge" : ^"hoge" ; then
    echo "hoge＼(^o^)／";
fi
```
## zsh
```bash
if [[ "hogehoge" =~ ^"hoge" ]] ; then
    echo "hoge＼(^o^)／";
fi
```

というか変数展開ないやつはシングルクオートのがいいのだろうかもやもやする。

http://qiita.com/Linda_pp/items/31fa611766598715a172
Background App Refreshについて


iOS7からアプリのバックグラウンド実行可否をユーザが設定、選択できるようになった。つまり、お行儀の悪いアプリはユーザの意思でバックグラウンド実行を止められるということ。なお、 **バックグラウンド実行** と書いているが、Appleの日本語表記では **Appのバックグラウンド更新** が正しいらしい。

設定状態はUIApplicationの`backgroundRefreshStatus`プロパティから取得できる。このプロパティは `UIBackgroundRefreshStatus` の値を持ち、次の3項目がある。

* `UIBackgroundRefreshStatusAvailable` バックグラウンド更新は可能
* `UIBackgroundRefreshStatusDenied` バックグラウンド更新は不可能（ユーザが禁止している）
* `UIBackgroundRefreshStatusRestricted` バックグランド更新は禁止されている（デバイス設定により禁止されており、ユーザは有効化出来ない）

条件分岐するとすればこんなかんじ。

```objectivec
UIApplication *app = [UIApplication sharedApplication];

if (app.backgroundRefreshStatus == UIBackgroundRefreshStatusAvailable) {
    NSLog(@"バックグラウンド更新が可能");
} else if(app.backgroundRefreshStatus == UIBackgroundRefreshStatusDenied) {
    NSLog(@"バックグラウンド更新はユーザによって禁止されている。");
} else if(app.backgroundRefreshStatus == UIBackgroundRefreshStatusRestricted) {
    NSLog(@"デバイス設定により無効にされている（ユーザが有効にすることは出来ない）。");
}
```

参考

* [Detecting user settings for Background App Refresh in iOS 7](http://stackoverflow.com/questions/18520787/detecting-user-settings-for-background-app-refresh-in-ios-7)
Macで端っこまでスクロールさせた時に跳ねるエフェクトをやめる

* OS X Mountain Lion 10.8.5, mavericks 10.9でもできる事を確認しました
* 手順は、以下の記事に書かれている内容通り
 * [Lionのスクロールの端まで行くと跳ねるエフェクトを無効にする](http://veadardiary.blog29.fc2.com/blog-entry-3393.html)

> ターミナルを開いて以下のコマンドを実行します。
> ``` defaults write NSGlobalDomain NSScrollViewRubberbanding -boolean false ```
> 設定を反映させるためにFinderの再起動が必要です。
> ``` killall Finder ```

* 上記を実行後、アプリを再起動すると跳ねなくなります
 * 復旧手順は記事中に記載されています
 * 記事の通り、safariは跳ねるままですが、Chrome, Firefox, Evernote, LimeChat等、他のアプリも、この設定で跳ねなくなりますので、ご注意ください
  * 他にも記事によると、跳ね帰り具合の調整も出来るようですね（こちらは試していないです）
iTerm2のタブ幅を設定する

[iTerm2](http://www.iterm2.com/#/section/home)は色々と便利なのですが、タブのタイトルが長くなった時に表示しきれないことが気になっていました。
Preferencesからは設定できず、コマンドラインで設定する必要があります(http://www.iterm2.com/#/section/documentation/hidden_settings) 。

大きい値を設定しておくとタブの数に応じた最大幅を確保できるので、私はこのようにしています。

```bash:bash
defaults write com.googlecode.iterm2 OptimumTabWidth -int 2000
```
JavaScriptのDateオブジェクト生成

JavaScriptでDateオブジェクトを生成する方法


勘違い

> Date関数だけ呼んでも、newをつけてコンストラクタ呼び出ししても生成できる

[Date - JavaScript | MDN](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Date) によると

new Date => オブジェクトが帰ってくる
Date => 文字列が帰ってくる

そんなわけでこんな感じでキモく動きます。

```js
new Date() == Date(); // あいまい比較なら true
new Date() === Date(); // 厳密に比較すると false
new Date().toString() === Date(); // 文字列同士を比較すると true
```

### 追記
これを調べるときにJavaScript Good PartsにDateオブジェクトが全く出てこないことに気づいた。
【質問 / 解決】Gitlabに大きいファイルがコミットできない

# Gitlab6.0に大きいファイル（50MB）をコミットできない

インストールはこちらを利用しました
https://github.com/akagisho/gitlab-installer/

ただ，現在 rubyforge.org が落ちているようなので，rubygemsは最新版の 2.1.7 を入れています．

## git push しようとすると…

下記エラーが表示されます．

```
git.exe push --progress  "origin" master

Counting objects: 139, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (122/122), done.
Writing objects: 100% (139/139), 50.52 MiB | 13.69 MiB/s, done.
Total 139 (delta 7), reused 0 (delta 0)
fatal: The remote end hung up unexpectedly
fatal: The remote end hung up unexpectedly
error: RPC failed; result=22, HTTP code = 413
Everything up-to-date
```

Http Status Code 413, Request Entity Too Large ですね．

## アップロードできる上限サイズを変更する

gitlab-installerでインストールするとnginxの設定ファイルは /etc/nginx/conf.d/gitlab.conf となるので，ここの serverセクションに client_post_max_size(*1) 500M を設定します （*1 client_max_body_size の表記ミスです）
（参考）
http://stackoverflow.com/questions/7489813/github-push-error-rpc-failed-result-22-http-code-413

また， /home/git/gitlab/conf/gitlab.yml のmax_sizeも 524288000 へ変更します

## そして，変化無し…

でも，上記エラーは改善しません．
わらをもつかむ感じで， /etc/nginx/nginx.conf のhttpセクションにも同様の設定を書いてみますが，変わりませんでした．
また， git config http.postBuffer 524288000 も試みますが，変わり有りませんでした．

何か他に心当たりがある方，ご教授いただければ幸いです．
よろしくお願いします．

## 余談

小さなファイルのコミットは正常に処理されます．

## 解決

asahina_dev さんのコメントで解決しました．

> proxy が刺さってるってことは proxy が返している可能性もありますよ。

お？．お！．

### なんかもうnginxとかgitlabとか全然関係なくてごめんなさい

まさしくproxyが返していたようです．
これに気づくのに必要なファクターは持っていました．

1. POSTのアクセスログが無かったこと
2. 413を返したというエラーログも無かったこと

これらてっきりどこかの設定ミスで出力されないだけかと思ってしまって，proxyが413を返す可能性を考えられていませんでした．

というわけで，Proxyを介さず直に接続して解決しました．
コメントくださった皆様ありがとうございました．
cp でコピー先ディレクトリのあり/なし

/tmp/aaa/ が次のようにあったとします。

```console
$ tree /tmp/aaa/
/tmp/aaa/
`-- xxx

0 directories, 1 file
```

次のコマンドで、

```console
$ cp -a /tmp/aaa/ /tmp/zzz/
```

/tmp/zzz/ はどうなるでしょうか？

```console
$ tree /tmp/zzz/
```

---

もし /tmp/zzz/ が存在しなければ次のようになります。

```console
$ tree /tmp/zzz/
/tmp/zzz/
`-- xxx

0 directories, 1 file
```

もし /tmp/zzz/ が存在すれば次のようになります。

```console
$ tree /tmp/zzz/
/tmp/zzz/
`-- aaa
    `-- xxx

1 directory, 1 file
```

なので同じコマンドを２回実行するとこんなことになります。

```console
$ rm -fr /tmp/zzz/
$ cp -a /tmp/aaa/ /tmp/zzz/
$ cp -a /tmp/aaa/ /tmp/zzz/
$ tree /tmp/zzz/
/tmp/zzz/
|-- aaa
|   `-- xxx
`-- xxx

1 directory, 2 files
```

個人的にはこの動作が非常に判りにくく感じるので、ローカルでコピーするときも rsync を使うことが多いです。

rsync なら **ディレクトリ末尾に / を付けさえすれば** コピー先にディレクトリがあろうとなかろうと結果は同じだからです。

```console
$ rm -fr /tmp/zzz/
$ rsync -a /tmp/aaa/ /tmp/zzz/
$ tree /tmp/zzz/
/tmp/zzz/
`-- xxx

0 directories, 1 file
$ rm /tmp/zzz/xxx
$ rsync -a /tmp/aaa/ /tmp/zzz/
$ tree /tmp/zzz/
/tmp/zzz/
`-- xxx

0 directories, 1 file
```

あるいは cp でもコピー元ディレクトリの末尾に /. を付けると似たような動作になります。

```console
$ rm -fr /tmp/zzz/
$ cp -a /tmp/aaa/. /tmp/zzz/
$ tree /tmp/zzz/
/tmp/zzz/
`-- xxx

0 directories, 1 file
$ rm /tmp/zzz/xxx
$ cp -a /tmp/aaa/. /tmp/zzz/
$ tree /tmp/zzz/
/tmp/zzz/
`-- xxx

0 directories, 1 file
```

さらにコピー先ディレクトリの末尾に /. を付けると、コピー先ディレクトリがなければ失敗します（意図しない形でコピーされるよりは失敗した方がマシ）。

```console
$ rm -fr /tmp/zzz/
$ cp -a /tmp/aaa/. /tmp/zzz/.
cp: cannot create directory `/tmp/zzz/.': No such file or directory
$ mkdir /tmp/zzz/
$ cp -a /tmp/aaa/. /tmp/zzz/.
$ tree /tmp/zzz/
/tmp/zzz/
`-- xxx

0 directories, 1 file
```
ScalaのPlayフレームワークをvagrant環境に構築する方法


ScalaのWEBフレームワークであるPlayフレームワークの導入方法の説明。

前提条件：
vagrantとvirtualBoxはインストール済み。
CentOSのイメージ取得済み。

▼▼▼　vagrantの導入はこちらを参考に　▼▼▼
http://qiita.com/dahugani/items/a5eca25e6173331951d7

##vagrant準備

```
vagrant init centos64
vagrant up
vagrant ssh
```

##java導入
```
sudo yum list \*java-1\* | grep open
sudo yum -y install java-1.7.0-openjdk.x86_64
sudo yum -y install java-1.7.0-openjdk-devel.x86_64
```

##play取得
```
sudo yum -y install unzip
wget http://downloads.typesafe.com/play/2.2.1/play-2.2.1.zip
unzip play-2.2.1.zip
```

##play配置
```
sudo mv play-2.2.1/ /usr/local
cd /usr/bin
sudo ln -s /usr/local/play-2.2.1/play play
```

##playアプリケーション作成
```
play new アプリケーション名
play run
```

play newをやるとアプリケーション名とjava,scalaプロジェクトかどうか聞かれる。
scalaで開発したい場合はscalaを選ぶ。
play runは初回は時間がかかる(２分くらい)。

##動作確認
http://ホスト名:9000にアクセスするとデフォルトのplayアプリケーションの画面が表示される。

##おまけ
ホストにアクセスできないとき。
ファイアウォールの設定が必要なので次のコマンドを叩く。

```
sudo /etc/rc.d/init.d/iptables stop
```
Diff / Merge ツール

# P4V Visual Merge Tool
- マージ作業には最強。Gitのお供に。
- [Perforce Downloads | Perforce](http://www.perforce.com/downloads/Perforce-Software-Version-Management/complete_list/20-20#9)

# WinMerge
- 3ペイン比較もできる。
- [WinMerge 日本語版](http://www.geocities.co.jp/SiliconValley-SanJose/8165/winmerge.html)

# DF
- ともかく軽い。手軽に２ファイルの差分比較するだけならコレ。
- [DFの詳細情報 : Vector ソフトを探す！](http://www.vector.co.jp/soft/win95/util/se113286.html)

# CSV Diff
- 表形式表示のまま差分をチェック／修正できる。
- [Kazuasa's HomePage](http://www3.plala.or.jp/kazuasa/index.html)
Using Jetbrain IDE Family

# CheatSheet for Keyboard shortcuts

## Show Menu
| **Function** | **Short Cut** | **Remarks** |
|:---|:---|:---|
| Find Action | Ctrl-Shift-A| |
| Refactor This | Ctrl+Shift+Alt+T |

## Auto Edit
| **Function** | **Short Cut** | **Remarks** |
|:---|:---|:---|
| Reformatting Source Code | Ctrl-Alt-L | |
| Quick Fix | Alt-Enter | |
| Completion | Ctrl-Space||
| Complete Current Statement | Ctrl-Shift-Enter | |

## Move
| **Function** | **Short Cut** | **Remarks** |
|:---|:---|:---|
| Jump to Source | Ctrl-B | Jump to definition of the specified variable/function/method |
| Move methods | Alt-↑, Alt-↓ | Quickly move between methods |
| Last Edit Location | Ctr+Shift+Backspece |

## Show Sub Info
| **Function** | **Short Cut** | **Remarks** |
|:---|:---|:---|
| Find Usages | Alt-F7 | List caller(s) for the specified variable/function/method |
| Recent Changes | Alt+Shift+c | Quick list of recent changes |

## Refactor
| **Function** | **Short Cut** | **Remarks** |
|:---|:---|:---|
| Rename | Shift-F6 | |
| Move | F6 | Move a selected class/package/file/directory copy in the same or different package |
| Safe Delete | Ctrl-Delete | |
| Extract Method | Ctrl+Alt+M | |
| Ectract Variable | Ctrl+Alt+V | |

# Settings (Preferences)
## Editor
- "Allow placement of caret after end of line"：チェック外す

# Tips
## Source Comment
- Comment starting with `// ToDo` is automatically gathered as ToDo list by IDE.

# Getting Started
## IntelliJ
[IntelliJ IDEA :: Getting Started](http://www.jetbrains.com/idea/documentation/index.jsp)

## RubyMine
- [JetBrains RubyMine :: Quick Start Guide](http://www.jetbrains.com/ruby/quickstart/index.html)
- [JetBrains RubyMine :: Demos and Screencasts](http://www.jetbrains.com/ruby/documentation/index.html)

## WebStorm
- [JetBrains WebStorm :: Quick Start Guide](http://www.jetbrains.com/webstorm/quickstart/index.html)
- [WebStorm Documentation and Demo Videos](http://www.jetbrains.com/webstorm/documentation/index.html)

## PyCharm
- [JetBrains PyCharm :: Quick Start Guide](http://www.jetbrains.com/pycharm/quickstart/index.html)
- [PyCharm Resources: documentation, help and screencasts](http://www.jetbrains.com/pycharm/documentation/index.html)


# Breifing
- [WebStorm指南書](http://azu.github.io/slide/webstorm/webstorm.html#slide1)
Railsで定数を一元管理する(settingslogic)


---

2014/11/19追記
最近はrails_configに乗り換えました。
環境毎にファイルが分かれるので定数の数が増えてきた場合はrails_configの方が管理しやすいです。

[Railsで定数を一元管理する(rails_config)](http://blog.hello-world.jp.net/ruby/2268/)

----

Ruby2.0, Rails4で確認

railsで定数を一元管理したい時にsettingslogic gemをよく使っています。

* gem追加

```Gemfile
gem 'settingslogic'
```

* bundle install

```
./bin/bundle install
```

* initializer設定

ファイル名に0_をつけることで一番最初にsettingslogicのinitializerが読み込まれるようになり、他のinitialier内で設定ファイルを呼び出そうとした際にエラーが起きないようにしています。

```config/initializers/0_settings.rb
class Settings < Settingslogic
  source "#{Rails.root}/config/settings.yml"
  namespace Rails.env
end
```

* settings.ymlに定数を記述

```config/settings.yml
defaults: &defaults
  cool:
    saweet: nested settings
  neat_setting: 24
  awesome_setting: <%= "Did you know 5 + 5 = #{5 + 5}?" %>

development:
  <<: *defaults
  neat_setting: 800

test:
  <<: *defaults

production:
  <<: *defaults
```

* consoleから試してみる

```
./bin/rails c

Loading development environment (Rails 4.0.0)
[1] pry(main)> Settings.cool
=> {"saweet"=>"nested settings"}
[2] pry(main)> Settings.cool.saweet
=> "nested settings"
[3] pry(main)> Settings.awesome_setting
=> "Did you know 5 + 5 = 10?"
[4] pry(main)> Settings.neat_setting
=> 800
```

定数を一元管理できるのでスッキリしますね。

詳細に関しては[公式ドキュメント](https://github.com/binarylogic/settingslogic)を参照ください。

### 参考

* [binarylogic / settingslogic](https://github.com/binarylogic/settingslogic)
* [Rails 設定定数を定義するのに便利な gem](http://blog.44uk.net/2012/09/09/rails-gem-for-static-variables/)
[MySQL] RANDした結果をページングなどで再度クエリが必要なときに保つ方法

前もってseedを生成し、セッションなどでキープしておいて

```sql:Query
--seedが123456の場合
SELECT * FROM table1 ORDER BY RAND(123456)
```

とすれば、selectクエリ結果は毎回同じになる
拡張メソッドの利用

拡張メソッドの設定群をまとめて作っておくと結構重宝するので投稿しておく。

StringのIsNullOrEmptyで例を

```

        <Extension()> _
        Public Function IsNullOrEmpty(ByVal value As String) As Boolean
            Return String.IsNullOrEmpty(value)
        End Function

```

利用時

```

dim str as String = "ほげほげほげほげ"

if str.IsNullOrEmpty then
   '値あり！
else
   '値なし！   
end if 

```
vimでファイルを行数指定で開く

エラーログやknown_hostsで行数を指定されたとき、ファイルを開いてから
指定行まで移動することがあるけど、行指定で開くことも可能

```
$ vim +864 ~/.ssh/known_hosts
```
`-c`でも良い

```
$ vim -c 864 ~/.ssh/known_hosts
```
ローカルのGAEを同一LAN内のiPhoneのブラウザから確認する方法


##GAEが入ってるPCのプライベートipアドレスを調べる
Macなら環境設定のネットワークから確認できる
![スクリーンショット 2013-11-28 11.34.16.png](https://qiita-image-store.s3.amazonaws.com/0/1630/fa7f116d-dd70-a194-eb19-5623e8ea7ca6.png "スクリーンショット 2013-11-28 11.34.16.png")


##設定する

GAE Launcherから対象のアプリケーションを選択してメニュー>Edit>Application Settingsから下記の画面をひらき、Extra Flagsに下記のように記載する。上で調べたプライベートipアドレスを調べる。

![スクリーンショット 2013-11-28 11.29.36.png](https://qiita-image-store.s3.amazonaws.com/0/1630/0e63e279-783b-243a-eb43-d71420c4ae85.png "スクリーンショット 2013-11-28 11.29.36.png")

##ブラウザで確認する
アドレスにプライベートipアドレスをぶちこめば閲覧できる。
上記の場合だと、192.168.2.102:10080
mavericksにRictyをインストールする


知らない間に、こんなのが。
[プログラミング用フォント Ricty Diminished](https://github.com/edihbrandon/RictyDiminished)

下記手順は不要になるかと。

***

Macでhomebrewを使ってRictyを入れる

```
$ brew tap sanemat/font
$ brew install ricty
```
で、下記のように出力されるので、表示されているコマンドを入力する

```
To install Ricty:
  $ cp -f /usr/local/Cellar/ricty/3.2.2/share/fonts/Ricty*.ttf ~/Library/Fonts/
  $ fc-cache -vf
```

おしまい

下記のようなエラーが出た場合

```
curl: (52) Empty reply from server
Error: Failed to download resource "libpng"
Download failed: https://downloads.sf.net/project/libpng/libpng16/1.6.10/libpng-1.6.10.tar.gz
```

```
brew install libpng --universal
```

を実行して、再度```brew install ricty```を実行
bashで実行したコマンドを再度実行する

## 直前に実行したコマンドを実行する

```bash:Terminal
$ ls
$ !!
ls
```

`!!`で直前に実行したコマンドを実行できます。

## 番号を指定して実行する

`history`コマンドを使うと番号と共に実行したコマンドが表示されます。

```bash:Terminal
$ history | tail -n 5
1 ls
2 ls
3 ls
4 ls
5 history | tail -n 5
```

で、`!`に続いてこの番号を入れて実行してあげると……

```bash:Terminal
$ !5
history | tail -n 5
2 ls
3 ls
4 ls
5 history | tail -n 5
6 history | tail -n 5
```

再度同じコマンドが実行されます。

## 履歴から検索する

`Ctrl-r`を押すと……

```bash:Terminal
(reverse-i-search)`': 
```

と、入力待ちになるので、適当に入力すると履歴からインクリメンタルサーチをしてくれます。以下は`hi`と入力したところ。

```bash:Terminal
(reverse-i-search)`hi': history | tail -n 5
```

これで`Enter`を押すとコロン以降に表示されているコマンドが実行されます。

`Ctrl-r`だと後ろから検索するので最近実行したコマンドから検索されるのですが、`C-s`だと検索が逆になります。
が、sttyの`C-s`とキーが被っているので

```bash:.bashrc
stty stop undef
```

で無効化しておかないと使用できません。ついでに、これをしないで`C-s`を押すと画面への描画が止まって固まったように見えます。`C-q`で描画を再開できます。
メモリ管理.インスタンス変数


#インスタンス変数は、viewDidLoadで初期化、viewDidUnloadで解放

* すべてのインスタンス変数 ⇒ deallocで解放
* initで初期化する変数 ⇒ deallocで解放。
* viewDidLoadで初期化する変数 ⇒ viewDidUnLoadとdeallocで解放。

[参照](http://djangoapplab.com/dealloc%E3%81%A8viewdidunload%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/)

```objectivec

@interface ExampleViewController : UIViewController{

	NSMutableArray *obj1; // viewDidLoadで初期化する
	NSMutableArray *obj2; // viewDidLoadで初期化しない

}

- (void) viewDidLoad
{
	
	obj1 = [[NSmutableArray alloc] init];

}

- (void) viewDidUnload
{

	[obj1 release];
	obj1 = nil; // deallocで再度releaseされたときにクラッシュしないようにnilを入れておく。nilに対してreleaseされても何も起きないので。
 
}

- (void) dealloc
{

	[obj1 release];
	[obj2 release];

}
```
メモリ管理.releaseかautoreleaseか


# 自分でreleaseか、autoreleaseか。
所有権のあるオブジェクトは自分でreleaseしなくてはいけない。

## どうやって所有権を持つか？
以下のメソッドで初期化したオブジェクトは、自分が所有権を持つ。

* alloc
* new
* copy
* mutableCopy

## For example
**[[NSmutableArray alloc] init];**
allocしているので、自分でreleaseしなくてはいけない。

**[[NSmutableArray alloc] initWithObjects: __, __, nil];**
allocしているので、自分でreleaseしなくてはいけない。

**[NSmutableArray arrayWithObjects: __, __, nil];**
objectが勝手にreleaseしてくれる。

## 注意
所有権を持たずに生成したオブジェクトもretainメソッドで所有権を持つ事ができる。
所有権を持ったオブジェクトもautoreleaseで所有権を放棄する事ができる。
HomebrewをMavericksに入れる際に出たエラー

HomebrewをMavericksに入れる。

AppStoreより、Xcodeをインストール

ターミルから下記コマンド実行

```
$ ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go/install)"
```
Command Line Toolが入っていない場合は、インストールするようにいわれるので、
そのままの流れでインストール

インストールを確認

```
$ brew doctor
```

下記、エラーが出力された。

```
Warning: A newer Command Line Tools release is available
Update them from Software Update in the App Store.

Warning: You have not agreed to the Xcode license.
Builds will fail! Agree to the license by opening Xcode.app or running:
    xcodebuild -license
```

ライセンスの同意が必要らしいので、

```
$ sudo xcodebuild -license
```

を実行して`agree`を入力して`Enter`

完了。
CentOS6.x 64bit のCUI環境にAndroid環境を構築する

CIのためにAndroid環境をCentOS（GUIなし）環境に構築する必要が出たので、その方法。
特に、個別のパッケージ（SDK Platformなど）をインストールする方法の説明があまりなかったので、ここに共有しておく。

# 前提

JDK, Ant はインストールされているものとする。

また、Android SDKが 32bit 用にビルドされているらしく、必要となる以下のライブラリをインストールしておく。

```bash
# yum install glibc.i686 libstdc++.i686 zlib.i686
```

# SDK本体のインストール

http://developer.android.com/sdk/index.html の DOWNLOAD FOR OTHER PLATFORMS より
SDK Tools Only の "Linux 32 & 64-bit" をdownload する。

これを展開し、パスに `android-sdk-linux/tools` を追加しておく。


# パッケージのインストール

で、本題。
GUIの場合は、SDK Manager を起動して必要なツール、SDK Platform を選択してインストールするが、それと同等なことを CUI でするには以下のように行う。

まず、インストールできるものを以下のコマンドにて確認する。

```bash
$ android list sdk -a -e
----------
id: 1 or "tools"
     Type: Tool
     Desc: Android SDK Tools, revision 22.3
----------
id: 2 or "platform-tools"
     Type: PlatformTool
     Desc: Android SDK Platform-tools, revision 19
----------
… 以下省略
```

この "tools" とか "platform-tools" とかを以下のように指定して、個別にインストールをしていけばよい。
私が実行したコマンドは以下の通り。何をインストールするかは自分の要件次第ということで。

```bash
$ android update sdk -u -a -t tools,platform-tools
$ android update sdk -u -a -t doc-19,android-19,sample-19,sysimg-19,source-19,build-tools-18.1.1
$ android update sdk -u -a -t extra-android-support,extra-google-google_play_services
```

# 確認

インストールがすべて完了すれば、

```bash
$ android create project -t 1 -p /tmp/helloworld -k "com.example.test" -a HelloWorld 
$ cd /tmp/helloworld
$ ant debug
$ant debug install
```

とかでプロジェクトが作れて、ビルドができて、インストールできるかといったところを確認すればOK.

ちなみに、`-t` で与えるIDは

```bash
$ android list
```

で表示されるIDを指定することになる。

* * *

以上
新しいChromeでCSSのMedia Queries(@media)が効かなくなるかも

```css
@media (min-width:50em)and (max-width:61.25em) {
```

カッコと演算子の間にスペースが抜けていると
IE、Fxでは問題ないですがChrome 33(131128時点でのDev Channelで確認、もっと前から？)
以降では無かったことにされてしまいます。

```css
@media (min-width:50em) and (max-width:61.25em) {
```
`factory_girl` と `factory_girl_rails` の違い

何か `gem factory_girl_rails` と `gem factory_girl_rails` があるし、他にも`thoughtbot_factory_girl` があるっぽいけど、どんな関係性があるかわからなかったのでドキュメントを探してみた。

>If you're not using Rails, you'll just have to change the required version of factory_girl:
>gem "factory_girl", "~> 4.0"

rails じゃなくて require して使う時のバージョンを変えたいときにだけ使う？

なんだかよくわからないけど普通に使う時は `gem factory_girl_rails` でOKらしい。

あと多分 `thoughtbot_factory_girl` は昔の書き方。

## 参考
https://github.com/thoughtbot/factory_girl/blob/master/GETTING_STARTED.md
TDD あとで読む

- [Webアプリケーションのテストを書くときに考えていること - 車輪を再発明 / koba04の日記](http://d.hatena.ne.jp/koba04/20131128/1385568428)
- [捗るかもしれないフロントエンド開発環境 // Speaker Deck](https://speakerdeck.com/koba04/bu-rukamosirenaihurontoendokai-fa-huan-jing)
- [r7kamura/autodoc](https://github.com/r7kamura/autodoc)
- [これであなたもテスト駆動開発マスター！？和田卓人さんがテスト駆動開発問題を解答コード使いながら解説します～現在時刻が関わるテストから、テスト容易性設計を学ぶ #tdd｜CodeIQ MAGAZINE](https://codeiq.jp/magazine/2013/11/1475/)
sitecustomize.py を使わず usercustomize.py を使おうね

`sitecustomize.py`を置く前に`usercustomize.py`を置いてみてはいかがでしょうか。

配置場所
========

```py:
>>> import site
>>> userdir = site.getusersitepackages()
```

実体
========

```py:windows
>>> userdir()
'C:\\Users\\owner\\AppData\\Roaming\\Python\\Python27\\site-packages'
```

```py:ubuntu
>>> userdir()
'/home/owner/.local/lib/python2.7/site-packages'
```

```py:mac
>>> userdir()
'/Users/owner/Library/Python/2.7/lib/python/site-packages'
```

ディレクトリを作る
-----------------------

```py:windows
>>> os.makedirs(userdir)
>>> os.system('explorer.exe %s' % userdir)
1
```

usercustomize.pyを作成
========

```py:windows
>>> f = open("%s\\usercustomize.py" % userdir,"w")
>>> str="""import sys
... sys.setdefaultencoding('utf-8')
... """
>>> f.write(str)
>>> f.close()
```

usercustomize.pyの処理が適用されたか確認
========

```py:
>>> import sys
>>> sys.getdefaultencoding()
'utf-8'
```

失敗していれば`ascii`が表示される。
メモ: sphinxをwindowsで使うならSphinx standalone installerを使おう

windowsでsphinx使いたい、日本語ファイルを扱いたい、blockdiagとか使いたいんだけど
ってときに最適なものがありました。

インストール
==========

Sphinx-Users.jp様が配布されている[sphinx-standalone-installer](http://sphinx-users.jp/gettingstarted/install_windows_standalone.html)をインストール。
(「右クリック」-> 「管理者として実行」を忘れずに。)

コマンドプロンプトから`sphinx-quickstart`にてドキュメントプロジェクトの作成に移る。

！！注意点！！
============
ファイルの文字コードは`UTF-8`である必要があります。
sjisではだめです。
HTMLの書き方


##まずHTMLのテキスト内容とURLを知りましょう
これを知らない人が多いのですがHTMLはテキストとURLに分けられます。
次にテキストは「本文」と「本文を補足したサブテキスト」と「リンクを説明したサブテキスト」に分けられます。
URLはリンク（URLジャンプ）と画像・Flash・JS（埋め込み）、CSS（参照？）などに分けられます。

##文章の構造化
本文は見だし（h1〜h6）やsection、articleで構造化します。
本文を補足しているサブテキストならaside、リンクが主体のサブテキストならnavを用います。広告リンクは本文を補足しているということで基本的にasideになります。asideやnavはテキスト量によっては省略することもありますし、厳密に本文と区分けされていないので本文内にasideやnavを含めてしまうこともあります（サイトマップや用語集など。

過去に書かれた記事を貼り付ける場合は対象の文章をarticleでラップします。
articleは常に過去に書かれた記事を扱います（別に可能であれば未来でもいいです）。他のWeb Applicationから作成したコンテンツを貼り付ける場合も多くの場合がarticle要素を用いるといいでしょう。

URLはリンク(URLジャンプ)ならa、画像ならimg、jsならscript,cssならlink要素を使います。FlashならObject要素でしょうか。

あとはh1からh6とp,ul,ol,dlの使い方を覚えればHTMLは書けます。

また、header、footer要素を使って上手くURLと本文をグループ化するとよりわかりやすい構造にできます。

##CSSへの対応
これらをきっちり書いた状態でCSSで表現不能な箇所があればdivを用いてグループ化します。

##まとめ
本文：section,article
本文を補足したサブテキスト:aside
リンクを説明したサブテキスト:nav
グループ化:header,footer,div
文章:h1...h6,p,ul,ol,dl,dt,tableなど
URL:link,script,a,img,objectなど
ofxPdをoF0.8 + Xcode5の環境で実行するメモ


なんとか実行できたのでメモ

ofxPdをoF0.8 + Xcode5の環境では、ProjectGeneratorでアドオン追加するだけでビルドできなくなります。しかし、ofxPdのサンプルは（BaseSDKを0.8にすると）なぜか動いた。
そこで、新規でプロジェクト作成した直後の状態と比較してわかったこと↓

Build Settings > Other C Flagsに以下を書き加える

> -DHAVE_UNISTD_H
> -DUSEAPI_DUMMY
> -DPD
 
![スクリーンショット 2013-11-28 2.42.45.png](https://qiita-image-store.s3.amazonaws.com/0/29877/cf598b9f-3a95-fde5-1686-5d89810be7d0.png "スクリーンショット 2013-11-28 2.42.45.png")

こうするとXcode5、BaceSDK0.9、LLVM 5.0という環境で動いた。
とりあえず

---
追記

よく見たらREADMEに書いてあった…
https://github.com/danomatika/ofxPd#adding-ofxpd-to-an-existing-project
ListViewで追加取得したときに現在位置のまま表示更新する


少し調べれば、やり方は簡単なのだけど、気をつけるべきポイントに触れてる情報が少なかったので、まとめました。

## サンプルコードの条件

* ListFragmentのサブクラスで実装
* データ取得は非同期処理

## やりたいこと

1. ListViewで一番下までスクロールしたら、追加データを取得する
2. ArrayAdapterにデータを追加し、更新する
3. 更新前にリストの一番下だったところから、そのまま追加されたリストを見れるようにする

※いわゆるTwitterクライアンとかで、よくある動きです。

## 一番下までスクロールしたときのイベント登録

ListViewでは、スクロールしているときのイベントをハンドルするためのインターフェース(AdsListView.OnScrollListener)が、用意されてます。

```java:SubListFragment.java
public class SubListFragment extends ListFragment {
    …
    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        // Scrollイベント設定
        ListView listView = getListView();
        listView.setOnScrollListener(new AbsListView.OnScrollListener() {
            @Override
            public void onScrollStateChanged(AbsListView absListView, int i) {

            }

            @Override
            public void onScroll(AbsListView absListView,
                                 int firstVisibleItem, int visibleItemCount, int totalItemCount) {
                if (totalItemCount != 0 && totalItemCount == firstVisibleItem + visibleItemCount) {
                    // 最後尾までスクロールしたので、何かデータ取得する処理
                    ...
                }
            }
        });
    }
```

onScroll()メソッドで渡されてくる数値は、以下の通りです。

* firstVisibleItem : 画面上での一番上のリストの番号
* visibleItemCount : 画面内に表示されているリストの個数
* totalItemCount : ListViewが持つリストの総数

なので、以下の判定文で画面に表示している（画面上に流れていったものも含めた）リストが、ListViewの持つ総数に等しいかチェック出来ます。

```java:
if (totalItemCount == firstVisibleItem + visibleItemCount) {}
```

## 表示している位置の取得とセット

例えば今表示してるリストの位置を取り出し、ListViewにセットするようなメソッドを作る場合は、以下のような感じになります。

```java:
    private void restoreListPosition() {
        ListView listView = getListView();
        int position = listView.getFirstVisiblePosition();
        int yOffset = listView.getChildAt(0).getTop();
        listView.setSelectionFromTop(position, yOffset);
    }
```

## ListViewの位置を設定する正しいタイミング

setSelectionFromTop()メソッドは、適切なタイミングで呼んであげないと期待する動きになりません。
以下はデータ取得するときの、レスポンス処理あたりでの実装例です。

```java:
    mSubAdapter.add(data);
    ...
    mSubAdapter.notifyDataSetChanged();
    restoreListPosition();
```

ここで`mSubAdapter`は、`ArrayAdapter<T>`をカスタマイズしたクラスのことです。
add()メソッドでデータを追加した後に、notifyDataSetChanged()メソッドでリストデータに変更があることをListViewに通知します。
その後で先程のsetSelectionFromTop()メソッドを呼んであげると、指定した位置でListViewの更新ができます。

## ListViewの位置を設定する間違ったタイミング

注意しないといけないのは、setSelectionFromTop()メソッドを呼ぶ前に、setListAdapter()メソッドを呼ぶのはNGです。アプリがクラッシュします。

```java:
    mSubAdapter.add(data);
    ...
    setListAdapter(mSubAdapter);
    ...
    mSubAdapter.notifyDataSetChanged();
    restoreListPosition();
```
MacでGLFWを設定 


Macの場合Homebrewでインストールできるのですが、古いバージョンがインストールされます。
最新のglfw3.hを使う為には、手動で設定が必要です。
試した環境はOS 10.8でxcodeは5.0です。

#手順1: ソースコードをダウンロードする
GLFWのサイトから[ソースコードをダウンロード](http://www.glfw.org/download.html "GLFWソースコード")ソースコードをダウンロードしてください。「SourcePackage」と書かれているところです。

#手順2: Cmakeのアプリをインストールする
CMakeできる環境であれば、飛ばしてください。こちらの[サイトからダウンロード](http://www.cmake.org/cmake/resources/software.html "Cmake")サイトからダウンロードしてください。
32bit用と32/64ビット用がそれぞれあるので、お使いの環境にあった物を選んでください。
解凍後パッケージをインストールしてください。

#手順3: Cmakeを実行する
ターミナルを開いて、GLFWのディレクトリに移動します。ディレクトリ直下でcmakeを実行します。

```bash
cmake . 
```
次にmakeを実行

```bash
make install
```
これでXcodeで使える状態になりました。
ちなみに「src」ディレクトリ内に「config.h.in」というファイルがあり、この中にCmakeの設定が書かれています。ここを変更することでオプション設定ができます。

#手順4: Xcodeのプロジェクト設定
新規プロジェクトを立ち上げます(command line tool等)。BuildPhase内のLink Binary with Librariesに下記を追加します。

* OpenGL.framework
* Cocoa.framework
* IOKit.framework

GLFW/srcディレクトリ内に作られた「libglfw3.a」ファイルも追加します。

最後にheader search pathをGLFWディレクトリ内のincludeに設定します。
これでコンパイルできるはずです。
Mavericks で SSH Agent がパスフレーズを憶えてくれない事象をなんとかする


OS X 10.9 で、公開鍵認証のサーバに SSH で接続しようとすると、 "Saving password to keychain failed" というエラーが出てしまう件について。

```
% git push origin master
Saving password to keychain failed
Identity added; /Users/shao/.ssh/id_dsa
...
```

Homebrew からインストール。

```bash
brew tap homebrew/dupes
brew install homebrew/dupes/openssh --with-brewed-openssl --with-keychain-support
```
[パッチ](https://github.com/Homebrew/homebrew-dupes/pull/237.patch) は不要になりました。


インストール完了後、plist を編集 (`/usr/bin/ssh-agent` から `/usr/local/bin/ssh-agent`に置き換え)

```bash
sudo sed -i '' 's/\/usr\/bin\/ssh-agent/\/usr\/local\/bin\/ssh-agent/' /System/Library/LaunchAgents/org.openbsd.ssh-agent.plist
```

ssh-agent の再起動

```bash
launchctl unload -w /System/Library/LaunchAgents/org.openbsd.ssh-agent.plist
sudo killall ssh-agent
launchctl load -w -S Aqua /System/Library/LaunchAgents/org.openbsd.ssh-agent.plist
launchctl start org.openbsd.ssh-agent
```

環境変数の設定 (.bash_profile や .zshenv などに書く)

```bash
export SSH_AUTH_SOCK=$(launchctl getenv SSH_AUTH_SOCK)
```

以上の手続きにより、正しくキーチェーンに鍵を保存できる OpenSSH を使うことができるようになる。
Titanium.Databaseの基本的な使い方


##sqliteのデータベースファイルの作成

install()を使いsqliteのデータベースファイルを内部ストレージにコピーする


###データベースファイルのコピー先

- iOS

/Applications/apple_app_id/Library/Private Documents/

- Android

file:///data/data/appID/databases/


### 外部ストレージにコピーする場合(Android)

```javascript
if (Ti.Platform.name === 'android' && Ti.Filesystem.isExternalStoragePresent()) {
  var db2 = Ti.Database.install('mydb2', Ti.Filesystem.externalStorageDirectory + 'path' + Ti.Filesystem.separator + 'to' + Ti.Filesystem.separator + 'mydb2Installed');
}
```
###引用元

http://docs.appcelerator.com/titanium/3.0/#!/api/Titanium.Database-method-install

##sqlite databaseの削除

```javascript
var db = Ti.Database.open('myDB');
db.close();
db.remove();
```

###引用元

http://developer.appcelerator.com/question/91571/how-to-reset-an-android-sqlite-database

##sql文の実行例

https://code.google.com/p/titanium-mobile-doc-ja/wiki/guides_database
Guake(terminal for Linux)を入れてみた


ubuntuを使っていて、
なにかいいターミナル（MacでいうiTermっぽいやつ）が
ないかなーと探してしたら、guake-terminalというのを
見つけたので、導入してみた。


```
sudo apt-get install guake
```

これで導入完了。

**system** に **guake terminal**が追加されているはずなので、
選択して移動してみる。

使い方は簡単。`F12`を押すとターミナルが表示される。
もう一度、`F12`で即座にしまえる。

これはいい。

![スクリーンショット 2013-11-27 12.44.44 AM.png](https://qiita-image-store.s3.amazonaws.com/0/25562/2e0d3fc0-6275-f56c-a862-4defe3769d57.png "スクリーンショット 2013-11-27 12.44.44 AM.png")


と、標準では少々使いにくいので設定を好みにいじってみた。

##設定を変更してみる。
設定自体は
`settings Manager`⇒`System`⇒`Guake Terminal `で
行える。

###透過の設定
デフォルトではすごく透過されている。
これはこれで、バックは見やすいんだけど、
文字がみにくくて仕方がない。なので透過率を変更。
こんな感じ。

![スクリーンショット 2013-11-28 12.19.02 AM.png](https://qiita-image-store.s3.amazonaws.com/0/25562/7a992aa2-c682-ce0c-6568-ede11de7a960.png "スクリーンショット 2013-11-28 12.19.02 AM.png")

##最終的にはこんな感じになりました。


![スクリーンショット 2013-11-28 12.21.08 AM.png](https://qiita-image-store.s3.amazonaws.com/0/25562/2508d92d-7bc4-33a6-25b8-d43ec9938571.png "スクリーンショット 2013-11-28 12.21.08 AM.png")


以上。
appledocの導入

##appledocとは
javaDocのようなコード中にコメントを記載するもののObjective-c版ってところですかね。

##appledoc導入手順

1.まずはgithubからソースコードをダウンロード。らしいです。

ターミナルを利用します。
[https://github.com/tomaz/appledoc](https://github.com/tomaz/appledoc)
（上記サイトにはインストール方法も記載してるので参考にして下さい。）

ここでgitを使うのですが、versionを確認したところ古かったので最新のものに切り替えました。
その時の手順は[こちら](http://qiita.com/sima_sima217/items/5fbaebae8a6d2edae037)

#####GitHubからソースを取得してインストール
下記コマンドで取得。（カレントディレクトリに作成されると思います）

```
%git clone git://github.com/tomaz/appledoc
```

作成されたappledocディレクトリ内にinstall-appledoc.shがあると思うので下記コマンドでインストール。


```
%sudo sh ./install-appledoc.sh -b /usr/bin -t ~/Library/Application\ Support/appledoc
```

すると下記のような表示になりました。完了みたいです。

```
〜うんちゃらかんちゃら〜
** BUILD SUCCEEDED **

Installing binary to /usr/bin
Copying templates to /Users/ユーザ名/Library/Application Support/appledoc
```

#####バージョンの確認
では下記コマンドでバージョンの確認をしてみましょう。

```
%appledoc --version
appledoc version: 2.2 (build 963)
```

導入はこれで完了です。
使い方は次の機会に。
git リポジトリの最新の履歴だけを取得する shallow clone

git でリポジトリを clone した場合、通常は元のリポジトリを丸ごと取得してきます。

しかし、最新版が取得できればそれでよい、過去の履歴情報はいらない、という場合もあるかと思います。そんなとき、次のようにすればリポジトリを丸ごと取得せず、最新版だけ取得できます。

```
git clone --depth 1 https://github.com/git/git
```

これは、git のマニュアルでは shallow clone と呼ばれています。

オプション `depth` に渡す値は、取得する履歴の数です。上記では `1` を指定しているので、最新のみを取得します。depth 1 で shallow clone したリポジトリで `git log` を実行すると、ログが 1 つしかないのが分かります。

## 利点

変更履歴が多くて通常の clone では時間がかかるような git リポジトリの場合、shallow clone を使うことで通常の clone より速く最新版を取得できます。

とりあえず最近の履歴だけ見たい、とか、最新版に対して修正パッチを作成したい、とかいった目的に有益です。

## 通常の clone と shallow clone との変換

既に通常の clone がある場合に、それを後から shallow clone にすることが可能です。次のようにすれば良いです。

```
git fetch --depth 1
```

また、既に shallow clone がある場合に、それを後から通常の clone にすることが可能です。次のようにすれば良いです。

```
git fetch --unshallow
```

## 補足

以前は、shallow clone したリポジトリでは、fetch や push ができないという制限事項がありました。しかし、現在（Git 1.9 以降）は、それらが改善されており、fetch や push を行うことも可能になりました。

## まとめ

shallow clone はあまり知られていない機能だと思いますが、状況と目的によっては役に立つ機能ではないかと思います。
jQueryでドラッグアンドドロップを実装する


jQuery UI 使えば簡単にできるけど、カスタマイズしようとするとカオスになるので、自前でも実装できるようになっておきたい。

D&Dの仕様はいろいろあるけど、以下のようなものを考えてる。
これ、何気に難しいと思う。

* ドラッグ時、掴んだ要素自体は動かさず、コピーを動かすこと
* コピーの中心は、常にマウスの位置にあること
* ドロップできる要素上をマウスホバーしたら、その要素をハイライトすること


## 実装手順

1. ドラッグ対象要素の`mousedown`イベントを検知して、その要素のコピーを作る
2. ドラッグ可能エリア (大抵は`body`とか) の`mousemove`イベントを検知して、コピーの位置を変える
3. ドロップできる要素の`mouseenter mouseleave`イベントを検知して、ハイライトのオンオフを行う
4. ドロップ出来る要素の`mouseup`イベントを検知して、ドロップ成功時の処理をする
5. ドラッグ可能エリアの`mouseup`イベントを検知して、ドロップ失敗時の処理を行う

素直に考えるとこんな風な実装になると思うけど、問題点が1つある。
コピーを動かしている間は、ドロップ出来る要素のイベントを拾えない。

## 解決策1: display:none + document.elementFromPoint

`document.elementFromPoint(x, y)`は、`x, y`の位置に見えている要素を取得するメソッド。
コピーの`mousemove`イベントは拾えるので、そのタイミングでマウス位置の要素を取得し、ホバーしてる要素を検出する。
しかし、単純にそのまま`document.elementFromPoint`してもコピーしか取得できない。
そこで、コピーを一時的に`display: none`することでコピーの裏側を取得できるようにする。


## 解決策2: pointer-event:none

`pointer-event`を使えばHTML要素がマウス・タッチイベントにどう反応するのかを決めることができる。
`none`にすると、イベントに反応しなくなる。

ブラウザが対応していれば、コピーに `pointer-event: none`を指定してやるだけで問題は解決する。
しかし、まだ[対応ブラウザ](http://caniuse.com/pointer-events)が限られている。
特に、IEをサポートしなければならない場合使えない。

## 解決策3: インラインSVGを使う

HTML5では、HTML中にSVGタグを記述できるようになった。
IEでも、IE9以上のブラウザが[対応している](http://caniuse.com/svg-img)。


実は、上記の`pointer-events`はSVG要素には使えるらしい。
らしい、というのはIE9が手元にないので確認できないため。

どなたか、この方法で動くかどうか確認してくだしあ＞＜
http://jsfiddle.net/ectJu/1/ 


__全然ダメでした！IE9どころかIE10でも動かない！__