OmniAICreator/Qiita-1.07M huggingface dataset:
jQueryでGETを埋め込む

## はじめに
* ページ読み込み時に別サイトへのGETアクセスがしたい時にjQueryを使えば簡単に書ける
 * 例) xxxx.phpにアクセスして何らかの処理をしたい

## 必要な記述

```html:
<script type="text/javascript" src="http://code.jquery.com/jquery-1.10.2.js"></script>
<script>
  $.get("hoge.php");
</script>
```

# ～ただの宣伝～
* [全国のSeleniumer必読](http://qiita.com/oh_rusty_nail/items/b8ba525d31ea7c522856)
* Seleniumerといっていますが、Selenium, SauceLabs, Travis, Jenkinsに関するノウハウ書いているのでよかったら参考にしてみてください
UIScrollViewで写真閲覧スクロール表示を実装するなら「ATPagingView」が使える


（iOS6からはUICollectionViewを使ったほうがいいとは思いますが、ATPagingViewの説明としてこの記事は残しておきます）

UIScrollViewで写真閲覧スクロール表示を実装するとき、再利用や先読みが必要であればATPagingView(https://github.com/andreyvit/SoloComponents-iOS) クラスの設計が参考になる。

また、ATPagingViewではスクロールのために必要になるUIScrollViewDelegateをページングのみ特化するプロトコルを定義することで処理をわかりやすくもしている。

ATPagingViewDelegateに定義されているプロトコルは次の通り

```objc
@protocol ATPagingViewDelegate <NSObject>

@required

//ページ数を返すようにする。UITableViewのtableView:numberOfRowsInSection:と同じようなメソッド
- (NSInteger)numberOfPagesInPagingView:(ATPagingView *)pagingView;

//必要になったページviewを生成。UITableViewのtableView:cellForRowAtIndexPath:と同じようなメソッド
- (UIView *)viewForPageInPagingView:(ATPagingView *)pagingView atIndex:(NSInteger)index;

@optional
//optionalなメソッドはスクロールのために必要になるUIScrollViewDelegateを直接使う必要がないようにしている

//ページ番号が切り替わった時（表示は前のページの状態）
- (void)currentPageDidChangeInPagingView:(ATPagingView *)pagingView;
//ページ番号が切り替わった時2度呼ばれる（必要性は不明）
- (void)pagesDidChangeInPagingView:(ATPagingView *)pagingView;

//スクロール開始時に呼ばれる
- (void)pagingViewWillBeginMoving:(ATPagingView *)pagingView;
//スクロールが終了した際に呼ばれる
- (void)pagingViewDidEndMoving:(ATPagingView *)pagingView;

@end
```

## ATPagingViewでのページの先読み

ページの先読みはATPagingViewのpagesToPreloadプロパティに指定することで先読みを行うことが出来る。
この先読みは表示されているページの前後の数を指定することになり、2を指定した場合は*2の合計4ページの先読みとなる。

## ATPagingViewでのビューの生成と再利用

requiredな2つのメソッドの1つ、numberOfPagesInPagingView:で指定するのは全てのページ数。これによりUIScrollViewのcontentsSizeが決定しスクロールできる範囲が決まる。

次に先述したviewForPageInPagingView:atIndex:メソッドにより表示しようとするページのViewを生成する。このメソッドを実装する場合、dequeueReusablePageメソッドにより再利用queueからUIViewを取り出す

```objc
- (UIView *)viewForPageInPagingView:(ATPagingView *)pagingView atIndex:(NSInteger)index
{
	UIView *view = (UIView *)[pagingView dequeueReusablePage];
    if (view == nil) {
        //再利用できなければ生成する
		view = [[UIView alloc] initWithFrame:[UIScreen mainScreen].bounds];
    }
    /*…ここでUIImageViewなどをセットする...*/
    return view;
}
```
## ATPagingViewでのページ切り替え

UIScrollViewDelegateではドラッグし始めたかどうかや減速しているかどうかのフラグがあるが、ページングにはそういった情報は必要がない場合が多いため機能として最低限のものを用意し処理をわかりやすくしている。

スクロール開始時に呼ばれるpagingViewWillBeginMoving:メソッドはスクロール中にツールバーやナビゲーションバーのボタンを非活性にしたい場合などに使え、pagingViewDidEndMoving:は非活性化したボタンの活性化や各ページのスケールリセット等を行うのに役に立つ。
ブランチを作り忘れた時


※2013.07.08 追記あり

ブランチを作成するのを忘れて作業してて、masterを編集してしまった。
途中からブランチを作成して、そこで作業を再開する方法。

現在のワークツリーを一時的に保存する

```
git stash
```

stashに保存されている状態のリストを確認

```
git stash list
stash@{0}: WIP on master: 0f043fe Finish layout and routes
```

ブランチ(working)を作成する

```
git branch working
git checkout working
```

保存した状態(stash@{0})を現在のブランチに適用する

```
git stash pop
```
実行後に適用した状態は削除される
削除したくない場合は、

```
git stash apply
```

workingブランチを作成出来たので、
今後はこのworkingブランチを使用して作業をする。

--
2013.07.08追記
[acple@githubさん](http://qiita.com/acple@github)から指摘をいただきました。ありがとうございます。
まだコミットしていない場合は、`git checkout -b working`（ブランチを切り替える）だけでOKとのことです。
試してみます。

masterブランチのsample.txtを変更する

```
git status
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   sample.txt
#
no changes added to commit (use "git add" and/or "git commit -a")
```

ブランチ作成、切り替え

```
git checkout -b working
```

```
git status
# On branch working
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   sample.txt
#
no changes added to commit (use "git add" and/or "git commit -a")
```

ちゃんとブランチが変更され、変更したファイルも見えていますね。
これをコミットすれば、workingブランチにコミットされます。

コミットされるまでブランチは分かれないので、変更しているファイルは同じなんですね。
workingブランチを作成後にブランチをmasterに切り替えて、sample.txtを開くと変更されていませんでした。
ブランチについて少し理解が深めることが出来ました。
ありがとうございました。

git stashの使いどころについても今後少し調べてみよう。
PDF中の画像ファイルのみを抽出する

[Google先生に「PDF 画像 抽出」と聞いてみると一杯出てきます](https://www.google.co.jp/search?q=pdf+%E7%94%BB%E5%83%8F%E3%80%80%E6%8A%BD%E5%87%BA)が、出てくる方法全部めんどくさいことしてる＆間違ってる事が多い気がします。

でも割とよく聞かれるので、聞かれた時に私がいつも言っている方法を書いておきます。

## 使用ソフトウェア

* [LibreOffice](http://www.libreoffice.org/)（v3.6で動作確認してますが、以前でも以降でも動くと思います）

のみです！
ちなみに、MicrosoftのOfficeみたいにお金はらって使いづらいUI使うぐらいなら、みなさんLibreOffice使いましょう（宣伝）

## 方法

0. 対象のPDF(e.g. example.pdf)をLibreOfficeで開きます（自動的にDrawで開かれるはず）
0. 各画像とかが見えるのを確認します
0. そのままOpenDocument形式(e.g. example.odg)で保存します。
0. 拡張子を.zipに変えます(e.g. example.odg -> example.zip)
0. 解凍します
0. Picturesフォルダの中に全部入っています

## おわりに

LibreOfficeはPDFを割と強力に開いてくれるので、変なのじゃない限り大抵のファイルならこれでいけるはずです。
あとは、OpenDocumentが実は書くファイルをzipにまとめたものだとかを知っている人はあまり多くないらしい（！）ので、周りの人に教えてあげると色々捗るんじゃないでしょうか。

## 追記
2016/12/12にver 5.1.4.2でもこの手法は使えることを確認しています。
文字列.index( 文字 ) を何度も呼ぶなら Hash にする

文字列.index( 文字 ) は、まあ文字列が短ければどうでもいいんだけど、長い場合は線形探索の悲哀を感じてしまうので、Hash にしたい。

```ruby
STARLIST= "OBAFGKMRNS" # これぐらいなら index でいいと思うけど。
STARS=Hash[ STARLIST.chars.each_with_index.to_a ]
STARS[ ?R ] #=> 7
```

と、Hash にすることができる。
とはいえ罠があって、元の文字列に重複があると、`index` の場合は先頭が優先だけど、Hash を作るときには後が優先。

```ruby
SRC="hogefugapiyofoobarbaz"
HOGE=Hash[ SRC.chars.each_with_index.to_a ]
HOGE[ ?o ] #=> 14
SRC.index( ?o ) #=> 1
```

こんな感じ。
この罠に引っかからない文脈なら役に立つと思うんだけど、どうだろう。

---

## tadsan さんのコメントを受けて追記

罠を避けるためには、 `uniq` ではなく、`reverse` すればよい。

```ruby
SRC="hogefugapiyofoobarbaz"
HOGE=Hash[ SRC.chars.each_with_index.to_a.reverse ]
HOGE[ ?o ] #=> 1
SRC.index( ?o ) #=> 1
```

迂遠な感じはするけれども。
VimでGitる素敵な方法

[vim-fugitive](https://github.com/tpope/vim-fugitive)というプラグインを使います。

<br>


##### diffもパッチの比較見なくても左右に画面開いて比較できるし、

#### 色付きで見やすいし、

### わざわざターミナルに戻る必要ない！

<br>

１ファイルだけパパッと修正して確認してコミットしたい時とかは、
とても便利かと思います★

<br>

## 導入

導入は各自。

自分は[Neobundle](https://github.com/Shougo/neobundle.vim)使ってます。

以下のように設定します。

```vim:.vimrc
NeoBundle 'tpope/vim-fugitive'
```

そうしてvim開いて`:NeoBundleInstall`で導入完了！
vimを再起動したら使えます。

<br>

## 使い方

下記がgit コマンドとvim-fugitiveのコマンドとの対応表です。

| gitコマンド | vim-fugitive | 備考 |
| :------------- | :-------------- | :----- |
| git status | ~~:Gstatus~~<br>:Git | 各ファイルの行を選択した状態で、[-]でadd/resetしたり[D]でdiff取ったりできる |
| git add | :Gwrite | ファイルをaddできるが、行指定のaddはできないっぽい |
| git checkout FILE_NAME | :Gread | 修正がよくわかんなくなった時でもパパッとHEADの状態に元通り！ |
| git commit | ~~:Gcommit~~ <br> :Git commit | コミット。言わずもがな。 |
| git blame | ~~:Gblame~~ <br> :Git blame | ファイルの各行がどのコミットのものか調べる |
| git diff | :Gdiffsplit [revision] | 画面が2分割されて[revision]との差分が見れる<br>色分けされる |
| git log | ~~:Glog~~<br>:Gclog | ログ一覧が表示され、選択するとそのコミットの状態が見れる |
| git mv | :GMove [file name] |  |
| git rm | :GRemove |  |

まだまだ色々あるので、
興味が有る方は調べてみると面白いかも。

`:h Gblame`でヘルプ見れます。

<br><br>
こちらではそれぞれ結構詳しく説明されてます。
参考にいたしました。**thanks!!**

[VimmerなGit使いはfugitive.vimを今すぐ入れたほうがいい](http://yuku-tech.hatenablog.com/entry/20110427/1303868482)
[vim-fugitiveがやっぱり便利](http://qiita.com/hyshhryk/items/4936c4412daa866daf7d)
HomebrewでOSXに音声解析エンジンJuliusを入れる

# 前提

OS X用のパッケージ管理ツール Homebrew がインストールされている必要があります。

インストール方法は[こちら](http://www.engineyard.co.jp/blog/2012/homebrew-os-xs-missing-package-manager/)を参照。

# インストール

デフォルトのHomebrewリポジトリにJuliusは含まれていないので [homebrew-nlp](https://github.com/uetchy/homebrew-nlp) をtapします。


```bash
$ brew tap uetchy/nlp
```

Tapし終わったら、`julius`と`julius-dictation-kit`をインストールします。

```
$ brew install julius julius-dictation-kit
```

これで Julius と Juliusディクテーションキットがインストールされました。
ディクテーションキットの場所は `brew --prefix julius-dictation-kit` コマンドで調べられます。

後は、上記の `brew --prefix` コマンドでディクテーションキット内の **main.jconf** と **am-gmm.jconf** のパスを調べて `julius` に渡すことで音声認識が出来るようになります。

```bash
$ julius \
  -C `brew --prefix julius-dictation-kit`/share/main.jconf \
  -C `brew --prefix julius-dictation-kit`/share/am-gmm.jconf
```

上記のコマンドでJuliusはGMMモードで待機状態に入り、マイクに喋り始めるとリアルタイムで音声認識してくれます。

Juliusをより精密なDNNモードで起動したい場合は以下のように、**am-gmm.jconf** を **am-dnn.jconf** に変更するだけです。

```bash
$ julius \
  -C `brew --prefix julius-dictation-kit`/share/main.jconf \
  -C `brew --prefix julius-dictation-kit`/share/am-dnn.jconf
```

ディクテーションキットに関するドキュメントは下記のコマンドから参照可能です。

```
$ open `brew --prefix julius-dictation-kit`/share/doc
```

### 実行中の様子

![s1.png](https://qiita-image-store.s3.amazonaws.com/0/19622/b3a55a4b-f3cb-5772-541b-00606c286a4d.png "s1.png")

### homebrew-nlp

[homebrew-nlp](https://github.com/uetchy/homebrew-nlp)への自然言語処理系のformulaのPull-Requestお待ちしております。
Pythonのクラス定義のファイルの場所を知る。


ipythonの%pinfoを使いましょう

```
~/Documents/.../python/numpy $ ipython                                                        git[branch:master]
from sklearn.ensemble import RandomForestClassifier, ExtraTreesClassifierPython 2.7.3 (default, Apr 13 2012, 00:05:08) 
Type "copyright", "credits" or "license" for more information.

IPython 0.13 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

In [1]: from sklearn.ensemble import RandomForestClassifier, ExtraTreesClassifier

In [2]: %p
%%perl      %paste      %pdef       %pinfo      %pprint     %prun       %pushd      %pylab      
%%prun      %pastebin   %pdoc       %pinfo2     %precision  %psearch    %pwd        
%page       %pdb        %pfile      %popd       %profile    %psource    %pycat      

In [2]: %pinfo RandomForestClassifier

String Form:<class 'sklearn.ensemble.forest.RandomForestClassifier'>
File:       /Library/Python/2.7/site-packages/scikit_learn-0.13.1-py2.7-macosx-10.8-intel.egg/sklearn/ensemble/forest.py
Docstring:
A random forest classifier.

A random forest is a meta estimator that fits a number of classifical
decision trees on various sub-samples of the dataset and use averaging
to improve the predictive accuracy and control over-fitting.

...
```
pytestを使ってカバレージとか取りながら分割実行してテスト実行時間を短縮する

autopep8での例

## インストール

```text
$ pip install pytest
$ pip install pytest-cov
$ pip install pytest-xdist
```

## coverage用の設定ファイル

```text:.coveragerc
[run]
branch = True
omit = '*/site-packages/*'

[report]
include = autopep8.py
```

実行

```text
$ AUTOPEP8_COVERAGE=1 py.test -n4 --cov-config .coveragerc ¥
  --cov-report html --cov-report xml --cov-report term-missing ¥
  --cov project test/test_project.py
```
クラス名を取得する

意外に今まで使わなかったな。メモメモ。
ちょっとPHPでプラグインを作成している時に利用しました。

```php:
<?php
class foo {
    function name()
    {
        echo "Classs name is " , get_class($this) , "\n";
    }
}
// オブジェクトを生成
$bar = new foo();

// 内部から呼ぶ場合。
$bar->name();

// 外部からも呼べる。
echo "Class name is " , get_class($bar) , "\n";
?>
```

❏PHP Manual
http://php.net/manual/ja/function.get-class.php
Underscore.js 1.5.0 で _.bindAll(obj) での全関数指定が廃止

昨日リリースされた [Underscore.js](http://underscorejs.org/) 1.5.0 から、 
_.bindAll でバインドする関数名を省略する方法が使えなくなりました。

なので、これはエラーになって..

```js:
_.bindAll(obj)
```

明示的に関数名を要求するようになりました。

```js:
_.bindAll(obj, 'func1', 'func2')
```

以下、[Change Log](http://underscorejs.org/#changelog) 抜粋

> Removed the ability to call _.bindAll with no method name arguments.
> It's pretty much always wiser to white-list the names of the methods you'd like to bind.

該当のコミット: https://github.com/documentcloud/underscore/commit/bf657be243a075b5e72acc8a83e6f12a564d8f55
w3m.vimで縦分割を使用する

w3m.vimは,w3mでWebページにアクセスした結果をvim上で操作できる,すんばらしいプラグイン(当社比).
これにより,いちいちブラウザに移ることなく,コンソールでWeb上のリファレンスを開きながら開発することができる.

https://github.com/yuratomo/w3m.vim

最近ちょこちょこ弄っているPySideは,pydocがまともに書かれていない.
そのためhelp(PySide.〜)としても殆ど情報が得られずに,どうしてもWeb上のリファレンスを見にいかねばならず,コンソール←→ブラウザの移動が地味にストレスだった.
w3mによりその状況が改善され,かなりテンション上がった.(その結果として,周囲にかわいそうなものを見る目で見られたが,それは瑣末事だ.)

![Screen Shot 2013-07-07 at 13.23.35.png](https://qiita-image-store.s3.amazonaws.com/0/1835/f4c6a4ca-4618-3d2e-774a-6b54f95e789d.png "Screen Shot 2013-07-07 at 13.23.35.png")

ただ,w3mは現時点(2013/07/07 13:00時点)では縦分割したウインドウにページを開くことに対応していない.(横分割は`W3mSplit`コマンドで可能)
ソースコードとリファレンスを縦に並べたいと思うときも割合多く,その場合はウインドウを縦に分割した後に,片方のバッファに`W3m`コマンドでWebページを読み込む必要があった.
ちょっと面倒くさい...

ソースコードを見たところ,それほど複雑なものでもなかったため,VimScriptの練習がてら,縦分割対応のコマンドを追加してみた.
`W3mVSplit`コマンドで,縦分割したウインドウでページを開くことができる.(引数は`W3mSplit`と同じ)

https://github.com/FGtatsuro/w3m.vim/tree/vsplit

![Screen Shot 2013-07-07 at 13.43.54.png](https://qiita-image-store.s3.amazonaws.com/0/1835/fbf79bd0-8b7e-a4fc-05d2-d36941f3649b.png "Screen Shot 2013-07-07 at 13.43.54.png")

# 追記

本家に,Pull Requestをマージしてもらえました!
https://github.com/yuratomo/w3m.vim/pull/18
StoryboardでUITableViewCellのPrototypeにUIGestureRecognizerを適用できない

Storyboardには、UIGestureRecognizerも配置できますが、UITableViewCellのPrototypeにOutletを紐付けるとビルド時にエラーとなります。

*error: Illegal Configuration: Gesture recognizers cannot be used on prototype objects.*

エラー内容によると、ジェスチャはStoryboardのプロトタイプオブジェクトでは使えないようです。
コードで何とかするしかないですが、UITableViewCellは再利用を前提としていて、初めてデキューされたオブジェクトだけにジェスチャを紐付けするように工夫する必要があります。

```objc:
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
BOOL found = NO;
for (UIGestureRecognizer *gesture in cell.gestureRecognizers) {
    if ([gesture isMemberOfClass:[UILongPressGestureRecognizer class]]) {
        found = YES;
        break;
    }
}
if (!found) {
    UILongPressGestureRecognizer *gesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleLongPressGesture:)];
    [cell addGestureRecognizer:gesture];
}
```

ちなみに、if (!found)の判定をなくして、cell.gestureRecognizersにジェスチャが複数回登録された場合どうなるかを確認したところ、handleLongPressGesture:が実行されるのは1回だけでした。
複数回登録したとしても動作上問題は無さそうですが、もしかしたら弊害があるかもしれないので、特に理由がなければ登録は1回だけにしておいたほうがいいと思います。
(XCode 4.6.3 + iOS 6.1 SDK + iPhone 6.1 Simulatorで確認)
dice.py

問題はこちら
http://nabetani.sakura.ne.jp/hena/ord12rotdice/

解説はこちら
http://qiita.com/saihon2013/items/db2241d91132d750b70e

```py:
# -*- coding: utf-8 -*-
S = "SNWE"

def rotate(dice,c):
    i, j = S.index(c)/2, S.index(c)%2
    dice[i], dice[i+1] = dice[i+1], dice[i]
    dice[i+j] = 7 - dice[i+j]
    return dice[1]

def solve(q):
    dice = [2,1,3]
    ans = [1]+map(lambda c: rotate(dice,c),q)
    return ''.join(map(str,ans))

for line in open('test.txt').readlines():
    no,q,a = line.split()
    ans = solve(q)
    print(no + "\t" + ans + (" o" if ans == a else " x"))
```

```text:test.txt
0 	NNESWWS 	15635624
1 	EEEE 	13641
2 	WWWW 	14631
3 	SSSS 	12651
4 	NNNN 	15621
5 	EENN 	13651
6 	WWNN 	14651
7 	SSNN 	12621
8 	NENNN 	153641
9 	NWNNN 	154631
10 	SWWWSNEEEN 	12453635421
11 	SENWSWSNSWE 	123123656545
12 	SSSWNNNE 	126546315
13 	SWNWSSSWWE 	12415423646
14 	ENNWWS 	1354135
15 	ESWNNW 	1321365
16 	NWSSE 	154135
17 	SWNWEWSEEN 	12415154135
18 	EWNWEEEEWN 	13154532426
19 	WNEWEWWWSNW 	145151562421
20 	NNEE 	15631
21 	EEEEWNWSW 	1364145642
22 	SENNWWES 	123142321
23 	SWWWSNSNESWW 	1245363635631
24 	WESSENSE 	141263231
25 	SWNSSESESSS 	124146231562
26 	ENS 	1353
27 	WNN 	1453
28 	SSEENEEEN 	1263124536
29 	NWSNNNW 	15414632
30 	ESSSSSWW 	132453215
31 	ESE 	1326
32 	SNWNWWNSSSS 	121456232453
33 	SWEESEN 	12423653
34 	NEEWNSSWWW 	15323631562
35 	WSEW 	14212
36 	SWSNNNSNWE 	12464131353
37 	ENWEWSEEW 	1351513545
38 	WSEWN 	142124
39 	EWNEESEWE 	1315321414
40 	NESEEN 	1531263
41 	WSW 	1426
42 	ENEWE 	135656
```
CentOS6.x に yum で nginx をインストール


参考:  http://d.hatena.ne.jp/yoshi-ken/20120205

公式 rpm パッケージをインストール

```
$ sudo rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
$ sudo yum install nginx
```

起動確認

以下のコマンドでバージョン確認

```
$ nginx -v
```

以下のコマンドでサーバ起動し、ブラウザでアクセスしてみて"Welcome to nginx" が表示されればOK

```
  136  nginx -c /etc/nginx/nginx.conf
```
Scala Unsigned test


passeraを使って以下のように書けますけど、ULongが-値になってしまったりします。

Passera: https://github.com/nystrom/scala-unsigned

```scala
import passera.unsigned._
import passera.numerics._

object Short {
	def apply(a:Int):Short = a.toShort
	def apply(a:UInt):Short = a.toShort
	def apply(a:Long):Short = a.toShort
	def apply(a:ULong):Short = a.toShort
}
object UShort {
  def apply(a:UByte):UShort = a.toUShort
  def apply(a:UInt):UShort = a.toUShort
  def apply(a:ULong):UShort = a.toUShort
  def apply(a:Int):UShort = a.toUShort
  def apply(a:Long):UShort = a.toUShort
}
object Long {
	def apply(a:Int):Long = a.toLong
	def apply(a:UInt):Long = a.toLong
	def apply(a:ULong):Long = a.toLong
}
object ULong {
  def apply(a:UInt):ULong = a.toULong
  def apply(a:ULong):ULong = a.toULong
  def apply(a:Int):ULong = a.toULong
  def apply(a:Long):ULong = a.toULong
}

object t2 {
  val zero = 0.toUInt
	def main(args:Array[String]) {

      println("short test")
	  println(UShort(0xffff))
	  println(UShort(UShort(0xffff)+UShort(0xffff)).toHexString)
	  println(Short(Short(0xffff)+Short(0xffff)))
	  println(Short(UShort(UShort(0xffff)+UShort(0xffff))))
	  println(Short(111L))
	  println(ULong(0x7fffffffffffffffL).toString)
	  println(ULong(0x8000000000000000L).toString)
	  println(ULong(0xffffffffffffffffL).toString)
	}
}
```
command >& /dev/null でエラーと標準出力を捨てる

```bash:エラーと標準出力を捨てる
command >& /dev/null
```

```bash:ファイルに保存したい時
command >& hoge.txt
```

http://dqn.sakusakutto.jp/2012/06/shell_dev_null_2_1_crontab.html
のコメント欄に感謝
unite.vim まとめ


# unite.vim とは

vim 用の統合ユーザインターフェース。

様々なデータを共通のインタフェースを用いて操作できる。
unite.vim のインターフェースを学習するだけで色々なデータを簡単に操作できるようになり、また異なる種類のデータを同時に操作できる。

例えば、ノーマルモードで以下のコマンドを実行すると、カレントディレクトリとバッファの一覧を同時に表示できる。

    :Unite file buffer

# 導入方法

unite.vim は GitHub で公開されている。
[Shougo/unite.vim](https://github.com/Shougo/unite.vim)

NeoBundle を導入済みの場合は、まずは以下を .vimrc に記述する。

    NeoBundle 'Shougo/unite.vim'

そして、ノーマルモードで以下のコマンドを実行すると、 unite.vim をインストールできる。

    :NeoBundleInstall

# 使い方

## 操作の流れ

 1. データの種類(Source)を選択
 2. データを選択
 3. Action を選択

## 操作方法

 1. `:Unite {source}` を実行し、 unite を起動する
 2. データの一覧からデータを選択する(カーソルをデータに合わせる)
 3. Action を選択する
     * `<Tab>` を押すと、 Action の一覧が出力される。その一覧から実行したい Action を選択する。
     * `<Tab>` の代わりに `<Enter>` を押すと、 default のアクションをすぐに実行できるので便利。

## 実行例
例えば、 source として *file* を指定する場合は、以下のコマンドを実行する。

    :Unite file

上記コマンドを実行すると、カレントディレクトリのディレクトリとファイルが一覧表示される。
この時に insert モードに入ることで、データの絞り込みを行えるので便利。


Source が file の場合は、 default のアクションは file の *open* なので、ファイル選択中に Enter キーを押すと選択中のファイルを開くことができる。

## Source

よく利用する source の一覧。

| source    | 内容 |
|-----------|------|
| file      | カレントディレクトリのファイルとディレクトリ一覧 |
| file/new  | ファイルの新規作成 |
| file_mru  | 最近開いたファイル(Most Recently Used)の一覧 |
| buffer    | buffer の一覧 |
| register  | register の一覧 |
| source    | unite の source の一覧 |

## insert モードでの操作

unite 起動時の insert モードでよく利用する操作の一覧。

| キー | 動作 |
|------|------|
| Ctrl + p | 上の候補に移動 |
| Ctrl + n | 下の候補に移動 |
| Enter | default の Action を実行 |
| Tab | Action 選択画面に移行 |

## Tips

 * Unite の停止
   * q で unite が停止する。

# .vimrc

以下は私の unite.vim の設定。

```vim:.vimrc
" Unite
NeoBundle 'Shougo/unite.vim'
let g:unite_enable_start_insert=1
let g:unite_source_history_yank_enable =1
let g:unite_source_file_mru_limit = 200
nnoremap <silent> ,uy :<C-u>Unite history/yank<CR>
nnoremap <silent> ,ub :<C-u>Unite buffer<CR>
nnoremap <silent> ,uf :<C-u>UniteWithBufferDir -buffer-name=files file<CR>
nnoremap <silent> ,ur :<C-u>Unite -buffer-name=register register<CR>
nnoremap <silent> ,uu :<C-u>Unite file_mru buffer<CR>
```

上記設定をすると、 insert モードで unite が起動する。

また、ノーマルモードで  `,uu` と入力するだけで source に file_mru と buffer が指定された状態で unite が起動するのでとても便利。

ノーマルモードで `,uy` と入力すると、 yank の履歴が表示される。

# 参考

 * [unite.vim について語る - C++でゲームプログラミング](http://d.hatena.ne.jp/osyo-manga/20130307/1362621589)
   * unite.vim の概要、導入方法、操作方法、 tips について分かりやすく記述されている
   * おすすめのページ

 * [Vimでファイラー兼ランチャーなunite.vimプラグインを使う](http://blog.ruedap.com/entry/20110110/vim_unite_plugin)
   * このページに書かれている .vimrc はとても参考になりました
Eclipse Keplerで入れておくと便利なプラグイン

Eclipse 4.3 Keplerがリリースされましたが、今回はそんなKeplerに入れておくと便利なプラグインをまとめてみます。
ただし、中には非安定版も含みますので、ご注意ください!

| plugin名 | update site | 備考 |
|:--:|:--|:--|
| JDEclipse-Realign | http://mchr3k-eclipse.appspot.com/ |  |
| Scala IDE | http://download.scala-ide.org/sdk/e38/scala210/stable/site |  |
| StartExplorer Eclipse plug-in | http://basti1302.github.com/startexplorer/update/ |  |
| DBViewer UpdateSite | http://www.ne.jp/asahi/zigen/home/plugin/dbviewer/ |  |
| Groovy-Eclipse | http://dist.springsource.org/release/GRECLIPSE/e4.3/ |  |
| SpringSource Update Site for Gradle Integration for Eclipse | http://dist.springsource.com/release/TOOLS/gradle |  |
| EclEmma | http://update.eclemma.org |  |
| TestNG | http://beust.com/eclipse |  |
| EGit | - |  |
| m2e | - |  |
ShareFestを試した

https://github.com/Peer5/ShareFest

WebRTCをつかった 1:n のファイル交換ができる。

* ある人が、このページにファイルをアップロード。
* URLが生成されるので、別の複数の人がそのページヘアクセスするとアップロードしたファイルがダウンロード出来る。

Chrome 26+, Firefox 22+ が必要。

単純な共有なら、問題なくできるので、社内の適当なサーバにいれておくのもいいかもしれない。

## npm

npmがインストールされていない人向け

```
brew update
brew install npm
npm install forever -g
```

以下をpathに追加する

```
/usr/local/share/npm/bin
```

### インストール

```
git clone https://github.com/Peer5/ShareFest.git
cd ShareFest
npm install
chmod +x run-prod.sh
```

### server.jsをちょっといじる

listenが80なので、任意のポート(この場合は8000)に変更

```
--- a/server.js
+++ b/server.js
@@ -22,8 +22,8 @@ app.configure('development', function () {
 });
 
 app.configure('production', function () {
-    console.log('listening to port 80')
-    server = app.listen(80); //nodejitsu will map this to 80
+    console.log('listening to port 8000')
+    server = app.listen(8000); //nodejitsu will map this to 80
     signaling.start(server);
 });
```

### 起動

```
./run-prod.sh
```

無事、`http://localhost:8000/`へアクセスすると無事 画面が表示され、P2Pによるデータ交換も
できましたとさ。

ちなみに停止は

```
forever stop server.js
```
dice.rb

問題はこちら
http://nabetani.sakura.ne.jp/hena/ord12rotdice/

```rb:
S = "SNWE"

def solve(q)
  dice = [2,1,3]
  [dice[1]] + q.chars.map{|c|
    i, j = S.index(c)/2, S.index(c)%2
    dice[i], dice[i+1] = dice[i+1], dice[i]
    dice[i+j] = 7 - dice[i+j]
    dice[1]
  }
end

DATA.readlines.each do |line|
  no,q,a = line.split
  ans = solve(q).join.to_s
  print no + "\t" + ans
  puts ans == a ? ' o' : ' x'
end
__END__
0 	NNESWWS 	15635624
1 	EEEE 	13641
2 	WWWW 	14631
3 	SSSS 	12651
4 	NNNN 	15621
5 	EENN 	13651
6 	WWNN 	14651
7 	SSNN 	12621
8 	NENNN 	153641
9 	NWNNN 	154631
10 	SWWWSNEEEN 	12453635421
11 	SENWSWSNSWE 	123123656545
12 	SSSWNNNE 	126546315
13 	SWNWSSSWWE 	12415423646
14 	ENNWWS 	1354135
15 	ESWNNW 	1321365
16 	NWSSE 	154135
17 	SWNWEWSEEN 	12415154135
18 	EWNWEEEEWN 	13154532426
19 	WNEWEWWWSNW 	145151562421
20 	NNEE 	15631
21 	EEEEWNWSW 	1364145642
22 	SENNWWES 	123142321
23 	SWWWSNSNESWW 	1245363635631
24 	WESSENSE 	141263231
25 	SWNSSESESSS 	124146231562
26 	ENS 	1353
27 	WNN 	1453
28 	SSEENEEEN 	1263124536
29 	NWSNNNW 	15414632
30 	ESSSSSWW 	132453215
31 	ESE 	1326
32 	SNWNWWNSSSS 	121456232453
33 	SWEESEN 	12423653
34 	NEEWNSSWWW 	15323631562
35 	WSEW 	14212
36 	SWSNNNSNWE 	12464131353
37 	ENWEWSEEW 	1351513545
38 	WSEWN 	142124
39 	EWNEESEWE 	1315321414
40 	NESEEN 	1531263
41 	WSW 	1426
42 	ENEWE 	135656
```
解説

・サイコロの状態の持ち方について
　サイコロは6面ありますが、3面の位置関係がわかっていれば残りの面の位置はわかるので、`dice=[2,1,3]`でサイコロの初期状態をもたせます。順番は`[x軸,z軸,y軸]`の順です。

・転がしたときの状態の変化について
　北または南に転がすと、必ずx軸とz軸の面が入れ替わり、東または西に転がすと必ずz軸とy軸の面が入れ替わります。ここで状態を`[x軸,z軸,y軸]`の順で持っていると南北は第１要素と第２要素、東西は第２要素と第３要素を入れ替えればいいので、`S = "SNWE"`という文字列を作れば、`S.index(c)/2`で入れ替える場所が判断できます。`c`は東西南北のE,W,S,Nのいずれかです。
　さらに、要素を入れ替えのみでは十分ではなく、各軸の軸方向にどちらの面（1or6, 2or5, 3or4）が来るか考える必要があります。ここで、要素入れ替え後、南に転がしたときはx軸の面、北に転がしたときはz軸の面、西に転がしたときはz軸の面、東に転がしたときはy軸の面の裏表が必ず入れ替わるという法則に気がつけば、`S.index(c)/2+S.index(c)%2`で入替える要素を指定できます。コード中では`i=S.index(c)/2`で置き換えてます。面の裏表の入替え自体は7から今の面の数を引けば、1なら6、２なら5、３なら…と求まります。

個人的にこのコードのポイントと思うところは`[x軸,z軸,y軸]`の順番と文字列`"SNWE"`の順番です。
MacにRuby2.0とRails4をインストール

Homebrewを使用します。まずrbenvのインストール。

```
$ brew update
$ brew install rbenv
$ brew install ruby-build
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
```

Ruby 2.0系の最新バージョンを確認します。

```
$ rbenv install -l
(中略)
  2.0.0-dev
  2.0.0-p0
  2.0.0-p195
  2.0.0-preview1
  2.0.0-preview2
  2.0.0-rc1
  2.0.0-rc2
  2.1.0-dev
```

現時点で最新版である2.0.0-p195をインストールします。

```
$ rbenv install  2.0.0-p195
```

サブコマンドglobalで2.0.0-p195を使用する、という設定ができます。

```
$ rbenv global  2.0.0-p195
```

これでRuby2.0の使用環境が整いました。
続けてRails4のインストール。

```
$ gem i rails --version 4.0.0 --no-ri --no-doc
```

早速railsコマンドを動かしてアプリを作ります。

```
$ rails new appname
$ cd appname
$ rails g scaffold Blog blog:string
$ rake db:migrate
$ rails server
```

ブラウザで http://localhost:3000/blogs を開くと簡単なアプリが動作します。
rails3-jquery-autocomplete を使ってフォームの値を連動して変更させる

* jQuery とか Ajax とかの原理をいまいち分かってないから，こういう便利なものに頼らざるを得ないんだよね…
* 'rails3-jquery-autocomplete' って名前だが, Rails4 でも問題なく使える．

``` Gemfile

gem 'rails3-jquery-autocomplete', git: 'https://github.com/francisd/rails3-jquery-autocomplete'

```

面倒だからサンプルはすべて自分のアプリから抜粋．


#### 1. 使用するフォームのコントローラーで補完したいモデル・カラムを宣言する．

``` sbizs_controller.rb
class SBizsController < ApplicationController
  autocomplete :building, :name, :full => true, :extra_data => [:default_client_id, :default_client_name]
…
end
```

* :extra_data でフィールドに入れたい Building モデルのカラムを指定する．
* SQLでデータを直接引っ張ってるっぽいので building.rb で定義した仮想カラムは使えない．

#### 2. フォームで autocomplete_field_tag を使う．

``` form.html.erb

<%= autocomplete_field_tag :building_name, @s_biz.building.try(:name), autocomplete_building_name_s_bizs_path, :id_element => "#s_biz_building_id", :update_elements => {:default_client_id => "#s_biz_sale_attributes_client_id", :default_client_name => "#s_biz_sale_attributes_client_name"}, :required => true %>
<%= f.hidden_field :building_id, :value => @s_biz.building.try(:id) %>

```

* 肝は :update_elements で，ハッシュで :(extra_data で登録したカラム) => "(値を更新するフィールドのセレクタ)" で指定している．複数指定可能．
* ちなみにこの s_biz の 持っているカラムは building_id なので実際にレコードに使用されているのは 下の hidden_field のみ．上の autocomplete_field_tag の :id_element を用い補完されたレコードの id で更新している．…こんな回りくどいことする必要あるのかな？
Rでたくさんの遺伝子の配列を一気に取得する方法

## はじめに
「これらの遺伝子の配列をマルチプルアラインメントしたい」ということが普段からあると思います．
それにはまず，遺伝子の配列をどこからから入手しないといけません．
例えば，それらの遺伝子のEnsembl Gene IDが分かっているとき，ウェブブラウザからEnsemblのサイトに行き→Gene ID を検索窓に入れて→検索結果から数クリックして配列にたどり着いて→ドラッグしてコピペ，という作業を繰り返すという方法があります．
これはとても非人間的な時間だと思います．
そこで，Bioconductorのパッケージである`biomaRt`と`Biostrings`を利用して，そういった作業を自動化しましょう．

## 実際のコマンド 

まず，`biomaRt`パッケージを使ってEnsemblデータベースにアクセスします．

```r:biomaRtを使ってEnsemblデータベースにアクセス
library(biomaRt)
ensembl <- useMart("ensembl")
```
自分が利用したいデータセットの名前を確認します．

```r:利用できるデータセットの一覧を表示
listDatasets(ensembl)
```

利用するデータセットを指定します．
（ここではゼブラフィッシュ（Danio rerio）のゲノムデータベースを指定）

```r:利用するデータセットの指定
ensembl <- useDataset("drerio_gene_ensembl", mart=ensembl)
```

あらかじめ用意してあるEnsembl Gene IDを文字列ベクトルにします．ここでは直接コマンドに書き込んでいますが，IDのリストのファイルを読み込むという方法もあります．

```r:文字列ベクトルとしてIDを表現
id <- c("ENSDARG00000044774", "ENSDARG00000070913")
```

Ensembl Gene IDで指定された遺伝子のcDNA配列を取得します．

```r:cDNA配列の取得
seq <- getSequence(id=id, type="ensembl_gene_id", seqType="cdna", mart=ensembl)
```

`seqType`の指定を変えることで，遺伝子のゲノム配列（エキソン＋イントロン）を取得することもできます．

```r:ゲノム配列の取得
seq <- getSequence(id=id, type="ensembl_gene_id", seqType="gene_exon_intron", mart=ensembl)
```

取得した塩基配列をFASTAフォーマットで書き出します．
なお，`getSequence`で取得した配列は，1列目に配列，2列目にIDが格納されたデータフレームという形になっているため，`seq[,1]`のような書き方をしています．

```r:FASTAフォーマットでの保存
library(Biostrings)
dna <- DNAStringSet(seq[,1])
names(dna) <- seq[,2]
writeXStringSet(dna, file="hoge.fa", format="fasta")
````

## 応用
今回は，データベースをEnsembl，IDをEnsembl Gene IDとしました．
この他にも，データベースを変えたり，別の種類のIDで遺伝子を指定したり，遺伝子のIDでなく，染色体上のstartとendによって指定することも可能です．
詳しくは，`biomaRt`のUser guideをご覧下さい．
http://www.bioconductor.org/packages/release/bioc/html/biomaRt.html

### 接続できるBioMartデータベースの種類
`listMarts()`で調べることができます．

### typeの種類
`listFilters()`で調べることができます．

### seqTypeの種類
今回は，cDNA配列とゲノム配列だけ紹介しましたが，以下のように様々なバリエーションで配列を取得することが可能です．

- ’cdna’
- ’peptide’ for protein sequences
- ’3utr’ for 3’ UTR sequences,
- ’5utr’ for 5’ UTR sequences; 
- ’gene_exon’ for exon sequences only; 
- ’transcript_exon’ for transcript specific exonic sequences only;
- ’transcript_exon_intron’ gives the full unspliced transcript, that is exons + introns;
- ’gene_exon_intron’ gives the exons + introns of a gene;
- ’coding’ gives the coding sequence only;
- ’coding_transcript_flank’ gives the flanking region of the transcript including the UTRs, this must be accompanied with a given value for the upstream or downstream attribute;
- ’coding_gene_flank’ gives the flanking region of the gene including the UTRs, this must be accompanied with a given value for the upstream or downstream attribute; 
- ’transcript_flank’ gives the flanking region of the transcript exculding the UTRs, this must be accompanied with a given value for the upstream or downstream attribute; 
- ’gene_flank’ gives the flanking region of the gene excluding the UTRs, this must be accompanied with a given value for the upstream or downstream attribute.
【Unity】【NGUI】UILabelにゼロ埋め処理

![1.png](https://qiita-image-store.s3.amazonaws.com/0/18411/253cc32d-c6df-f80f-8985-6731b6ec626c.png)

###Source Code

// UILabelのゲームオブジェクト
public GameObject Score;

// 既にUILabelのTextに9桁の0と1を入力した数字を取得(最初は000000001)
string score = this.Score.GetComponent<UILabel>().text;

// 前回のスコアをInt型に変換し、+1にする
int totalScore = System.Convert.ToInt32(score) + 1;

// 数字を文字列型に変換
score = totalScore.ToString();

// 最後に数字以外は0を埋める
this.Score.GetComponent<UILabel>().text = score.PadLeft(9, '0');
[Android] native→webviewへ大きめのデータを渡す

webviewへデータを渡すには

```java:
String url = "javascript:setImg(data)";
wv.loadUrl(url);
```

のような形がお約束。
ではこれでどのくらいのデータが渡せるか。
渡し方から想像できるようにURLとしての長さの制限(256)を受けます。
つまり関数名やあたまのjavascript:を考えると200ちょっと。

普通はこれで足りるんですが、画像データをbase64形式で渡したかったんです。

で、考えたのはjavascriptの関数を読んで、またnativeを呼び返して、と繰り返していけば40kのデータでも200回繰り返せば渡せるな、と。
そんなにnative-webviewの連続呼び出しがスムーズに行くのかって疑問があるので検証。

まずはbase64のデータを配列にしてコマ切れに。base64にするときにNO_WRAP指定すると改行が無くせます。
URLに改行入ってくると面倒なので先に。

```java:
Base64.encodeToString(bytearray, Base64.NO_WRAP);

private String[] imagedata;
private int maxDataLength=100;
private void callbackPhoto(String image64) {
    int datalength = image64.length();
    imagedata=new String[(int) Math.ceil((double)datalength/(double)maxDataLength)];
    for(int i=0;i<imagedata.length;i++){
        int start =maxDataLength*i;
        int limit =Math.min(start+maxDataLength,datalength);
                imagedata[i] = image64.substring(start,limit);
    }
    wv.loadUrl("javascript:setImg(1,\""+imagedata[0]+"\")");
}
```

javascriptにはいくつめのデータかと、細切れにしたデータを渡してます。


次にjavascript。今回はcount=0のデータがくると最後のデータと判別してます。

```js:
base64data="";
function setImg (count,data) {
	base64data+=data;
	if(count==0){
    	setImage(base64data);
	 }else{
    	AndroidApp.getNextImgData(count+1);
	}
}
```

受け取ったらnativeのgetNextImgDataを呼んで次のデータを待つ。
setImage は後で呼びます。

handler用意して、

```java:
Handler mHandler = new Handler();
```

interfaceでうけとる。スレッドのアレがあるのでhandlerで呼んで

```java:
@JavascriptInterface
public void getNextImgData(final int count){
    mHandler.post(new Runnable() {
        public void run() {
            callbackPhoto2Next(count);
        }
    });
}
```

次のデータを渡す。最後だったら0を一つ目のパラメータに。

```java:
private void callbackPhoto2Next(int count) {
    int id=count;
    if(imagedata.length==count){
        id=0;
    }
    String url = "javascript:setImg("+id+",\""+imagedata[count-1]+"\")";
    wv.loadUrl(url);
}
```

全部渡しきったらあとはJSでcanvasに表示。

```js:
function setImage (result) {
    c = document.getElementById("canvas");
    ctx = c.getContext("2d");
    img = new Image();
    img.onload = function(){
    	ctx.drawImage(img, 0,0,img.width, img.height, 0,0,img.width, img.height);
    };
    img.src = "data:image/jpeg;base64,"+result;
}
```


こんなに何度もやり取りしたら遅いだろうと思ったら、30kのデータで0.15s。十分実用範囲。
Gitコマンド一覧

#作業ディレクトリにGitを使う宣言をする

```
>> git init
```

#ステージングエリアにあげる

```
>>  git add (ファイル名) or git add .
```

#コミットする

```
>> git commit "コミット名"
```

#コミットメッセージを１行以内に納める

```
>> git commit -m "コミット名"
```

#一つ前のコミットと統合する

```
>> git commit --amend -m "コミット名"
```

#gitのログを確認する

```
>> git log
```

#Gitのlogを簡潔にまとめて表示する

```
>> git log --oneline
```

#オプション
git log --oneline
git log -p(変更した場所を見たい場合)
git log --stat(より詳しく変更した場所を見たい場合)

#現在の状態

```
>> git status
```

#前の状態に戻る

```
>> git checkout --(file名)
```

#何処を編集したのか知りたい場合

```
>> git diff
```

#ステージングエリアにあげた場合、コミットで変更されるファイルが分かる

```
>> git diff --cached
```

#コミットした後の編集されたファイルが分かる

```
>> git diff -r (ID名)
```

#git addを取り消す

```
>> git reset HEAD または　git reset HEAD　(ファイル名)
```

#直前に戻る

```
>> git reset --hard HEAD
```

#１つ前に戻る

```
git reset --hard HEAD^
```

#指定されたlogに戻る

```
>> git reset --hard　(ID)
```
#マージを始めた頃のブランチに戻る

```
>> git reset --hard ORIG_HEAD
```

#git 修正したファイルの変更を取り消す事はできるけど、特定のバージョンに戻したい場合

```
>> git checkout コミット ファイル
```

#ブランチの一覧表示

```
>> git branch
```

#ブランチを作る

```
>> git branch
```

#ブランチを削除

```
>> git branch -d (ブランチ名)
```

#リポジトリの複製

```
>> git clone git@(アドレス名)
```

#新規ブランチを作りそれをカレントブランチにする

```
>> git checkout -b (ブランチ名)
```

#リモートリポジトリにPushする前に登録するコマンド

```
>> git remote add origin(リモートリポジトリ名) git@~
```

#リモートリポジトリ削除

```
>> git remote rm origin
```

#ローカルリポジトリをリモートリポジトリに同期する

```
>> git fetch origin
```

#リモートブランチと同期したデータ、追跡ブランチをローカルリポジトリに取り込む

```
>> git merge origin / (ブランチ名)
```

#mergeとfetchをまとめて行う

```
>> git pull origin  (ブランチ名)
```

#ローカルブランチのデータをリモートブランチに送る（最新のもの）

```
>> git push origin  (ブランチ名)
```

#他のブランチを現在のカレントブランチに取り込む

```
>> git merge (branch name)
```

#rebaseをする(履歴を綺麗にする、まとめてコミットを取り込む)

```
>> git rebase (branch name)
```

#rebaseインタラクティブモード

```
# intの所にはなにか任意の数字を入れる
>> git rebase -i HEAD~int
```

#cherry-pickをする(直接コミットを取り込みたいとき)

```
>> git cherry-pick (コミットID)
# コミットIDはgit logで確認
```

#git の履歴を削除する

```
>> git filter-branch -f --index-filter 'git rm --ignore-unmatch filename' HEAD
#  -rfを付けるとディレクトリを削除

>> git filter-branch -f --index-filter 'git rm -rf --ignore-unmatch dirname' HEAD

```

#名前の登録

```
>> config --global user.name ”(your name)"
```

#メールの登録

```
>> config --global user.email "(your email)"
```

#メッセージの色分け

```
>> config --global color.ui true
```

#設定一覧

```
>> config -l
```

#ヘルプを見る

```
>> config --help
>> help config
```


#git省略コマンド
参考ページ
http://tobysoft.net/wiki/index.php?git%2F%A5%B3%A5%DE%A5%F3%A5%C9%A4%CE%BE%CA%CE%AC(alias)%C0%DF%C4%EA%A4%F2%A4%B9%A4%EB%CA%FD%CB%A1

git config --global alias.co checkout
git config --global alias.st 'status'
git config --global alias.ci 'commit -a'
git config --global alias.di 'diff'
git config --global alias.br 'branch'

.bashprofile,bashrcなどに記入
alias gco="git checkout"
alias gst="git status"
alias gci="git commit -m"
alias gdi="git diff"
alias gbr="git branch"
Mysqlコマンド

#####mysql -u (ユーザー名) = 起動
#####mysql -u  (ユーザー名) -p = パスワードを入力して起動
#####use (データベース名) = データベースを切り替えるコマンド
#####set password for root@localhost=password('設定したいパスワード');
#データの中身の確認
select * from (テーブル名)
#データベースを作る
create database (データベース名);
#####grant all on （データベース名）.* to dbuser@localhost identified by '設定したいパスワード';作業ユーザーを作る


#####テーブルを作る（例文）
create table users (
  id int not null auto_increment primary key,
  name varchar(255),
  email varchar(255) unique,
  password char(32),
  score double,
  sex enum('male', 'female') default 'male',
  memo text,
  created datetime,
  key score (score)
);

#データベースの中身の確認
show databases;
#データベースの中にあるテーブルの確認
show tables;

#####show indexes from (テーブル名)特定のテーブルにどういった索引が設定されているか
#####drop table users;
#####desc users=テーブルの構造を見る事ができる
#####insert into users =values ();レコードの挿入(挿入するレコード一覧)
#####select (フィールド名) from （テーブル名）;テーブル内のデータの確認
#####select (フィールド名) from （テーブル名） \G  テーブル内のデータを縦に表示にする

#####select (フィールド名) from  (テーブル名)where（フィールド名）（条件）
#####whereに指定する条件の種類＝
#####否定= !=,<>
#####曖昧な検索の時はlikeを使う
##### like
#####'%~'=無制限の任意の文字
#####_の場合は任意の一文字
#####between () and () でその間の条件を指定する
##### in('値','値');でその２つの条件を指定する
#####and = 共通の条件を指定する
#####or = またはの条件を指定する

#####select * from (テーブル名) order by (フィールド名);小さい順に
#####select * from (テーブル名) order by (フィールド名) desc;大きい順に
#####select * from (テーブル名) limit (数字);件数の制限
#####select * from (テーブル名) limit (数),(数);数字は添字、開始位置の指定
#####select count(*) from(テーブル名) ;レコードの総件数を調べる場合
#####select distinct (フィールド名) from (テーブル名) ;
#####select max(フィールド名) from (テーブル名) ;最大値,最小値,平均,合計(max,min,avg,sum)
#####select sum(フィールド名) from (テーブル名) group by (フィールド名);チームごとに集計する場合

#####select rand();乱数を表示させる　組み合わせselect * from (テーブル名) order by rand() limit 1;
#####select (フィールド名),length(フィールド名)from(テーブル名)  ;文字数の長さを調べる
#####select concat(フィールド名, '(', フィールド名, ')') from users;文字数を連結させる
#####select concat(フィールド名, '(', フィールド名, ')') as (ラベル名) from users;ラベルをつける
#####select now();現在時刻を表示する
#####レコードの更新
#####update (テーブル名) set  = 'kimura@dotinstall.jp' where id = (数字);
#####delete from (テーブル名) where　(フィールド名)  <= 3.0;レコードの削除


#####alter table  (テーブル名)  add (追加するフィールド名) varchar(255) ;テーブルの構造を変更させたい場合,フィールドを足す、どのフィールドの下にのせるかを付ける場合はafter (フィールド名)を指定する

#####alter table  (テーブル名)  change (フィールド名)(フィールド名) varchar(100);フィールドの数値を変更する


#####alter table  (テーブル名)　add index email (email);index(索引)を追加する

#####alter table (テーブル名) drop index email;index(索引)を消去する


#####alter table (テーブル名) rename (変更するテーブル名);table名を変える

#####select users.name, posts.title from users, posts where users.id = posts.user_id;
#####複数のtableにまたがって指定していく場合は(table).(field)

#####select users.name, posts.title from users, posts where users.id = posts.user_id order by posts.created #####desc;
#####order byを組み合わせをした場合

#####mysql -u (ユーザー) -p (データベース名) < ファイル名;=外部のテキストファイルにコマンドを保存して#####使う方法
#####例 mysql -u dbuser -p blog_app < commands.sql;

#####mysqldump -(ユーザー名) -p  (データベース名) >データベース名.dump.sql=バックアップをとる
#####例 mysqldump -u dbuser -p blog_app > blog_app.dump.sql

#####mysql -(ユーザー名) -p  (データベース名) <データベース名.dump.sql=復元
#####例 mysql -u dbuser -p blog_app < blog_app.dump.sql
`vtable for xx' に対する定義されていない参照です

仮想関数が宣言されているのに定義されていないと出る。
リンカエラーかつ間接的なのでワケワカになりやすい。
仮想関数をオーバーライドした子クラスでも起きる。

```cpp::exsample.cc
class OYA{
  virtual void Hoge();
...
};

class KO : public OYA{
  void Hoge();
};
```

とやった時に、OYA::Hoge()が定義されていなくてもKO::Hoge()が定義されていなくても起きる。
Node.jsでいろんな言語を実行するモジュール作った

期末やら何やらで忙しくて全く紹介できなかったので、今更ながらやらせてもらいます。

[node-lleval](https://github.com/alucky0707/node-lleval)というモジュールを作りました。

##どんなモジュール？

[LLEval](http://colabv6.dan.co.jp/lleval.html)という小飼弾氏が公開している様々な言語を実行できるAPIのラッパーです。
Node.js上で、RubyとかPythonとか、あとはHaskellなんかが実行できてしまいます。

##インストール

普通に、

```
$ npm install lleval
```

でいいと思います。

##使い方

```js
var
lleval = require('lleval'),
hdoc = new new Function('return ' + require('hdoc').h);

lleval.evaluate('rb20', 
hdoc(function() {/*
# http://jp.rubyist.net/magazine/?0041-200Special-lazy
fizzbuzz = Enumerator.new { |yielder|
  1.upto(Float::INFINITY) do |n|
    case
      when n % 15 == 0 then yielder << "FizzBuzz"
      when n % 5 == 0 then yielder << "Buzz"
      when n % 3 == 0 then yielder << "Fizz"
      else yielder << n.to_s
    end
  end
}

fizzbuzz.first(30).each do |str|
  puts str
end
*/}), function(err, data) {
  if(err) {
    console.log('request error');
    return;
  }

  console.log(data.stdout);
});
```

ヒアドキュメントとしてコードに直接書かれたRubyのコードを実行します。雰囲気でつかんでください。あと`new new Function`はウケ狙いです。笑ってください。

ちなみに簡単なコマンドラインツールも用意したので、

```bash
$ `npm bin`/node-lleval --help
```

なんていう風にすればヘルプが見れます。

##何で作ったの？

半分ぐらいはnpmに公開してみたかったからで、もう半分は[@eval_of](https://twitter.com/#!/eval_of)というTwitterのbotを作っていたから。
この[@eval_of](https://twitter.com/#!/eval_of)は、Twitter上ソースコードをリプライで送ると実行して結果を返してくれるbotなのですが、そのコードの実行にこのライブラリを使いました。

##最後に

あまり実用性の高いライブラリではないような気がしますが、何か面白い使い方がありましたら教えてください。
また、何か問題点やら改善点を見つけたらPull Requestを送っていただけるとありがたいです。
オフラインどう書く第12回 解答例(TypeScript) 

```ts:
var rollTo = (direction: string, dice: {[key: string]: number; }): string => {
    var top = dice['Top'];
    var oppositeDirection = {'N':'S', 'E':'W', 'S':'N', 'W':'E'}[direction];
    dice[direction] = top;
    dice['Top'] = dice[oppositeDirection];
    dice[oppositeDirection] = 7 - top;
    return dice['Top'].toString();
}

var solve = (src: string): string => {
    var dice = { 'N':2, 'E':4, 'S':5, 'W':3, 'Top':1};
    var answer = dice['Top'].toString();
    for(var i=0; i<src.length; ++i) {
        answer += rollTo(src[i], dice);
    }   
    return answer;
}

var test = (src: string, expected: string) => {
    var actual = solve(src);
    var result = expected === actual ? 'ok' : '***ng***';
    console.log(result);
}

/*0*/ test( 'NNESWWS', '15635624' );
/*1*/ test( 'EEEE', '13641' );
/*2*/ test( 'WWWW', '14631' );
/*3*/ test( 'SSSS', '12651' );
//以下略
```
Redmine + Git 連携設定（Windows環境）

# Redmineのバージョン管理ソフトウェア連携
Redmineは、様々なバージョン管理ソフトウェアと連携できる。
今回は、Gitとの連携設定を実施する。

## 対応可能なバージョン管理ソフトウェア
* Git、SVN、Mercurial、Darcs、Bazaar、CVSに対応。主要なソフトウェアはほぼおさえられている印象。
* Bitnami Redmineには、SVNが同梱されているため、SVNが配置されているディレクトリにパスさえ通せば、連携可能である模様。
* ただし、今回はバージョン管理ソフトとしてGitを使いたかったので、Git連携の設定をすることにした。

## バージョン管理ソフトウェア連携の前提
公式日本語ページによると、以下の前提条件がある模様。

* バージョン管理ソフトウェアとRedmineが同一ホスト上にインストールされていること
* バージョン管理ソフトウェアがRedmineからの読み込み、実行可能であること

# Redmine + Git 連携 
## 今回利用した環境
* Windows 7 Professional 64bit
* Redmine 2.3.1-3(bitnami redmine)
* Git 1.8.1.2-preview20130201 

公式ページによるとGitの対応バージョンは1.5.4.2となっていたが、上記のバージョンでも今のところ問題なく連携できている。
また、Redmineの両方を入れた時点で、Redmine側でもともとインストール済みだったGitの存在とバージョンが自動認識されていた。

## リポジトリ登録
* 1. 適当なディレクトリにgitリポジトリを作成
* 2. Redmine上でプロジェクトを選択し、画面上部のメニューから[設定]を選択。
* 3. メニュータブから[リポジトリ]を選択。
* 4. [新しいリポジトリ]を選択。
* 5. Gitのリポジトリを指定。
* 5-1. バージョン管理システムに「Git」を指定。
* 5-2. リポジトリのパスを指定。（リポジトリのフルパス/.git）
* 5-3. [作成]ボタンを押下。

これだけで終わり。

## リポジトリの参照
上記の手順が完了したら、画面上部のメニューにリポジトリが追加されていて、
登録したリポジトリに置かれたファイルを閲覧、ダウンロードしたり、
コミットの統計情報を確認できる。

リポジトリビューアとしてなかなか使えそう。
第12回オフラインリアルタイムどう書くの問題をRubyで解く

問題は http://qiita.com/Nabetani/items/f3cca410428f90333e28 から

解法１素直に？

```rb:
def solve(q)
#       T  N  W  E  S  B
  dice=[1, 2, 3, 4, 5, 6]
  q.chars.each_with_object([1]){|dir, ans|
    w = dice.clone
    case dir
    when 'N'
      w[0] = dice[4]
      w[1] = dice[0]
      w[4] = dice[5]
      w[5] = dice[1]
    when 'S'
      w[0] = dice[1]
      w[1] = dice[5]
      w[4] = dice[0]
      w[5] = dice[4]
    when 'E'
      w[0] = dice[2]
      w[2] = dice[5]
      w[3] = dice[0]
      w[5] = dice[3]
    when 'W'
      w[0] = dice[3]
      w[2] = dice[0]
      w[3] = dice[5]
      w[5] = dice[2]
    end
    dice = w
    ans << dice[0]
  }.join
end

DATA.readlines.each do |line|
  no,q,a = line.chop.split(/\s+/)
  ans = solve(q)
  print no + "\t" + ans
  puts ans == a ? ' o' : ' x'
end
__END__
0	NNESWWS	15635624
1	EEEE	13641
2	WWWW	14631
```

```rb:
class Dice
  def initialize
    @ns = [1, 5, 6, 2]
    @ew = [1, 3, 6, 4]
  end
  
  def rol_ns(n)
    ns = @ns
    @ns = @ns.rotate(n)
    ew = @ew.clone
    ns.zip(@ns).each{|from,to|
      i = ew.index(from)
      @ew[i] = to if i
    }
    @ns[0]
  end
  
  def rol_ew(n)
    ew = @ew
    @ew = @ew.rotate(n)
    ns = @ns.clone
    ew.zip(@ew).each{|from,to|
      i = ns.index(from)
      @ns[i] = to if i
    }
    @ew[0]
  end
end

def solve(q)
  dice = Dice.new
  q.chars.each_with_object([1]){|dir, ans|
    ans <<
      case dir
      when 'N'
        w = dice.rol_ns(1)
      when 'S'
        w = dice.rol_ns(-1)
      when 'E'
        w = dice.rol_ew(1)
      when 'W'
        w = dice.rol_ew(-1)
      end
  }.join
end

DATA.readlines.each do |line|
  no,q,a = line.chop.split(/\s+/)
  ans = solve(q)
  print no + "\t" + ans
  puts ans == a ? ' o' : ' x'
end
__END__
0	NNESWWS	15635624
1	EEEE	13641
2	WWWW	14631
```
第12回オフラインリアルタイムどう書くの問題


オフラインでリアルタイムに「どう書く」をやるイベント( http://atnd.org/events/40389 )を行っています。

問題は「サイコロを転がす」という名前で、詳細は
http://nabetani.sakura.ne.jp/hena/ord12rotdice/
です。

実装ができた方はこちらのコメント欄からリンクを張っていただくと見つけやすくて助かります。
Redmine（オールインワンパッケージ）のWindowsへの導入メモ

自宅での個人的な管理にRedmineを試用することにした。

小規模な利用ゆえ、わざわざRedmineサーバを別立てすることも無いと考え、
まずはWindowsのローカル環境に導入することにした。

以下は、そのときの作業メモである。

###1. Redmineとは
Redmineとは、Webベースのソフトウェア開発プロジェクト管理ソフトウェアである。ガントチャートによる進捗管理、Wiki等による情報共有、フォーラムによる議論、TODO管理等、プロジェクト管理に関する豊富な機能を提供する。
（git連携なんかもできるらしいが、そのあたりは未勉強。）
なお、RedmineはRuby on Railsで開発されているGPLライセンスのオープンソースソフトウェアである。

下記の通り、日本語情報もかなり豊富で素晴らしい。
http://redmine.jp/

###2. Redmine Windowsへのインストール方法
RubyForgeからRedmine本体をダウンロードして、インストールをすることができる。
しかし、Ruby、Ruby on　Rails、およびMySQLなどのRDBMSを自前で事前にセットアップしておく必要がある。
Windows環境で上記をセットアップするのは、非常に面倒くさい。

そこで、今回はRedmineのオールインワンパッケージを利用することにした。
オールインワンパッケージは、いずれも公式ではないが、何種類かある。
その中でもBitNami Redmineが最も有名らしいので、今回はこちらをチョイスした。

#### BitNami :: Redmine
http://bitnami.com/stack/redmine

このBitNami :: Redmineは、Apache HTTP Server、MySQL、Ruby On Rails、そしてRedmine本体がバンドルされたパッケージとなっている。

###3. BitNami :: Redmineのインストール

####3.1. 上記のURLから辿ってWindows用のインストーラをダウンロード
今回は、以下のバージョンのWindows用インストーラを利用。
http://bitnami.com/redirect/to/21324/bitnami-redmine-2.3.1-3-windows-installer.exe

####3.2. ダウンロードしてきたインストーラを実行
私の環境では、以下の通り、ダイアログを操作してインストールをした。

* Language Selectionで日本語を選択。
* アンチウイルスソフトと相性問題があるらしく、警告ダイアログが出る。無視して続けたが、特に問題はなかった。
* インストールフォルダを選択。デフォルトを参考に適当に。
* 管理者アカウントを作成。Redmine用のユーザ名とパスワード等を指定。

（※ 以下は、すでに各デフォルトの通信ポートが使われている場合に出るダイアログ）

* Webサーバのポート番号。Apacheサーバが利用するポートを指定する。
* WebサーバのSSL用ポート番号。
* MySQLサーバのポート番号。
* Subversionサーバのポート番号。

（※ 以上は、すでに各デフォルトの通信ポートが使われている場合に出るダイアログ）

* データベースに保管する際の規定の言語。ここでは、指定言語の日本語のままとした。
* なぜか空欄のダイアログが表示された。無視して次へを選択。
* BitNamiに関する情報に興味があれば提供する云々と言われる。ここでは、チェックボックスを外して次へを選択した。
* インストールする準備ができたと画面に表示されるので、そのまま次へを選択する。
* インストールが開始されるので、そのまま終わるまで待つ。

###4. Redmineのインストール完了確認
デフォルト設定の場合、インストール済みのマシン上で、以下にアクセスするとBitNamiの
Welcomeページが表示される。
http://localhost/

そこから、「Access」というリンクをクリックすると、Redmineのページへ移動する。そのURLは以下。
http://localhost/redmine/

正常にインストールができていれば、
このページの右上の「ログイン」リンクから、
3.2で設定したユーザ名とパスワードでログインできるはず。

PHPMyAdminでMySQLのデータベース管理も可能。
http://127.0.0.1/phpmyadmin/
tmlib.jsでカウンタ付ボタン

tmlib.jsでカウンタ付ボタンをSpriteで実装しました。
カウントアップ・ダウン対応。
カウントMAX値を超えると0に戻ります。

```js:
/**
 * カウンタ付ボタンクラス
 */
var CounterButton = tm.createClass({
	superClass: tm.app.Sprite,
	
	count: 0,                       // カウント
	countValue: 1,                  // 1回ごとのカウント値
	limit: Number.MAX_VALUE - 1,    // カウントのMAX値。超えると0
	disabled: false,
	label: null,        // カウント値表示ラベル
	
	normalImage: null,
	pushImage: null,
	filter: null,
	
	init: function(x, y, image, width, height, limit) {
		// 画像指定無しなら固定の画像を指定
		this.normalImage = (image == null) ? "button" : image;
		
		// サイズ指定無しなら画像のサイズを使用
		var img = tm.graphics.TextureManager.get(this.normalImage);
		if (width == null) { width = img.width; }
		if (height == null) { height = img.height; }
		this.superInit(width, height, image);
		this.setPosition(x, y);
		
		if (limit != null) { this.limit = limit; }
		
		this.label = tm.app.Label("");
		this.label.width = width;
		this.label.text = this.count;
		this.label.setAlign("center").addChildTo(this);
		
		// ボタン押下時のフィルター作成（ボタン押下時のImageが無い場合こちらを使用）
		var filter = tm.app.Shape(this.image.width, this.image.height);
		filter.canvas.clearColor("rgba(0, 0, 0, 0.3)");
		this.filter = filter;
		
		// マウスイベントを有効化
		this.interaction.enabled = true;
		this.interaction.boundingType = "rect";
	},
	
	update: function() {
	},
	
	// カウンタテキスト(tm.app.Label)を返す
	getLabel: function() {
		return this.label;
	},
	
	// ボタン押下時
	onpointingstart: function() {
		if (this.disabled) { return; }
		
		if (this.pushImage == null) {
			this.filter.addChildTo(this);
		} else {
			this.image = this.pushImage;
		}
	},
	
	// ボタン押下後
	onpointingend: function() {
		if (this.disabled) { return; }
		
		// 画像リセット
		this.image = this.normalImage;
		this.filter.remove();
		
		// カウントアップorダウン
		this.count += this.countValue;
		if (this.limit >= 0 && this.count > this.limit) { this.count = 0; }
		if (this.limit < 0 && this.count < this.limit) { this.count = 0; }
		this.label.text = this.count;
	},
});
```

<br/>
使用例（カウント付ボタンのクラス定義は省略）

```js:
/*
 * constant
 */
var SCREEN_WIDTH    = 640;
var SCREEN_HEIGHT   = 920;
var SCREEN_CENTER_X = SCREEN_WIDTH / 2;
var SCREEN_CENTER_Y = SCREEN_HEIGHT / 2;

// 画像のプリロード
tm.preload(function(){
	tm.graphics.TextureManager.add("button", "button.png");
});

/*
 * メイン処理(ページ読み込み後に実行される)
 */
tm.main(function() {
	
	// アプリケーション作成
	var app = tm.app.CanvasApp("#world");
	app.resize(SCREEN_WIDTH, SCREEN_HEIGHT); // リサイズ
	app.fitWindow();    // 自動フィット
	app.background = "white";
	
	// シーンを切り替える
	app.replaceScene(MainScene());
	
	// 実行
	app.run();
});


tm.define("MainScene", {
	superClass: "tm.app.Scene",
	
	init: function() {
		// 親の初期化
		this.superInit();
		
		// カウンタ付きボタン
		var counter = CounterButton(300, 100, "button");
		counter.getLabel().setFillStyle("black").setFontSize(32).setPosition(0, 10);
		counter.limit = 9;
		counter.addChildTo(this);
	},

});
```

<br/>
初期表示
![countbutton1.png](https://qiita-image-store.s3.amazonaws.com/0/25969/7e891e58-fca8-295f-0eb4-3cc641976e69.png)

<br/>
クリック or タップでカウントが上がります。
![countbutton2.png](https://qiita-image-store.s3.amazonaws.com/0/25969/06c5a591-5894-aa95-38ff-1ca0cf8e456c.png)