OmniAICreator/Qiita-1.07M huggingface dataset:
もっと短く「一反田えー(1反田A)」から「千反田える(1000反田L)」までを生成する

[もっと短く書けるなー](http://qiita.com/rsato/items/a0013f35f731ff6b494f)と思いまして。

```groovy
// 一万未満のアラビア数字を漢数字に変換します
def arabicToKanji( int num ){
    def kanjiNum = ["", "一", "二", "三", "四", "五", "六", "七", "八", "九" ]
    def kanjiOrder = ["", "十", "百", "千"]
    def order = num.toString().size()
    num.toString().collect{
        order--
        def idx = it as Integer
        ( idx>=2 || order==0 )? kanjiNum[idx]+kanjiOrder[order] : (idx==0)? "" : kanjiOrder[order]
    }.sum()
}

def alphabets = ["えー", "びー", "しー", "でぃー", "いー", "えふ", "じー", "えいち", "あい", "じぇい", "けー", "える", "えむ", "えぬ", "おー", "ぴー", "きゅー", "あーる", "えす", "てぃー", "ゆー", "ぶい", "だぶりゅー", "えっくす", "わい", "ぜっと"]

(1..1000).each{
    println "${arabicToKanji(it)}反田${alphabets[(it-1)%alphabets.size()]}"
}
```

`toString()` で文字列にしたやつを `collect()` で一文字ずつ処理して `sum()` で結合する感じで。中身の三項演算子のネストは可読性悪いね。
if文も三項演算子も書かないで条件分岐をスッキリさせる


```php
<?php
$trueCase  = 1 == 1;
$falseCase = 1 == 2;
$fn = [true  => function(){return true;}, false => function(){return false;}];

echo "trueCase\n";
var_dump($fn[$trueCase]());
echo "falseCase\n";
var_dump($fn[$falseCase]());
```

別にスッキリしなかった
コマンドプロンプトの文字コード変更

コマンドプロンプトの文字コードをUTF-8に変更したいときは、

`chcp 65001`　と打つと。。Shift_JISから。。。

![4.png](https://qiita-image-store.s3.amazonaws.com/0/44278/611c2f04-b9fc-3105-cb7b-8ae4dadf576a.png)

↓

なぜかウィンドウサイズも変わります。

![5.png](https://qiita-image-store.s3.amazonaws.com/0/44278/9d66746c-27a5-de0a-48a1-249bc34352e8.png)

これでUTF-8になりました。
[Scala]Excelシートに入力する式を生成する

Excelシートに入力する式は、IF文などを使い始めるとだらだらと長くなる。
よって、Scala等で構成してしまって、貼り付けるだけにする。

```scala
def expression(cells:List[String], rows:Int) = {

  val ors = cells.map(c => c + rows + "=\"?\"," + c + rows + "=\"\"").mkString(",")

  val corrects = cells.map(c => c + "$1").mkString(",")

  val answers = cells.map(c => c + rows).mkString(",")

  "IF(OR(" + ors + "),\"?\",IF(AscStr" + cells.size + "(" + answers + ")=AscStr" + cells.size + "(" + corrects + "),\"o\",\"x\"))"

}
```
知っておくべきGitの知識

# 作業したファイルからリモートリポジトリに上げるまで

作業やったー→ローカルリポジトリ→リモートリポジトリ

## インデックス
ワーキングツリー：いま作業しているファイルのこと。
インデックス：コミットするためのファイルを置いておく場所

`Commit`：インデックスからローカルリポジトリへ
↓
`Pull`　＝　fetch＋merge　：他人の作業をとりこむ
↓
## ローカルリポジトリ
リモートリポジトリに送るためのコミットを記録する場所
↓
`Push`：ローカルからリモートリポジトリへ
↓
## リモートリポジトリ
複数人で共有するためのリポジトリ
How to use ag completion

この項、oh-my-zh の git の補完との共存がうまくいかないようです。

---

こちらを参考に色々したんですが、うまくいかなかったもので…。
http://shigemk2.hatenablog.com/entry/20130828/1377651476

まず、zsh 関数を置く場所を決めます。ここでは `~/.zsh/functions` とします。

次に `.zshrc` に以下のコードを追加します。

```shell-session
fpath=(~/.zsh/functions $fpath)
autoload -U compinit && compinit
```

次に、指定したディレクトリ (ここでは `~/.zsh/functions`) に `_ag` を置きます。
`_ag` は以下にあります。
http://github.com/glidenote/ag-zsh-completion

以下を参考にしました。
http://gihyo.jp/dev/serial/01/zsh-book/0005
失敗しない差分納品

# TortoiseGitでは

`showlog`

![1.png](https://qiita-image-store.s3.amazonaws.com/0/44278/2462d6fb-e0a8-6866-f509-e11529353e7e.png)

↓
Log Messagesが表示。
新しいリビジョンと前回commitしたリビジョンをどちらも選択して、右クリック
↓
`Compare revisions`

![2.png](https://qiita-image-store.s3.amazonaws.com/0/44278/1c6af6f8-69b2-4e43-53dd-2618de5d7f9d.png)

↓
Changed Filesが表示。
下に表示されているファイル名をすべて選択し右クリック
↓
`Export selection to...`

![3.png](https://qiita-image-store.s3.amazonaws.com/0/44278/fadba15e-001d-4d6e-15b6-9ca7ef9b2bd8.png)

↓
デスクトップに指定すると、
デスクトップに前回commitしたリビジョンから新しいリビジョンまでの差分ファイルが置かれます。
これを納品だ。
jQueryオブジェクトにマッチしたDOM要素を取得する

jQuery において``$(selector)`` は、DOM要素ではなかった。。。
[jQuery get()](http://api.jquery.com/get/)


### html

```html:sample.html
<audio id="audioPlayer"></audio>
```

### native

```js:sample.js
var AudioDOM = document.getElementById("audioPlayer");
console.log("DOM: " + AudioDOM)
```

### jQuery

```js:sample2.js
var AudioDOM = $("#audioPlayer").get(0);
// or
var AudioDOM = $("#audioPlayer")[0];
```
Mojoliciousでfillinformする


拙作、Mojolicious::Plugin::FillInFormLite を使うと行えるようになる。

cpanmでインストール。

```shell
$ cpanm Mojolicious::Plugin::FillInFormLite
```

Plugin読み込み設定。

```perl:myapp.pl
use Mojolicious::Lite;

plugin 'FillInFormLite';
```

Controllerに新しくrender_fillinformというメソッドが追加される。

以下のように使用する。

```perl:myapp.pl
#!/usr/bin/env perl
use Mojolicious::Lite;

plugin 'FillInFormLite';

get '/user/update' => sub {
    my $self = shift;

    my %filled = (
        name => '太郎',
        gender => 'male',
        birthday_year => 1983,
        birthday_mon  => 12,
        birthday_day  => 27,
        lang => ['perl','php','ruby'],
        note => "ほげほげほげほげ\nほげほげほげ",
    );

    $self->render_fillinform(\%filled, mons => [1..12], days => [1..31]);
} => 'user/update';


app->start;
__DATA__

@@ user/update.html.ep
<html>
<head>
<meta charset="utf8">
<title>ユーザー情報</title>
</head>
<body>
<h1>ユーザー情報</h1>
<form action="<%= url_for %>" method="post">
<table>
<tr>
  <td>お名前</td>
  <td><input type="text" name="name"></td>
</tr>
<tr>
  <td>性別</td>
  <td>
    <input type="radio" name="gender" value="male">男
    <input type="radio" name="gender" value="famale">女
  </td>
</tr>
<tr>
  <td>誕生日</td>
  <td>
    <input type="text" name="birthday_year">年
    <select name="birthday_mon">
    <% for my $mon (@$mons) { %>
    <option name="birthday_mon"><%= $mon %></option>
    <% } %>
    </select>月
    <select name="birthday_day">
    <% for my $day (@$days) { %>
    <option name="birthday_day"><%= $day %></option>
    <% } %>
    </select>日
  </td>
</tr>
<tr>
  <td>使用言語</td>
  <td>
    <input type="checkbox" name="lang" value="perl">Perl
    <input type="checkbox" name="lang" value="php">PHP
    <input type="checkbox" name="lang" value="ruby">Ruby
    <input type="checkbox" name="lang" value="python">Python
    <input type="checkbox" name="lang" value="go">Go
  </td>
</tr>
<tr>
  <td>備考</td>
  <td><textarea name="note" rows="10"></textarea></td>
</tr>
</table>
<input type="submit" value="更新">
</form>
</body>
</html>
```

![スクリーンショット 2014-05-18 10.59.27.png](https://qiita-image-store.s3.amazonaws.com/0/2278/4d5a3e7f-dcc5-765a-26aa-922fa050bd38.png "スクリーンショット 2014-05-18 10.59.27.png")
ubuntu14.04でALMiniumを使いたい

ALMinium の [README.mkd](https://github.com/alminium/alminium/blob/master/README.mkd) に「動作環境は ubuntu12.04」って書いてあるけど、折角新しいLTSが出てるので、14.04 で使いたい。

インストールしてみた感想として、ubuntu12.04->14.04 での変更点は大きく２つ。
・デフォルトで入っているツールとかライブラリが少なくなっているので、それらを自分で別途インストールする必要がある。
・apacheのバージョンが2.2->2.4になっていて、それに伴って設定ファイルの書き方とかが変わっている。

とりあえず以下の感じでインストール成功。

``` bash
#!/bin/bash

apt-get -y update
apt-get -y dist-upgrade

# install ruby tools
apt-get install -y ruby-dev ruby1.9.3
gem install rubygems-update
update_rubygems
gem install bundler

# install tools alminium is required
apt-get install -y git mercurial subversion
apt-get install -y unzip

# install apache2 and modules
apt-get install -y apache2-mpm-worker apache2-dev
apt-get install -y libapache2-mod-perl2 libapache2-mod-svn libapache2-mod-wsgi libapache2-mod-auth-mysql

# install libraries alminium needs
apt-get install -y libmagickcore-dev libmagickwand-dev
apt-get install -y libcurl4-openssl-dev

# set up alminium
git clone https://github.com/alminium/alminium.git
cd alminium
./smelt

# apache 2.2 -> 2.4
cd /etc/apache2/sites-available
mv redmine redmine.conf
sed -i -e "/DocumentRoot \/opt\/alminium\/public/a <Directory \"/opt/alminium/public\">\n    Require all granted\n<\/Directory>" redmine.conf
mv vcs vcs.conf
a2ensite redmine
a2ensite vcs
service apache2 restart
```
gem splitの使い方


★herokuの設定

`heroku addons:add rediscloud:25`


```ruby:/config/initializer/redis.rb
namespace = [Rails.application.class.parent_name, Rails.env].join ':'

if Rails.env == "development"
  Redis.current = Redis::Namespace.new(namespace, Redis.new(host: '127.0.0.1', port: 6379))
else
  if ENV["REDISCLOUD_URL"]
      $redis = Redis.new(:url => ENV["REDISCLOUD_URL"])
  end
end
```


```ruby:/config/initializer/split.rb

unless Rails.env == "development"
  Split.redis = $redis
  Split::Dashboard.use Rack::Auth::Basic do |username, password|
    username == 'admin' && password == Rails.application.config.admin_password
  end
end
```

★railsの設定

```ruby:view

<% ab_test("item_show","list-type","card-type") do |pattern| %>
<% if pattern == "list-type" %>
 -- code here --
<% elsif pattern == "card-type" %>
 -- code here --
<% end %>

```

```ruby:controller
finished('item_show', :reset => false)
```
FDBを使ったデバッグ方法

コマンドラインツールのFDB(Flashデバッガ)を使ったデバッグの方法。
　※　FlexSDKをインストールしておくこと。

#手順
1. ターミナルで、「fdb」を実行。
1. FDBが起動した後、「run」を実行。  
   「Playerが接続するのを待っています」という表示がでればOK。
1. 別のターミナルを立ち上げ、「adl」を実行する。  
   「adl」実行後、1で立ち上げたターミナルに「Playerが接続されました」と表示されればOK。
1. FDBの入力待ち画面になるので、ブレークポイントを設定する。  
なお、ブレークポイントFDB終了まで保持される。(FDB再起動後は再設定が必要)
    * ブレークポイントの設定方法：b (break)
        * (fdb) b 行番号
        * (fdb) b 関数名
        * (fdb) 行番号・関数名の前にファイル名を記載してもよい。
            * (fdb) b test.as:10　　(test.asの10行目に設定)
            * (fdb) b test.as:execute  (test.asのexecute()に設定)
    * 設定中のブレークポイントの確認方法：i b (info break)
        * (fdb) i b
    * 設定中のブレークポイントの削除方法：d (delete)
        * (fdb) d Num (i bで表示された「Num」カラムの値を指定)
    * 行番号を指定した場合、ソースコードを修正するとブレークポイントがずれる可能性があるので注意。
1. FDB入力待ち画面で、「c」を入力して実行。(c (continue))
   トレースログが出力され、ブレークポイントで止まるか、アプリが起動すればOK。
    * よく使いそうなfdbコマンド
        * 変数表示：p (print)
            * (fdb) p value
        * ステップ実行：s (step)
            * (fdb) s
            * (fdb) s 2  (2ステップ進む)
        * 次のブレークポイントまで実行：c (continue)
            * (fdb) c
        * 強制終了：k (kill)
            * (fdb) k

1. 終了する際は、アプリを終了すれば、3で立ち上げた adl コマンドが終了する。  
1. アプリ終了後、FDB入力画面で「q」実行で、fdbが終了する。(q (quit))  
  
  
上記以外のコマンドについては、FDBのヘルプを参照。
    ・ (fdb) help

#確認環境
* Mac OS 10.8.2
* FlexSDK 4.6

#参考URL
* http://help.adobe.com/ja_JP/air/build/WS5b3ccc516d4fbf351e63e3d118666ade46-7fd7.html
VirtualBoxにMint16を入れてRailsを使うための個人的メモまとめ

VirtualBox上のMint16にRailsの環境構築を行ったり自分好みの設定をしたメモ。流用したい部分だけ適当に利用してやってください。

## まずMint16をVirtualBoxにインストール

<a href="http://qiita.com/ironsand/items/8a390800bb7ac71a3155">VirtualBoxにMint16 Cinnamonをインストール - Qiita</a>

## Emacsインストール

<a href="http://qiita.com/ironsand/items/0842c4bd4147fd038008">Mint16にEmacs24をインストール - Qiita</a>

## ディスクサイズを変更

はじめに作るときにでかいサイズを指定しとくとこんな面倒くさい事をしなくて良いので楽です。

<a href="http://qiita.com/ironsand/items/d0de976d8d816f75b702">VirtualBox上のMintのディスクサイズを変更 - Qiita</a>

## クリップボード共有

<a href="http://qiita.com/ironsand/items/bc043ccf363cdd0f0911">VirtualBoxでホストPCとゲストPCでクリップボードを共有する - Qiita</a>

## クリップボードの履歴管理

<a href="http://qiita.com/ironsand/items/b38011d1250687a5f2c0">MintLinuxでクリップボードの履歴管理を使う - Qiita</a>
## Chrome インストール

<a href="http://qiita.com/ironsand/items/1104d74e22b70cf456b9">Mint16にChromeをインストール - Qiita</a>

## 日本語入力

<a href="http://qiita.com/ironsand/items/e2008f2eb548c097af6e">Mint16に日本語入力環境を入れる - Qiita</a>

## GUIの表示を滑らかに。

<a href="http://qiita.com/ironsand/items/857e86754f31c9f67c9d">VirtualBoxでビデオメモリを使う - Qiita</a>

## Terminalを使いやすく

<a href="http://qiita.com/ironsand/items/33b69c92ad91dc0aeff8">MintのTerminalのショートカット設定 - Qiita</a>

<a href="http://qiita.com/ironsand/items/1a2be6c74a34b178deb6">Tilda で新しいタブを開いた時に .bashrcを読み込むように設定。 - Qiita</a>

## Ruby on Rails環境の構築

<a href="http://qiita.com/ironsand/items/d7cad9373aa2aa7a415c">Mint 16 Cinnamon に Ruby on Railsの環境構築 - Qiita</a>

## VirtualBox特有の問題に対処

<a href="http://qiita.com/ironsand/items/406dad008f6ba2aacbe9">VirtualBoxのゲストOSをフルサイズで使うときにミニツールバーを表示させない - Qiita</a>

## Dropboxインストール

<a href="http://qiita.com/ironsand/items/f507542072d0ee8de29b">Mint16 CinnamonにDropboxをインストール - Qiita</a>
Mint 16 Cinnamon に Ruby on Railsの環境構築

Mint 16 Cinnamon に Ruby on Railsをインストールする時のメモ。まさか`git`さえ初期設定で入ってないとは思わなかった。

## まず色々と開発環境周り

```shell-session
$ sudo aptitude install git autoconf bison build-essential libssl-dev libyaml-dev libreadline6 libreadline6-dev zlib1g zlib1g-dev
```

## rbenv 関係

```shell-session
# rbenv 本体
git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
 
# Plugins
mkdir ~/.rbenv/plugins
# ほぼ必須。ruby本体入れるのに使う。これ無しで使う方法知らない。
git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
# `rbenv rehash`が自動的に
git clone https://github.com/sstephenson/rbenv-gem-rehash.git ~/.rbenv/plugins/rbenv-gem-rehash
# `rbenv update`コマンドが使えるように
git clone https://github.com/rkh/rbenv-update.git ~/.rbenv/plugins/rbenv-update
# 依存ライブラリ

```

でよく使うプラグインとかまとめてインストール。(↑をコピペで貼り付けたらOK)

`. ~/.bash_profile`で`rbenv`コマンドを使えるようにして、`rbenv install --list`で最新の安定版のバージョンを調べて`rbenv install 2.1.2`でインストール。

んで`rbenv global 2.1.2`で設定完了。

## Rails

```
$ gem install rails
```

でOK。

## Postgresqlもいれておこう

本番環境でPostgresql使うなら、ローカル環境にもPostgresqlを入れとかないとこけちゃいますから、入れときましょう。`libpg-dev`がないとgemのインストールでこけるので。

```
sudo -s 
echo 'deb http://apt.postgresql.org/pub/repos/apt/ precise-pgdg main' > /etc/apt/sources.list.d/pgdg.list
exit
sudo apt-get update
sudo apt-get install postgresql-9.3 libpq-dev
```

初期状態で`md5`となってる下の該当部分を`trust`に変えてローカルからのアクセスは全部許可

```/etc/postgresql/9.3/main/pg_hba.conf

# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
host    all             all             ::1/128                 trust
```

あとはDeploy用のユーザーも作っとく

<a href="http://programming.ironsand.net/2014/create-postgres-superuser-for-rails/">Railsで使うpostgresqlのスーパーユーザーを作成する | 答えを知りたい</a>

## nodejs も入れとく

Javascriptの環境を入れとかないと`rails server`した時に

```
/home/ironsand/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/execjs-2.0.2/lib/execjs/runtimes.rb:51:in `autodetect': Could not find a JavaScript runtime.
```

などと文句を言われるので`nodejs`を入れときます。

```
sudo apt-get install nodejs
```

## 参考

<a href="http://programming.ironsand.net/2014/rbenv-and-plugins-install/">rbenvインストール及び、とても便利なプラグイン | 答えを知りたい</a>

<a href="http://qiita.com/tsubu-mustard/items/3f818bf9831a4a934c5a">Ruby - rbenv のインストール (Linux Mint) - Qiita</a>
HTML5のVideoのメモ

#前提
以下のようなHTMLを書いているとする。

```
<video class="video" poster="画像パス" width="xxx" height="xxx">
    <source src="動画パス.mp4" type="video/mp4"></source>
    <source src="動画パス.webm" type="video/webm"></source>
</video>
```

<del>#Chromeで動かないとき
順番変えれば動くかもしれない。
※下の逆だと動かなかった。

```html
<source src="video/***.webm" type="video/webm">
<source src="video/***.mp4" type="video/mp4">
```
</del>
どうやらこれも↓が原因の模様。

##IEで動かないとき①
mp4がH.264タイプではなく、MPEG4タイプかもしれない。

##確認方法
MacだとQuickTIme Player＞Cmd+Iのインスペクタで、フォーマットがH.264かMPEG-4か確認できる。

参考：
http://tamachan.tama777.com/Reference/small_technic_Video_mp4.html

##IEで動かないとき②
.htaccessで以下の設定をしていないとき

```
AddType video/mp4 mp4
AddType video/webm webm
```

##IEで動かないとき③：IE8
そもそも対応していないので、[html5media](http://coliss.com/articles/build-websites/operation/javascript/js.html)等で対応する。

##Firefoxで読み込み中のままになる
1. mp4が壊れている予感。QuickTime Playerで再生できるか確認
2. できなかったら（ファイルが壊れているか、QuickTime Player と互換性のあるムービーファイルではない可能性があります。と言われる）壊れてる
3. mp4を作り直す
【JavaScript】～を含むかのチェック


##matchを使う方法
str.match(/文字列/)で、文字列が含まれれば配列、文字列が含まれなければnullが返ることを利用する。

```js
if ( str.match(/hoge/)) {
//strにhogeを含む場合の処理

}
```

##indexOfを使う方法
str.indexOf(文字列)で、文字列が見つかれば文字列が見つかった場所(0以上)、文字列が見つからなければ-1が返ることを利用する。

```js:返り値!=-1
if ( str.indexOf('hoge') != -1) {
//strにhogeを含む場合の処理

}
```

```js:ビット反転演算子
if ( ~str.indexOf('hoge')) {
//strにhogeを含む場合の処理

}
```
####ビット反転演算子の解説
文字列が見つからない場合、indexOfが-1を返す。-1をビット反転演算子にかけると、0が返る。if文では、0が真と判定される。

※ビット反転演算子
整数をビット反転演算子にかけると、符号を反転してマイナス1した数になる。
例)
~1 → -2
~-1 → 0
~0 → -1
Julius実行時に出るWarningの非表示方法


以下コマンドを

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

実行すると

```
### read waveform input
STAT: AD-in thread created
<<< please speak >>>Warning: strip: sample 0-4095 is invalid, stripped
Warning: strip: sample 0-4095 is invalid, stripped
Warning: strip: sample 0-4095 is invalid, stripped
Warning: strip: sample 0-4095 is invalid, stripped
Warning: strip: sample 0-4095 is invalid, stripped
Warning: strip: sample 0-4095 is invalid, stripped
Warning: strip: sample 0-4095 is invalid, stripped
Warning: strip: sample 0-4095 is invalid, stripped
Warning: strip: sample 0-4095 is invalid, stripped
Warning: strip: sample 0-4095 is invalid, stripped
Warning: strip: sample 0-4095 is invalid, stripped
Warning: strip: sample 0-4095 is invalid, stripped
Warning: strip: sample 0-4095 is invalid, stripped
...

```

何やらWarnigが出まくる…
どうやら特徴抽出する際にJuliusがあやしいサンプル？（何もないデータ？）があったから飛ばしたって事っぽい。

### 解決方法

`-nostrip` オプションを付けるとWarnigは出なくなる。

```
$ julius -nostrip -C `brew --prefix julius-dictation-kit`/share/main.jconf -C `brew --prefix julius-dictation-kit`/share/am-gmm.jconf
```
一発でAndroidアプリをリバースエンジニアリングする

# 概要
Androidアプリをコマンドラインで一発でリバースエンジニアリングする。これによって自分のアプリがどれだけ難読化されているかを手軽に確認できる。
難読化についてはProguardを利用すれば良い。
Proguardについては過去に記事を書きました。結構ハマりどころが多い気がしたので良かったら参考にしてください。
http://qiita.com/GeneralD/items/f12889c4ac9ddc22e41f

# 準備
jadとdex2jarを入れる。
Macユーザーはbrewで両方手に入る。

```zsh
brew tap homebrew/binary
brew install jad
brew install dex2jar
```

# スクリプト
お好みでスクリプトファイルにするなりシェル設定ファイルに関数として書くなりする。下記はzshell関数として書いた例。

```zsh
# Decompile Java classes recursively keeping hierarchy
jadr() {
  jad -8 -s java -d $2 -r $1/**/*.class
}

# Decompile Android application
deapk() {
local dst=${${1##*/}%%.*}
dst+='.depackaged'
unzip $1 -d $dst
dex2jar ${dst}/classes.dex
unzip ${dst}/classes_dex2jar.jar -d ${dst}/Classes
jadr ${dst} ${dst}/src
}
```

# 使用方法
上の例をshellの設定ファイルに関数として定義した場合

```zsh
deapk アプリケーションファイル名.apk
```

で実行すると

作業ディレクトリに、アプリケーションファイル名.depackagedというディレクトリ名で出力します。

#もっと面倒臭がる

もっと面倒臭がるなら

```zsh
alias -s apk=deapk
```

とかしておくといいのではないでしょうか。


# 注意事項
JNI使っているアプリの場合ネイティブ部分のリバースエンジニアリングに関しては今回はノータッチです。
Scalaで書いてる場合に関してもノータッチです。
自己責任で活用しておくれやす。
SQL Serverよく見てたシステムビュー

SQL Serverにてパフォーマンス計測やらなんやらする時によく見てたところ
---
sys.dm_os_wait_stats
--
http://msdn.microsoft.com/ja-jp/library/ms179984.aspx

sys.dm_exec_query_stats
---
http://msdn.microsoft.com/ja-jp/library/ms189741.aspx

sys.dm_os_buffer_descriptors
---
http://msdn.microsoft.com/ja-jp/library/ms173442.aspx

sys.dm_db_index_usage_stats
---
http://technet.microsoft.com/ja-jp/library/ms188755.aspx

dm_db_missing_index_group_stats
---
http://technet.microsoft.com/ja-jp/library/ms345421.aspx

sys.dm_db_missing_index_groups
---
http://technet.microsoft.com/ja-jp/library/ms345407.aspx

sys.dm_db_missing_index_details
---
http://technet.microsoft.com/ja-jp/library/ms345434.aspx
chef-soloで作業環境からサーバ上でChefを実行するまで

### 前提条件
---

※作業環境：mac
※ruby, git, gemsはインストール済み


### vmセットアップ
---

Boxを作る

```
$ vagrant box add base http://files.vagrantup.com/precise32.box
```
作られたBoxを確認する

```
$ vagrant box list
```

仮想マシーン用ディレクトリーを作る

```
mkdir vagrant_base
```

初期化

```
$ cd vagrant_base
$ vagrant init base
```

Vagrantファイル内でネットワークの設定をしてあげる (Vagrant init したディレクトリーにある）

```
config.vm.network :private_network, ip: "192.168.33.10"  #コメントアウト

```

仮想マシーン起動

```
vagrant up
```

仮想マシーンに接続し、ネットワークネットワークを確認する

```
$ vagrant ssh
$ ifconfig
```


### gem周りをアップデート
---

gemアップデート

```
sudo gem update
```


bundlerをインストールする

```
sudo gem install bundler
```


### 作業環境→サーバにChefを実行する
---

**1.knife-soloインストールする**

- githubからknife-soloを取得

	```
	$ git clone git://github.com/matschaffer/knife-solo.git
	$ git submodule init    #download sub module
	$ git submodule update
	```  

- knife-soloインストール

	```
	$ cd knife-solo
	$ bundle   #要らないかもしれない。
	$ sudo rake install


	```

- knifeの一時ディレクトリー設定  

	```
	$ mkdir ~/.chef
	$ vim ~/.chef/knife.rb
	knife[:solo_path] = '/tmp/chef-solo' 　#この１行追加
	```


**2.chefレポジトリーを作る**

- 初期化する

	```
	$ cd /Users/a12948/Work/knife-solo/
	$ knife solo init chef-repo
	$ ls -F chef-repo
	cookbooks/ data_bags/ nodes/ roles/ site-
	cookbooks/
	```


- 作成したchefレポジトリーをgit管理する  
  
	```  
	$ git init
	$ git add -A
	$ git commit -m 'first commit'
	```


**3.cookbookを作成する**
  
- httpdというcookbookのひな形をsite-cookbooksの中に作成する
  
	```
	$ knife cookbook create httpd -o site-cookbooks   
	```


**4.レシピーを作成する**
  
- site-cookbooks/httpd/recipes/default.rbに下記を追記する  
	
		```
		package "httpd" do
		  action :install
		end
		```
 
**5.対象ノードへchef-soloを実行する**

- 対象ノードの設定ファイルnode/xxxx.jsonを編集


		```
		$ vim  ./nodes/192.168.33.10.json
		{"run_list":[
		   ["recipe[httpd]"]
		]}
		```
		
- SSH接続できるよう、~/.ssh/configに下記を追記する

	```
	Host 192.168.33.*
	IdentityFile ~/.vagrant.d/insecure_private_key
	User vagrant
	```
  
- ノード（指定ホスト）にchef-soloをインストールする （１回目だけ） 

 
	```
	$ knife solo prepare vagrant@192.168.33.10
	```


- ノードにレシピー転送＆リモート実行    

  	```  
	$ cd /Users/a12948/Work/knife-solo/chef-repo
	$ knife solo cook vagrant@192.168.33.10
	```



**6.サーバにhttpdがインストールされているか確認する**

 
	$ sudo service httpd status
対象ディレクトリ以下のファイル数を「各ディレクトリとその直下のファイル数」というセットで書き出す

下の例では'.svn'以下のファイルを除いています。

```bash
for d in `find target_directory -type d -name '.svn' -prune -o -type d -print`; do echo $d,`$cd $d; echo $(ls -1F | grep -v /) | wc -w`; done > file_count
```
herokuコマンドで環境を確認

`$ heroku run console`

``Running `console` attached to terminal... up, run.2434
 !    
 !    Timeout awaiting process
``

タイムアウト・・

http://stackoverflow.com/questions/8582860/heroku-run-console-get-timeout-awaiting-process
これを参考にして
herokuにアクセスできるかテスト

`$ telnet rendezvous.heroku.com 5000`

`Trying 50.19.103.36...
telnet: connect to address 50.19.103.36: Operation timed out
telnet: Unable to connect to remote host
`


`$heroku run:detached rake db:migrate`

``Running `rake db:migrate` detached... up, run.9466
Use `heroku logs -p run.9466` to view the output.``


`$ heroku logs -p run.9466
`
`$ heroku logs -p run.9466 -t
`

2014-05-19T05:36:52.188739+00:00 heroku[run.9466]: Process exited with status 1
2014-05-19T05:36:52.195286+00:00 heroku[run.9466]: State changed from up to complete
git コマンド マージ（merge）

☆AブランチをBブランチにマージする

# Bブランチに切り替える
git checkout Bブランチ

# 最新にする
git pull Bブランチ

# マージする
git merge --no-ff Aブランチ

※ 動作確認をする
　コンフリクトが起きた場合は解消する

# プッシュする
git push origin Bブランチ
Ubuntu で SSH 鍵を GUI で生成する方法

Ubuntu で SSH 鍵を GUI で生成します。

(1) Unity ラウンチャーから「パスワードと鍵」を起動します。

![ssh1.png](https://qiita-image-store.s3.amazonaws.com/0/41297/fcb90e74-e363-01c5-ddb0-0afc383afab6.png)

(2) 「パスワードと鍵」が起動しますので、+ マークを押し、鍵の新規作成を行います。

![ssh2.png](https://qiita-image-store.s3.amazonaws.com/0/41297/e291ceba-46db-1d3f-15aa-178eb4bb410e.png)

(3) 「セキュアシェルの鍵」を選択し、「続行」を押します。

![ssh3.png](https://qiita-image-store.s3.amazonaws.com/0/41297/4f4f12bf-b8c7-b883-1221-0a102c4dae93.png)

(4) 「説明」を追加します。通常は自分のメールアドレスを記述します。  
記述した後、「生成のみ」をクリックします。

![ssh4.png](https://qiita-image-store.s3.amazonaws.com/0/41297/76bad7ee-8d82-7ec2-8cfc-09baa9562fb6.png)

(5) SSH 鍵に対するパスワードを入力します。パスワードをなしにする場合は空欄にします。パスワードを設定した場合は、SSH 鍵を用いたログインを行う際に、毎回そのパスワードを求められます。
※SSH関連ではパスフレーズと呼ばれることが多いですが、基本的にパスワード == パスフレーズとの認識で構いません。

![ssh5.png](https://qiita-image-store.s3.amazonaws.com/0/41297/e5a0b537-61c5-b11f-c3bb-2cae81ae3cd6.png)

(6) (5) で入力したパスワードをもう一度入力します。パスワードをなしにした場合は、ここも空欄のままOKを押します。

![ssh6.png](https://qiita-image-store.s3.amazonaws.com/0/41297/3dd3a9cf-afb4-2cb0-e6d9-22b99858c504.png)

(7) SSH キーが生成されていることを確認します。

![ssh8.png](https://qiita-image-store.s3.amazonaws.com/0/41297/6de620f8-66de-9b14-1a12-25b6877d17a6.png)
UnityのInspectorで変数を表示する方法まとめ


UnityのInspectorでの変数の表示についてまとめてみた

__表示する方法__

 * 変数をpublicフィールドにする

`public string hoge`

 * [SerializeField]属性を変数の前に書く

```
[SerializeField]
private string huga;
```

 * [System.Serializable]属性をクラス定義の前に書く

```
[System.Serializable]
public class HogeClass {
	public string hoge;
}

public class NewBehabiourScript : MonoBehaviour {

	public HogeClass hogeData;
}
```

 * InspectorをDebugモードにする

http://docs-jp.unity3d.com/Documentation/Manual/InspectorOptions.html


__表示しない方法__
 * [HideInInspector]属性を変数の前に書く

```
[HideInInspector]
public string hoge;
```

隠しているだけで、プレハブに値が保持されているので、後でスクリプトの変数の初期値を変えても、プレハブに値がのこっていて、動作が変わらないというトラブルに注意
[System.NonSerialized]のほうがトラブルが少ない

 * [System.NonSerialized]属性を変数の前に書く

```
[System.NonSerialized]
public string fuga;
```

パラメータをそもそもプレハブに保存しないので、当然Inspectorに表示されない
publicだけど、Inspectorで触ってほしくないときに使う

 * Editorスクリプトで１から作る

詳細は省略　レイアウトを自分で決めるので表示非表示も自由



__どうしても表示できないもの__
 
 * ~~structのパラメーター~~
 
~~structは属性をつけても表示できないので、classにするしかない模様
(unityのVector3構造体とかがなぜ表示できるかは謎ですが)~~

勘違いorバージョンアップでstructも表示できるようです
classと同様に[System.NonSerialized]を付加すればOKです

 * ジェネリッククラス

ジェネリックスは[System.Serializable]属性を与えてもインスペクターに表示することも、Editorスクリプトでアクセスすることもできない。
対策として、ジェネリッククラスを継承した別のクラスを作れば表示できる

(ちなみにDictionaryは structのKeyValuePair + ジェネリックスの二重苦なので普通は表示できない
無理矢理な対策はこちら　http://qiita.com/k_yanase/items/fb64ccfe1c14567a907d )
MintのTerminalのショートカット設定

Mintのタグは既に別にあることに気づきましたがタグの統合とかできないし、運営がやってくれるまで放置することにしました。

Terminalの「新しいタブを開く」に`Ctrl+T`を当ててないと落ち着かないのでその設定方法のメモです。

## Tildaのインストール
標準のTerminalだとキーコンフィグがめんどくさかったのでTildaを入れることにします。一部で大人気の上から落ちてくるコンソールもいいですしね。

```
$ sudo apt-get install tilda
```

## キーバインドを設定

んで、メニューから`tilda`を立ち上げて、こんな感じにショートカットの設定をします。やったのは`Ctrl+T`で新規タブ、`Ctrl+O`,`Ctrl+Shift+O`でタブの移動です。

![201405193.jpg](https://qiita-image-store.s3.amazonaws.com/0/19475/fcbbb8f7-79bf-622f-ed74-e8bb390edbed.jpeg)

## 非アクティブになったら自動的に隠す

オプションの`General`->`Auto Hide`の`Hide when Tilda loses focusにチェックを入れる。


以上、ステキなTerminal生活のすすめでした。
1つのキーに複数の値が対応して且つそれぞれの値が重複しているハッシュのキーと値を入れ替えたい時のメソッド(Ruby)


## 実例からっ
タイトルがわかりにくいのでやりたいことを実例で示します。

```ruby
#もとのHash
 {"akan"=>["10", "201"], "areha"=>["201"], "okashi"=>["303", "201", "10"]}
#入れ替え後
=> {"10"=>["akan", "okashi"], "201"=>["akan", "areha", "okashi"], "303"=>["okashi"]}
```


上記のように１つのキーに複数の値がぶら下がっていて，その値同士が重複しているとします。上の例では，"akan"=>"201","areha"=>"201","okashi"=>"201"と"akan"=>"10","okashi"=>"10"が重複しています。
複数対複数であるということを認識しながら，これらのキーと値を入れ替えると，"入れ替え後"のようになります。ちょいと探したところすぐにいいメソッドが見つからなかったので，メソッドを作りました。

##メソッド
```ruby
def safe_invert_d_hash(orig_hash)
orig_array = []
orig_hash.each{|elem|
if elem[1].length != 1
 elem[1].each{|youso|
	orig_array << [youso,elem[0]]
	}
else
      	orig_array << [elem[1].join(""),elem[0]]
end
} 
result = Hash.new{|h,key| h[key] = []}
	orig_array.each{|key,value|
		result[key] << value
	}
result
end
```
最初，配列(orig_array)を作って，そこに一対一になるようにデータを入れていきます。この時にキーと値の順序を交換しています。複数の値は1つ1つ取り出しています。
ここまでの処理で上記の例だと，```[["10", "akan"], ["201", "akan"], ["201", "areha"], ["303", "okashi"], ["201", "okashi"], ["10", "okashi"]]```となっています。
次に先ほど作った配列から，ハッシュ(result)を作って，最初の要素をkey,後の要素をvalueとすればおしまいです。Have fun! というか，もっといい方法（修正）があったら教えて下さい。#あと，値が配列の形じゃないとこのメソッド使えないです。ごめんなさい。

## 実行結果
```ruby
irb(main):538:0* h
=> {"akan"=>["10", "201"], "areha"=>["201"], "okashi"=>["303", "201", "10"]}
irb(main):539:0> safe_invert_d_hash(h)
=> {"10"=>["akan", "okashi"], "201"=>["akan", "areha", "okashi"], "303"=>["okashi"]}
```
あ，最初の例そのままですね。ええ。
## Reference
>[Rubyレシピブック 第2版 268の技](http://www.amazon.co.jp/Ruby%E3%83%AC%E3%82%B7%E3%83%94%E3%83%96%E3%83%83%E3%82%AF-%E7%AC%AC2%E7%89%88-268%E3%81%AE%E6%8A%80-%E9%9D%92%E6%9C%A8-%E5%B3%B0%E9%83%8E/dp/4797340045)　
こちらのsafe_invertを参照しています。

## 最後にきっかけ
同義語の対応付けの処理をしていて，多(by DB_A)対多(by DB_B)のIDを関連付ける必要がありました。片方のデータベース（DB_A)からしか，対応データが取得できない状況だったが，取得したいのは，(DB_B）からの対応付けだったのでこんなのを作りました。しかし，あれだ，例が，"あかん，あれは，おかし"だったのは，あれですな，あれ。あとデータ量多い時にはRubyじゃないほうがいいですよね，うん。
UILongPressGestureRecognizerで２回同じセレクタが呼ばれる件

開発初心者の自分のためのメモ。


```
//長押しの設定をする
-(void)viewDidLoad
{
   UILongPressGestureRecognizer *longPressGestureRecognizer = [[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(handleLongPressGesture:)];
    longPressGestureRecognizer.delegate = self;
    [_AlbumCollection addGestureRecognizer:longPressGestureRecognizer];
}
```

ここで設定したメソッド、普通だと「長押し開始と認識されるタイミング」と「終了のタイミング」の２回呼ばれる。
なのでどちらかのタイミングに限定したいときは切り分けを行う。


```
-  (void)handleLongPressGesture:(UILongPressGestureRecognizer*)sender {
    if (sender.state == UIGestureRecognizerStateEnded) {
        NSLog(@"長押し終了のタイミング");
    }
    else if (sender.state == UIGestureRecognizerStateBegan){
        NSLog(@"長押し開始のタイミング");
   
    }
}
```
MacのExposeが動かなくなったときは


急に動かなくなってびびったのでメモ　(Mavericks10.9.3)

`ctrl + F3` or ` ctrl + ↓` でもうんともすんともいわないので  

ここを参考に
[MacでExposeやSpacesが動かない時は？](http://blog.goo.ne.jp/oko-bou/e/e35a790943fecb834c154bc814556101:title)

### Dockを再起動  
アクティビティモニタを開いて＞検索窓にDockと打ち込んで＞出てきたDockを選択＞左上の×ボタンをクリック＞確認のダイアログがでてくるので「終了」  

もしくはターミナルで  

```bash:
killall Dock
```

何もなくいきなり終了からの再起動になる。
WordPressのデバッグモード（ログ出力）

プラグインを作成していたのでメモ。
WordPressをインストールしたディレクトリ直下にあるwp-config.php 内の定数「WP_DEBUG」をtrueにします。

```php
define('WP_DEBUG', true); // デバッグモードを有効化

// ログファイルに保存する場合は、以下を書き足します。
if ( WP_DEBUG ) {
    // debug.log ファイルに記録
    define( 'WP_DEBUG_LOG', true );
    // ブラウザ上に表示しない
    define( 'WP_DEBUG_DISPLAY', false );
    // ブラウザ上に表示しない
    @ini_set( 'display_errors',0 );
}
```

/wp_content/debug.log に記録されます。
以下のような感じで記録されます。

```text
[19-May-2014 05:25:00 UTC] PHP Notice:  load_plugin_textdomain was called with an argument that is <strong>deprecated</strong> since version 2.7 with no alternative available. in /home/programp/www/blog/wp-includes/functions.php on line 3195
```
UnityのInspectorで扱えるDictionary

UnityのInspectorViewはうまく使えば、新しくスクリプトを作らずにオブジェクトの動作をかえることができて便利ですが、変数によっては表示できないものがあり、そのなかで一番困るのがDictionaryだったりします。

unityのInspectorViewではジェネリッククラスはList以外は扱えないので、型をジェネリックスで与えるDictionaryは表示出来ません。

そこで、簡単にInspectorで扱えるように工夫してみました。

```SerializableDictionary.cs
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.Linq;

namespace Serialize {

	/// <summary>
	/// テーブルの管理クラス
	/// </summary>
	[System.Serializable]
	public class TableBase<TKey, TValue, Type> where Type : KeyAndValue<TKey, TValue>{
		[SerializeField]
		private List<Type> list;
		private Dictionary<TKey, TValue> table;


		public Dictionary<TKey, TValue> GetTable () {
			if (table == null) {
				table = ConvertListToDictionary(list);
			}
			return table;
		}

		/// <summary>
		/// Editor Only
		/// </summary>
		public List<Type> GetList () {
			return list;
		}

		static Dictionary<TKey, TValue> ConvertListToDictionary (List<Type> list) {
			Dictionary<TKey, TValue> dic = new Dictionary<TKey, TValue> ();
			foreach(KeyAndValue<TKey, TValue> pair in list){
				dic.Add(pair.Key, pair.Value);
			}
			return dic;
		}
	}

	/// <summary>
	/// シリアル化できる、KeyValuePair
	/// </summary>
	[System.Serializable]
	public class KeyAndValue<TKey, TValue>
	{
		public TKey Key;
		public TValue Value;

		public KeyAndValue(TKey key, TValue value)
		{
			Key = key;
			Value = value;
		}
		public KeyAndValue(KeyValuePair<TKey, TValue> pair)
		{
			Key = pair.Key;
			Value = pair.Value;
		}


	}
}
```

このままジェネリックスを使っても表示できないので、利用するときにはこれらのクラスを継承して使います

```SerializableTest.cs
using UnityEngine;
using System.Collections;
using System.Collections.Generic;


/// <summary>
/// ジェネリックを隠すために継承してしまう
/// [System.Serializable]を書くのを忘れない
/// </summary>
[System.Serializable]
public class SampleTable : Serialize.TableBase<string, Vector3, SamplePair>{
	
	
}

/// <summary>
/// ジェネリックを隠すために継承してしまう
/// [System.Serializable]を書くのを忘れない
/// </summary>
[System.Serializable]
public class SamplePair : Serialize.KeyAndValue<string, Vector3>{
	
	public SamplePair (string key, Vector3 value) : base (key, value) {

	}
}

public class SerializableTest : MonoBehaviour {

	//Inspectorに表示できるデータテーブル
	public SampleTable sample;

	void Awake () {
		//内容を列挙
		foreach (KeyValuePair<string, Vector3> pair in sample.GetTable()) {
			Debug.Log ("Key : " + pair.Key + "  Value : "  + pair.Value);
		}
	}

}

```

DictionaryではなくList型でいったんデータを保持し、利用時にはList型のデータをDictionary型に流し込むことで実現しています

利用するときは
1, Serialize.KeyAndValueを継承して、KeyとValueの型を指定したクラスを作る
(KeyとValueを引数に持つコンストラクタを作らないといけない)
2, Serialize.TableBaseを継承して、KeyとValueに加えて1で作成したクラスを指定したクラスを作る
3, 2で作ったクラスを利用したいMonoBehaviourのスクリプトに変数定義

![ss.png](https://qiita-image-store.s3.amazonaws.com/0/44257/474507fe-96dc-3d01-76cc-fa23b6e2b1e6.png)

これによってInspector上でDictionary(のようなもの)を操作することができます

また、スクリプト側でTableを取得するには

`sample.GetTable()`

と記述すれば、Dictionaryを取得することができます

追記

シリアライズできるので、BinaryFomatterでバイナリファイルに保存することもできて便利かも
Mint16に日本語入力環境を入れる

日本語入力ができないことには話になりません。

## Fcitx + Mozc インストール

日本語入力に必要な Fcitx と Mozc をインストールします。

```shell-session
$ sudo apt-get install fcitx fcitx-mozc fcitx-frontend-gtk2 fcitx-frontend-gtk3 fcitx-ui-classic fcitx-config-gtk mozc-utils-gui
$ im-config -n fcitx
```

それにしても`Fcitx`ってなんでこんなに発音しにくい綴りにしたんでしょう。自分はとりあえず 「エフ シット エックス」と読んでますがまず間違いなく間違ってるでしょう。

## 設定

まずインストールを有効にするために再起動して、

タスクトレイのキーボードアイコンを右クリックして`Configure`で設定ファイルを開いて`Input Method`に`+`から`Mozc`を追加。

![20140519.jpg](https://qiita-image-store.s3.amazonaws.com/0/19475/a3ea31cf-b07a-f332-d4e9-aa7697fd0a14.jpeg)

`Addon`の`input method selector`でInput Methodの順番に合わせてキーボードショートカットを作成。

![201405191.jpg](https://qiita-image-store.s3.amazonaws.com/0/19475/909eaa44-6b76-ec24-3ec1-36e0889b7b18.jpeg)

これで「無変換」キーで英字入力、「カタカナ・ひらがな」キーで日本語入力になります。すてき！

…のはずなんですが、ならねえ。なんでや。

なぜ設定できないのかはわからないので諦めて「カタカナ・ひらがな」キーに入力モードのToggleを割り当てることにしました。さっぱりわからないことに「半角全角」キーも割り当てに使えなかったので。やっぱりLinuxってバグ多いよね。CUIだと素晴らしいんだけど、上級レベルの人らがGUIを多分あんまり使ってないからおざなりになってしまってる印象。

あまり文句をいうと「お前が作れ」と言われるので黙っておきます。

## 参考

http://linuxmintjp.jimdo.com/%E6%97%A5%E6%9C%AC%E8%AA%9E%E5%8C%96/#.U3mI0vl_sgp
UnityでiOSのジャイロの使い方をちゃんと説明する

UnityでiOSのジャイロ使おうと思って調べたところ、
「Input.gyro.attitudeでQuatenionで取れまっせ」ってのは出てくるんだけど
ちゃんと座標系について説明してるところが見つけられなかったので
ふにゃふにゃ書いてみる


#座標系の違い

iOSの座標系はiPhoneだとこう
（ `Screen.orientation == ScreenOrientation.Portrait` の場合。Screen.orientationの値によってかわるので注意）
![s_iphone2.jpeg](https://qiita-image-store.s3.amazonaws.com/0/15038/a5b77661-426b-4604-626e-07affb96a784.jpeg)


Unityはお馴染みのこれ
![unity.jpg](https://qiita-image-store.s3.amazonaws.com/0/15038/8949df9b-7a4a-7d17-c3be-a76c89b67111.jpeg)

注目ポイントは２点

* 座標系が右手系と左手系
* 無回転な標準状態がiPhoneを置いた状態。Y軸ではなくZ軸が重力の反対方向


#座標系の変換

今回はiOSのカメラが向いている方向をUnity上のZ軸として扱いたかったので
こういう変換を行いたい

![s_iphone2.jpeg](https://qiita-image-store.s3.amazonaws.com/0/15038/a5b77661-426b-4604-626e-07affb96a784.jpeg) → ![s_iphone3.jpeg](https://qiita-image-store.s3.amazonaws.com/0/15038/96802e11-38e2-f434-7fb7-b57c08b95db4.jpeg)


##右手系左手系

iOSは右手系、Unityは左手系なので変換が必要
なのだけど、ここなんとなくやっててちゃんと説明してるとこあんまなかった

大事なのは **右手系→左手系の変換は一律決まった操作ではない** ってこと

Quaternionの右手系左手系変換でよりわかりやすいのはXYZのどれか一軸を正負反転させる
どの軸を反転させるかは用途に応じて自分で決める必要がある

~~今回はZ軸を反転させる~~

が、今回は無回転状態を揃えるためにY軸とZ軸を入れ替える操作を行う


##Quaternionで変換

Quaternionの定義は

> $回転軸V(n_x,n_y,n_z)まわりにθ度の回転を、$
> 
> $Q(x,y,z,w)$
> $x=n_x*sin(θ/2)$
> $y=n_y*sin(θ/2)$
> $z=n_z*sin(θ/2)$
> $w=cos(θ/2)$
> 
> $と表したもの$


なので、 YZ軸入れ替えは`q.y` と `q.z`を入れ替える

・・・だけではなく、

右手系と左手系では軸周りの回転方向も反対になるので `θ*=-1f` な操作も必要
これはsin()にしか影響ないので、

YZ軸入れ替えは 

```csharp
var q = Input.gyro.attitude;
var newQ = new Quaternion(-q.x, -q.z, -q.y, q.w);
```
となる

これで座標系揃った！

#無回転状態をあわせる

上記変換で以下のようになった
![s_iphone2.jpeg](https://qiita-image-store.s3.amazonaws.com/0/15038/a5b77661-426b-4604-626e-07affb96a784.jpeg) → ![iphone5.jpg](https://qiita-image-store.s3.amazonaws.com/0/15038/ee116a26-6953-c54e-4c06-599312832f5e.jpeg)

まだカメラの向き＝Z軸という無回転状態にできていない
これはUnity上で無回転のときにZ軸が下を向くように先にX軸回転しとけばよい
transformの親子関係でやっちゃってもいいけど、このために空のGameObjectを置いとくのもアレなので、
計算で求めちゃう

```csharp
q *= Quaternion.Euler(90f, 0f, 0f);
```

これで出来た！

まとめると

```csharp
var rotRH = Input.gyro.attitude;
var rot = new Quaternion(-rotRH.x, -rotRH.z, -rotRH.y, rotRH.w) * Quaternion.Euler(90f, 0f, 0f);

transform.localRotation = rot;
```


こんな感じでiOS端末の向きに追従するGameObjectができる！
ロケールの取得

掘り出されたので追記： [os-locale](https://www.npmjs.com/package/os-locale)使え。以上。

----


Node.jsでロケールの取得、`process.env.LANG`で出来る…(http://qiita.com/takoba/items/da13c8946853c0a55e8c)

と思うじゃん?


Unix系OSならこれでいいんだけどどうもWindowsの環境変数にLANGやその代用になる物は存在しない。

navigator使えるんじゃ?とか思うかもしれないけどあれは上に乗っかってるChromium部とかでつけてたりするっぽくて仮にAtomで取ってみてもen_USになってシステムロケールは取得出来ないんだ…。

## 誰かいい方法知ってる人いたら教えて下さい！
☆（ゝω・）vｷｬﾋﾟ
MacでUSB-RS232Cケーブルを使う (Arvel)

[MacOSX - MacでUSB-RS232Cケーブルを使う (シグマAPO) - Qiita](http://qiita.com/tukiyo3/items/5dd253b8bb09db590e40)
のケーブルだとEnter押しっぱなし病みたいなのにかかったので別のケーブルを試した。

[SRC06-USB](http://buffalo.jp/products/catalog/supply/cable/usb/change/src06us/)

* OSX 10.10 にて動作した。

![src06us_main.jpg](https://qiita-image-store.s3.amazonaws.com/0/25728/c84baef6-1408-0b27-5bb8-b332a1f728f5.jpeg)

[Virtual COM Port Drivers](http://www.ftdichip.com/Drivers/VCP.htm)からmacの64bitをダウンロード

![スクリーンショット 2014-05-19 12.44.02.png](https://qiita-image-store.s3.amazonaws.com/0/25728/a742cd6d-9cc8-829f-883b-a142eb259c20.png)

![スクリーンショット 2014-05-19 12.44.23.png](https://qiita-image-store.s3.amazonaws.com/0/25728/499e3c0f-592d-5f57-aa6d-54d1a0e1ba67.png)

# 利用する

![sjis.png](https://qiita-image-store.s3.amazonaws.com/0/25728/0147bf48-6048-a269-a336-c939eeb3a267.png)

```bash:
sudo -u _uucp cu -l /dev/tty.usbserial-FTCEQTQE
```
git コマンド branchの削除

# 適当にブランチを移動
git checkout master

# ローカルのブランチの確認
git branch

# ローカルブランチの削除（-Dで強制削除）
git branch -d 削除したいブランチ名

# ローカルブランチの確認
git branch

# リモートブランチの削除
git push origin :削除したいブランチ名

# ローカルとリモートのブランチを確認
git branch -a
git コマンド branchの作り方

# ローカルのブランチからブランチを作成する方法

## ブランチを作りたいgitのディレクトリに入る
cd ディレクトリパス

## ブランチの一覧を見る
git branch -a

## ブランチを作る元のブランチに切り替える
git checkout master

## ブランチを作成
git checkout -b 作成するブランチ名

## ブランチの一覧を見る
git branch -a

## ブランチをリモートに登録
git push -u origin 作成したブランチ名

---------------------------------------------------------------
#リモートブランチから作る方法

## リモートブランチからローカルブランチを作成
git checkout -b ローカルに作成するブランチ名 origin/作成元のリモートのブランチ名

## ブランチの一覧を見る
git branch -a

## ブランチをリモートに登録
git push -u origin 作成したブランチ名
How to get Checkbox value with jQuery 2.x

なんか jQuery 2.x では仕様が変わったようで…（？）

チェックボックスの値を得るには `.is(':checked')` もしくは `.prop('checked')` を使います。

```html
<!DOCTYPE html>
<input id="cb"
       type="checkbox"
       onclick="javascript:showCB()">
<!-- IE 非対応 -->
<script src='http://code.jquery.com/jquery-2.1.1.min.js'></script>
<script src='cb.js'></script>
```

```js:cb.js
function showCB()
{
  alert($('#cb').is(':checked'));
}
```

[smzk](http://qiita.com/smzk)さんのご指摘で、こちらでも取得できることが分かりました。ありがとうございます。

```js:cb.js
function showCB()
{
  alert($('#cb').prop('checked'));
}
```

以下を参考にしました。
http://stackoverflow.com/questions/18439468/why-is-jquery-is-not-checking-unchecking-checkbox
【個人メモ】示されたサンプルコードがJavaしかないのでJavaREPLを試した

# あなたとJava

とあるクラウドサービスのAPI、
サンプルコードがJavaしかなく、普段触ってない言語のため
「ウオオオッ」っとなってしまった。
バイト列を扱うものではあったが、Rubyに落とし込んだ時
同じ形でバイト列を扱えるのかはリファレンス読んだり
動かしてみないとわからない。

...気軽に試せる環境として、
REPL無いのかなと思ったらあった。

JavaREPL。

http://www.javarepl.com/console.html

目的にピッタリだ。

![スクリーンショット 2014-05-21 11.05.45.png](https://qiita-image-store.s3.amazonaws.com/0/3985/afaf08c9-4178-26b7-f704-116deeda26c3.png)

getBytesメソッドの動作確認をやってみると、
コードの実行にちょっと時間がかかるが、結果が返ってくる。

![スクリーンショット 2014-05-21 11.06.59.png](https://qiita-image-store.s3.amazonaws.com/0/3985/a0eab485-69fc-8c30-eb1b-24511f379e52.png)

ちょっとしたコードの動作確認であれば、JavaREPLを使うと良さそう。

ソースコードも公開されている。

https://github.com/albertlatacz/java-repl

よかった。
Objective-cでのプロパティ属性

### atomic, nonatomic
- atomic
	- 複数スレッドから同時に書き込みがあった場合でも、値が壊れないことが保証されている。
- nonatomic
	- 複数スレッドから同時に書き込みがあった場合、値は保証されない。一方でパフォーマンスが良い。

### weak, strong, assign
- weak
	- propertyの参照元が所有宣言をせず、retainカウントが加算されない。
	- IBOutletなどで宣言するパーツ等は、基本的に親のViewが存在するためweakを指定します。
- strong
	- propertyの参照元が所有宣言をし、propertyのretainカウントがプラスされる。
- assign
	- プリミティブ(BOOLやintなど)な値の場合に指定する。この場合propertyには値の単純代入になるため、参照の強さを考慮する必要がない。

### readonly, readwrite
- readonly
	- propertyが宣言されたClass以外からの値の書き換えができない。getterのみ生成される。
- readwrite
	- 値の書き換えがどこでもできる。getter, setterがともに生成される。
Ctrl-Tab でファイル(バッファ)をクルクル

.emacs に以下の記述を加えることで、Ctrl-Tab キーでバッファをクルクル切り替えることができます(Windowsライクに)。
`*scratch*` や `*Help*` 等のバッファは無視(スキップ)されるので、ファイルを開いているバッファのみが選択されることになります。ファイル(バッファ)を見つけるのがとても早くなります。お試しあれ！

> 2014/05/26: 修正
> XEmacs 21.4 (patch 22) "Instant Classic" [Lucid] (i586-pc-win32) に対応

```el:.emacsに追加
(global-set-key (kbd "<C-tab>") 'my-rotate-buffer)
(defun my-rotate-buffer ()
  (interactive)
  (let ((bufflist (buffer-list))
        (bufforig (current-buffer))
        (found nil)
        currbuff buffname)
    (while (and bufflist (not found))
      (setq currbuff (pop bufflist))
      (setq buffname (buffer-name currbuff))
      (cond
       ((eq bufforig currbuff) nil)
       ((string-match "^[ ]" buffname) nil);; minibuffer
       ((string-match "^[*]" buffname) nil);; *scratch*, *Help*, etc
       (t (setq found currbuff))))
    (if (not found)
        (ding)
      (switch-to-buffer found)
      (if (featurep 'xemacs)
          (bury-buffer found nil)
        (bury-buffer found)))))
```
データ分析用の計算機環境を用意する

本日は少し趣向を変えて計算機環境の話をします。

# 計算機環境の準備

今日現在では計算機の処理速度は十分に高速なため、複雑な重回帰分析などでも市販の計算機でも一瞬で結果を導くことができるようになりました。とはいえデータの種類や演算の内容、分析の方法によっては、大量のメモリや、ストレージ容量が必要になることがあります。このようなとき、会社や大学などで支給されるような一般の PC では処理が事実上不可能な場合があります。そこでデータ分析用に計算機環境を整える必要があります。

## クラウド

Amazon EMR の [Hadoop](http://hadoop.apache.org/) クラスタはプリセットでほとんどのことが準備されているため、手軽かつ強力な環境です。

Amazon EMR
https://aws.amazon.com/jp/elasticmapreduce/

また自前で Hadoop インフラなどを構築することができ、なおかつ GNU/Linux 上で柔軟に作業をしたいという場合であれば Amazon EC2 上に環境を用意したほうが良い場合もあります。筆者も Amazon EC2 を利用しています。

Amazon EC2
http://aws.amazon.com/jp/ec2/

データを蓄積するストレージとしては Amazon S3 が便利です。 Hadoop でデータを分析する際は中間領域が必要になるので、その分も考慮しなければなりません。

Amazon S3
http://aws.amazon.com/jp/s3/

AWS などの従量課金型クラウドを利用する長所としては、使ったら使ったぶんだけ費用を負担すれば良く、自前で計算機を維持するコストがかからないことでしょう。短所としてはその分、コスト計画の見積りが若干難しくなりがちな点です。

## クラスタ計算機

すべてをクラウドで処理するのが必ずしも効率的かつコストパフォーマンスに優れるとは限りません。場合によっては物理計算機を自前で揃えてクラスタを組んだほうが良い場合もあるでしょう。

長所としては、ストレージ上に大量のデータを長期間保存するが参照頻度が低いといった場合や、データの通信量などが多くてクラウドに向かないといった用途でコストパフォーマンスが優れる場合があります。短所は、計算機を自前で管理する必要がある点でしょう。

最近の理系の研究室では 1TB 程度のメモリを搭載したクラスタ計算機も珍しくなくなりました。これに Hadoop や分散ファイルシステムを装備するとクラウドとはまた違った観点で様々なことができるようになります。

## 高性能計算機

処理の内容によってはコア数を増やしても分散せず 1 コアまたは 1 ユニットで負荷の高い計算をする必要に迫られることもあるでしょう。

執筆時点の現在であれば [Intel Core i7 プロセッサ](http://ja.wikipedia.org/wiki/Intel_Core_i7) でも [3 万円台の価格](http://kakaku.com/pc/cpu/itemlist.aspx?pdf_se=22)で高性能なものが購入できますし、市販のワークステーションであればメモリを 128GB から 256GB 搭載することができます。また一般向けの PC でも昨今では 16GB から 32GB 程度のメモリを積むのは現実的な価格で可能ですし、計算機を一式揃えてもせいぜい 20 万円程度に収まることがほとんどです。

1 コアあるいは 1 ユニットで集中的な処理をする場合は高性能な計算機があると良いでしょう。もちろんそれでも処理しきれず計算機が落ちてしまうような処理をするのであればクラスタ計算機などで分散処理をすることを検討するべきです。

## スキャナとプリンタ

計算機と直接関係はありませんが、資料を取り込んでデジタルデータにするためのスキャナと、データを出力するためのプリンタもあると良いでしょう。

とくに [matplotlib](http://matplotlib.org/) は出版品質の図を多くのフォーマットで提供することで知られていますから Web だけでなくプリンタとの親和性も抜群です。

また、理系の研究室などで、紙にノートをまとめるなどして知財管理をおこなっている場合、演算結果を出力してノートに貼るプリンタはほぼ必須となります。

## まとめ

というわけで今回は計算機環境について書き連ねてみました。計算処理をどこでおこなうかは向き不向きがありますので、用途に応じてうまく使い分けるようにしたいところです。
TreasureDataで前月から日毎で集計したい場合のクエリ

# 利用ケース
例えば、2014-04-01から本日である2014-05-19までのユーザidを集計や累計したい場合に、
TreasureDataが提供するUDFであるTD_TIME_ADDを使いたい。
例えば、前月の指定には、TD_TIME_ADD(time, '-1M', 'JST')など。
しかし、現在は上記のような、TD_TIME_ADDでMonthやYearでの加減が行えない。
http://docs.treasuredata.com/articles/udfs#tdtimeadd

そのため、TD_TIME_ADD(time, '-30d', 'JST')を使っての指定が必要になるが、月の日数は不定であるため、下記サンプルクエリのような一工夫がいる。

(2017-05-29)下記のサンプルは古い。TD_DATE_TRUNCを使うことで前月をもう少しまともにかける。（まだ複雑だが・・・）

```sql
WHERE
TD_TIME_RANGE(time,
  TD_DATE_TRUNC('month', TD_TIME_ADD(TD_DATE_TRUNC(month, TD_SCHEDULED_TIME, 'JST'), '-1d', 'JST'), 'JST'),
  TD_SCHEDULED_TIME(),
  'JST'(
```

やっていることは単純に、TD_DATE_TRUNCで月初を指定し、そこから1日引いて、再度月初にTRUNCしているだけで、
必ず前月の月初を指定できる。（ちょっとめんどくさいが、こっちのほうがよさげ。






# 古いサンプルクエリ
前月から各日毎のユーザ数の集計を行うクエリ

```sql
SELECT 
  date_time,
  COUNT(1) AS cnt
FROM
(
 SELECT 
   uid,
   TD_TIME_FORMAT(time,'yyyy-MM-dd','JST') AS date_time,
   TD_TIME_FORMAT(TD_SCHEDULED_TIME(),'yyyy-MM-dd','JST') AS now_datetime
 FROM access
 WHERE 
  time < TD_SCHEDULED_TIME()
  AND time >= TD_TIME_ADD(TD_SCHEDULED_TIME(),'-64d','JST')
) monthly
WHERE (MONTH(now_datetime)- MONTH(date_time)) IN (0, 1, -11)
GROUP BY
  date_time
```

# 古いサンプルクエリ説明
## サブクエリ部
このサブクエリでは、テーブルから少なくとも前月までのデータが入る期間を指定している。
2ヶ月*31日 = 62, Timezoneなどを考慮し、念のため+2もしている。

TD_SCHEDULED_TIME()をスケジュールクエリではなく利用すると、現在時刻が格納される。

```sql
(
 SELECT 
   uid,
   TD_TIME_FORMAT(time,'yyyy-MM-dd','JST') AS date_time,
   TD_TIME_FORMAT(TD_SCHEDULED_TIME(),'yyyy-MM-dd','JST') AS now_datetime
 FROM access
 WHERE 
  time < TD_SCHEDULED_TIME()
  AND time >= TD_TIME_ADD(TD_SCHEDULED_TIME(),'-64d','JST')
) monthly
```

## 条件部
Monthは、日付の文字列から月のみをintで出力する関数。
そこで、(集計日の月 - レコードの日付の月)を実施し、その差分を見て同月か前月かそれ以外かを判断している。

- 0: 同月
- 1: 前月
- -11: 集計日の月が1月、レコードの日付の月が12月の場合

```sql
WHERE (MONTH(now_datetime)- MONTH(date_time)) IN (0, 1, -11)
```
Railsでバルクインサート・アップデート


`activerecord-import`というgemを利用する。

## 試した環境
* Rails 3.2.18
* activerecord-import 0.5.0

## インサート
ノーマルにinsertするときはこんな感じに書く。

```
100.times do |n|
  Hoge.create!(foo: "foo#{n}", bar: "bar#{n}")
end
```

このやり方だと100個のINSERT文が個別に走る。
それが嫌だなって時に便利。

バルクインサートを利用して書いてみる。

```
hoges = []
100.times do |n|
  hoge = Hoge.new(foo: "foo#{n}", bar: "bar#{n}"
  hoges << hoge
end

Hoge.import hoges
```

こうすると、INSERT文が1つになる。

## アップデート
インサートと同じように書ける。

```
hoges = []
Hoge.find_each do |hoge|
  hoge.foo = "fugafuga"
  hoges << hoge
end

columns = [:id, :foo]
values = hoges.map{|hoge| [hoge.id, hoge.name] }

Hoge.import columns, values, on_duplicate_key_update: [:name]
```

こう書くと、バルクアップデートが可能。

さらなる高速化を目指すのであれば、
`updated_at`の更新をしない、validationをオフにする、などの方法がある。
これらは上記の最後の文を以下のように変更すれば実現可能。

```
Hoge.import columns, values, on_duplicate_key_update: [:name], timestamps: false, validate: false
```

使いどころはちゃんと考えなゃいけないけど、便利っぽい。
GoでGAEを使いたい(開発環境はATOMで)


自分の場合開発環境としてATOMを使っていますが、
ちゃんとappengineパッケージとかをATOM側に認識させるにはコツみたいなものがあったので
メモとして残しておきます。


##GAE環境構築

ここを参照です。
http://qiita.com/135yshr/items/de2b8cc7ec9ae1ce2cd9 


##goenvのインストール
ここを参照です
http://d.hatena.ne.jp/sasaplus1/20130616/1371352276

##ATOM側の設定
ここを参照です
http://qiita.com/abe00makoto/items/b7b27254a43d50b7aba2


##使い方

プロジェクト名 hellowordとして作成します。
注意点としてGAE/GoSDKは~/go_appengineに置いてる前提です。

```bash:コマンド
goenv -gae -go=$HOME/go_appengine/goroot  helloworld
source helloworld/activate
atom helloworld/src/
```
[memo]MACアドレス取得

①AndroidManifest.xmlに追加。
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>

②Activityで取得
WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); 
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
 
String macAddress = wifiInfo.getMacAddress();
ATOMでGolangの環境設定

ずっと触っていなかったのですが、久しぶりに触ってみたらだいぶ変わっていたので内容を反映します。
必要なATOMパッケージは「go-plus」「godef」+依存パッケージとなります。

gocodeとの連携がサポートされていて補完が効くようになりました。
またgodefを入れることでCtrl+iで定義箇所へジャンプできるようになりました。



![http://f.cl.ly/items/3n3S2j2r0e3B1C2L0Y34/go-plus-example.gif](https://i.github-camo.com/72bcfb055417eddd9db61133d1ac322cd440a88a/68747470733a2f2f636c6f75642e67697468756275736572636f6e74656e742e636f6d2f6173736574732f3734343734302f383736373631332f36383731386532322d326531662d313165352d396533632d6166653563323337393264372e676966)


#前提条件
$GOPATHは```~/go```に設定済みであるとします。
Golang自体はhomebrewにてインストール済みとします。


#Golang側の必要コマンドのインストール

ATOM側で必要としているGolang各種ツールをインストールします。

```bash:インストール
go get golang.org/x/tools/cmd/goimports
go get github.com/nsf/gocode
go get github.com/rogpeppe/godef

brew install go-delve/delve/delve
```

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

```bash:インストール
apm install go-plus
apm install godef

```
#設定
cmd+[,]で設定画面を開きgo-plusの設定を行います。
設定項目は以下のとおりです。

|設定箇所             | 設定値                          |
|:------------------|--------------------------------:|
| GOPATH           |~/go                             |
centos6.5にmroonga標準パッケージのSCL mysql5.5を突っ込んだ話


#概要
mroongaがメジャーバージョンアップしたため、centos6の標準パッケージにあるmysql5.1が非推奨となりました。
そこで、mroonga推奨SCL mysql5.5に対応したときの四苦八苦したことをメモします。

#mroongaインストール
インストール手順は[mroonga公式](http://mroonga.org/ja/docs/install.html#centos-6)とほぼ同じですが、ちょっと違います。

##注意点
SCLでインストールしたソフトウェアは */opt/rh* に入ります。
なので、SCLのmysqlは */opt/rh/mysql55/* となり、 *my.cnf* は */opt/rh/mysql55/root/etc/my.cnf* にあります。
また、これらのソフトウェアはyumでインストールしてもPATHが通っていないので、自分で設定する必要があります。
詳しくは[IDC Frontier Engineers' Blog](http://www.idcf.jp/blog/cloud/software-collections-for-centos-6/?doing_wp_cron=1400462633)

##インストール手順
詳細はコメントを見てください。

```bash
% yum install centos-release-SCL
% rpm -ivh http://packages.groonga.org/centos/groonga-release-1.1.0-1.noarch.rpm
% yum makecache
# 変更：>>>
# mysql mysql55-mysql-server -> mysql55 mysql55-* 
% yum install -y mysql55 mysql55-*
# 変更：<<<

# 変更：>>>
# my.cnf[/opt/rh/mysql55/root/etc/my.cnf]のディレクトリ設定を/mysqlに変更
% cat /opt/rh/mysql55/root/etc/my.cnf
[mysqld]
user=mysql
#datadir=/opt/rh/mysql55/root/var/lib/mysql
datadir=/mysql
#socket=/var/lib/mysql/mysql.sock
socket=/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under different user or group, 
# customize your systemd unit file for mysqld according to the
# instructions in http://fedoraproject.org/wiki/Systemd

[mysqld_safe]
log-error=/var/log/mysql55-mysqld.log
pid-file=/mysql/mysqld.pid

# /mysqlにselinuxラベル「mysql_db_t」を追加
% ls -lZ / | grep mysql
drwxr-xr-x. mysql mysql system_u:object_r:s0 mysql

% semanage fcontext -a -t mysqld_db_t "/mysql(/.*)?"
% restorecon -R -v /mysql

% ls -lZ / | grep mysql
drwxr-xr-x. mysql mysql system_u:object_r:mysqld_db_t:s0 mysql
# 変更：<<<

% /etc/init.d/mysql55-mysqld start
% yum install -y mysql55-mroonga
(% sudo scl enable mysql55 mysqladmin -u root password 'new-password')
```