OmniAICreator/Qiita-1.07M huggingface dataset:
Linuxのキーボードのマップを変更する



日本語
/etc/sysconfig/keyboard

	KEYTABLE="jp106"
	MODEL="jp106"
	LAYOUT="jp"
	KEYBOARDTYPE="pc"

US
/etc/sysconfig/keyboard

	KEYTABLE="us"
	MODEL="PC105+inet"
	LAYOUT="us"
	KEYBOARDTYPE="pc"


以上
Material Designについて色々と

Googleが先日IOで発表したMaterial Designについていまさら思った事など
アニメーション、スタイルのページについてメモ。

レイアウトのページ以降はまたどこかで。

※以前社内ブログに書いたものを調整して転載です

# Introduction

http://www.google.com/design/spec/material-design/introduction.html

## メタファーは紙？

薄く重ねた表現ということで紙と言っているんではないかと思う。
どちらかといえば薄いプラスチック?

もし紙だったらテクスチャの質感や表示時に傾く、ゆれる演出が入るんじゃないかと。
四角形がゆがむことはないので紙の見え方とはなんか違う。紙のやわらかさがない　[これのMaterial responseとか](http://www.google.com/design/spec/animation/responsive-interaction.html#responsive-interaction-responsive-interaction-examples)
タップ時の広がり方にしても紙だとあのようにはならないです。
色のガイドラインの透明感にしてもプラスチックと考えた方がいいんじゃないでしょうか。

## Bold, graphic, intentional

この意図は携帯、タブレット、PCで統一するためかと。
今後の端末高解像度化、画像素材のベクターデータ化を見据えてと思われる。
ポイントとしては、外枠に線いれるのは今後なくなっていきそう。背景色で枠を見せる。

# アニメーション

## 基本
http://www.google.com/design/spec/animation/authentic-motion.html

動きの基本は２つ

### イーズイン＋イーズアウト　(Mass and Weight)
加速して減速。ふわふわっと。

### 重力　(Special Cases: Entering and Exiting Frame)
一定の下方向加速


## タップ反応

http://www.google.com/design/spec/animation/responsive-interaction.html

マテリアルデザインで一番わかりやすいタップ位置から広がる演出。

## Material Response

http://www.google.com/design/spec/animation/responsive-interaction.html#responsive-interaction-surface-response

要は視線の動きにそった動きを作る事。
基本はタップした位置から始まる。タップした時にはタップした場所をみているものなので。


## トランジションに意味をつける

http://www.google.com/design/spec/animation/meaningful-transitions.html

前後の画面で選択、詳細など関連性が強いとき、画面をひきつぐように見せる。
なにがどこにいったか迷わせないため。

### Hierarchical Timing

http://www.google.com/design/spec/animation/meaningful-transitions.html#meaningful-transitions-hierarchical-timing

複数の同列の要素がある場合の表示方法。
視線の流れに沿う。

## Consistent Choreography

http://www.google.com/design/spec/animation/meaningful-transitions.html#meaningful-transitions-consistent-choreography

並列要素に異なる動きをつけない。
動きで目立たせようとしないこと。動きはコンテンツの中心にしない。


# スタイル

## カラー

http://www.google.com/design/spec/style/color.html

ポイントは基準となる色(500)があり、段階的にしている。段階は薄くなる方向と濃くなる方向がある。
細かい差を使わない事。


## UI Color Application
http://www.google.com/design/spec/style/color.html#color-ui-color-application

主要な色は３色まで。
このへんはデザインの基本的なことの話になってる。

グレーの文字には透明度87%を使う。%まで指定は珍しいけど基本通り。

ステータスバーの色は700（濃いめ）を。

## 文字

http://www.google.com/design/spec/style/typography.html

フォントはRoboto。
指定は拡大可能に。(アクセシビリティ)
サイズは段階的に。
行間の取り方にかなり余裕がある。
改行は文にこだわりすぎない。基本的に流す。
文字間、大きなサイズになると狭く。

## アイコン

http://www.google.com/design/spec/style/icons.html#

余白の取り方は形による。見た目の大きさ優先。
線の太さは一定。(チェックマークなど払いをいれない)
角の丸さにはルールあり。2dp
斜めの線は45度。統一感をだす
Fluentd v0.10.52のリリース

[Fluentd v0.10.52がリリース](http://www.fluentd.org/blog/fluentd-v0.10.52-is-released)されました．

実は前回のバージョンからFluentdの[公式ブログ](http://www.fluentd.org/blog/)でもアナウンスをやっているのですが，英語だと日本の人たちが読んでくれないことも結構あるので，日本語でも書くことにしました！

v0.10.52の変更点は以下になります．

* in_tail: Fix typo of warning argument. lb to line: [#384](https://github.com/fluent/fluentd/pull/384)
* config: Fix 'uninitialized constant Fluent::Config::V1Parser::URI' error: [#375](https://github.com/fluent/fluentd/pull/375)
* config: Reject '@' prefix of parameter name in V1 configuration. @ is reserved prefix: [#379](https://github.com/fluent/fluentd/pull/379)
* config; Accept '#' comment in array and hash types in V1 configuration: [#383](https://github.com/fluent/fluentd/pull/383)
* parser: Add time_format option to SyslogParser: [#381](https://github.com/fluent/fluentd/pull/381)
* parser: SyslogParser now makes ':' optional after pid: [#382](https://github.com/fluent/fluentd/pull/382)
* process: Fix 'mutex can't lock' issue of DetachMultiProcessMixin on Ruby 2.x: [#380](https://github.com/fluent/fluentd/pull/380)
* Add --without-source option to ignore \<source> sections: [#377](https://github.com/fluent/fluentd/pull/377)

こまごまとした変更を除けば，大事なのは3つくらいです．

## Fix 'uninitialized constant Fluent::Config::V1Parser::URI' error

これはv0.10.51でのregressionです．設定ファイル内でincludeを使っていると起きてしまうエラーです．地味につらい問題でした…

## Accept '#' comment in array and hash types in V1 configuration

Fluentdはv0.10.46から設定にJSONのarray/objectを書けるのですが，設定ファイルで使っている`#`でのコメントが書けませんでした．それを緩和しました．

## Add --without-source option to ignore \<source> sections

経緯は[issue #279](https://github.com/fluent/fluentd/issues/279)を読んでもらえば分かるのですが，主にバッファをフラッシュするときにInputプラグインが起動してしまうと，さらにイベントが飛んできて面倒なので，それを抑制するための機能です．
いくつか実装案はあったのですが，一番楽な方法に落ち着きました．いずれunixドメインソケットみたいなのを経由して，実行中にこの辺をハンドリング出来れば，という野望もあります．

<hr>

以上です．今回は機能的な追加よりも，運用向けの改善が多い感じになりました．今は[Filter and Label](https://github.com/fluent/fluentd/wiki/filter_label)の実装に取りかかっていて，いずれもっと使いやすくなる予定です :)


またRubyや依存パッケージのバージョンが最新になっているtd-agent 2も随時リリースしていくので，まだExperimentalな位置づけですが，興味のある方は試してもらえればと思います．

## 追記

Fluentd v0.10.52を同梱したtd-agent 2.0.4をリリースしました．
内容は以下のリリースを参照してください．

https://groups.google.com/forum/#!topic/fluentd/_rtCLirR4SA
grep実行時に既存の*grep*バッファを残すようにする

# はじめに
grepコマンドを実行した時に、\*grep\*バッファが１つしか生成されず、既存の\*grep\*バッファが上書きされるのはコードリーディング時には非常に不便。
なので、バッファ名をリネームするアドバイスを.emacs.elに追加した。
# .emacs.el
```el:.emacs.el
;;; .emacs.elの末尾に追加
;; grep実施時に複数のバッファで開けるよう設定
(defadvice grep (after my-grep activate)                              ;; grep実施後に実行
  (let ((grep-buffer (get-buffer "*grep*")))                          ;; *grep*バッファをローカル変数に代入
    (set-buffer grep-buffer)                                          ;; カレントバッファを*grep*バッファに設定
    (rename-buffer (concat "*grep*" "<\"" (ad-get-arg 0) "\">" ) t)   ;; バッファ名をリネームする
  )
)
```
`grep -nH -e "hoge" "*.el"`
を実行した時の生成されるバッファ名は下記のようになる。
`*grep*<"grep -nH -e "hoge" "*.el">`
これで複数の*grep*バッファを生成することが可能となった。
# 個人的につまづいたところ
久しぶりにelispを触ったので忘れていたが、letでローカル変数を定義する場合はローカル変数が1つでも()が2つ必要であった。
今後も注意したい。

```el:*scratch*
;; ローカル変数1つの場合
(let ((hoge 1))
  (+ hoge 2)
)

;; ローカル変数2つの場合
(let ((hoge 1)
      (piyo 2))
  (+ hoge piyo)
)

```
cv::flann:hierachicalClusteringの使い方について

Kmeans法だと初期クラスタ数を指定しないといけないところを、初期クラスタを自動で推定してくれる？hierarchicalClusteringの使い方メモ

```
cv::Mat1f originMat; ←元となる画像から生成したMat
cv::Mat1f centers(cv::Size(originMat.cols, originMat.rows), CV_32FC1);
cvflann::KMeansIndexParams k_params(10, 500,cvflann::FLANN_CENTERS_KMEANSPP,0.2);
int count = cv::flann::hierarchicalClustering<cv::flann::L2<float>>(originMat,centers,k_params);
```

これで、originMat内のクラスタ数がcountに代入される。
node.js起動時エラー : Error: listen EADDRINUSE

# 事象
さっき動いていたのに、
node app.jsで起動しようとしたら、下記エラーが。

```
events.js:72
        throw er; // Unhandled 'error' event
              ^
Error: listen EADDRINUSE
    at errnoException (net.js:904:11)
    at Server._listen2 (net.js:1042:14)
    at listen (net.js:1064:10)
    at Server.listen (net.js:1138:5)
    at Function.app.listen (/vagrant/girly/girly-batch/node_modules/express/lib/application.js:532:24)
    at Object.<anonymous> (/vagrant/girly/girly-batch/bin/www:7:18)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
```

# 原因
すでにそのポート使ってるよって怒られいるんです。

# 解決

既存プロセスを探して死んでもらう。
再度起動する。

```console
$ ps aux | grep node
vagrant  14761  0.0  2.0 704016 38520 pts/0    Sl+  01:22   0:01 node app.js
vagrant  15069  0.0  0.0 107456   908 pts/2    S+   01:59   0:00 grep --color=auto node

$ sudo kill -9 14761
$ node app.js
```
MySQLでプロセスを中断

```mysql
mysql> show processlist;
```

| id | user | host | database | command | time | state | info |
|:---|:-----|:-----|:---------|:--------|:-----|:------|:-----|
|  1 | root | localhost | mysql | query | 0    | init  | show processlist |
|  2 | user | xample.com | test | sleep | 180  |       |      |


```mysql
mysql> kill /*id*/2;
```
UITableViewCell 選択時の色を変更する方法と注意点

UITableViewCellをタップしたときの選択色は、UITableViewCellSelectionStyleにより変更できますが、これではGray, Blue, Noneしかなく、他の色を選択できません。

他の色に変えたい、表示を変えたい（画像を変えるなど）をするためには、
UITableViewCellのsetHilighted animatedメソッドをオーバーライドする必要があります。

```objc
// 選択時の状態を表す
-(void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated {
    if( highlighted ) {
        [self setBackgroundColor:[UIColor greenColor]];
    } else {
        [self setBackgroundColor:[UIColor whiteColor]];
    }
}
```

# 注意点

[uitableviewcellの選択色をカスタマイズ](http://codingcafe.jp/uitableviewcellの選択色をカスタマイズ/)を参考に、方法は分かったのですが、注意点としてXCodeの補完に

```objc
-(void)setHighlighted:(BOOL)highlighted
```

というメソッドででてきてしまい、誤ってこちらをオーバーライドすると、全く変化が
無いので要注意です。

# 参考

[uitableviewcellの選択色をカスタマイズ](http://codingcafe.jp/uitableviewcellの選択色をカスタマイズ/)
Chef-soloでoverride_attributeする時に注意

#Chef-soloでmongodbのattributeを上書きする

## 有りがちなミス
```
{
  "run_list": [
    "recipe[nginx]",
    "recipe[nodejs]",
    "recipe[mongodb]",
    "recipe[redis]"
  ],
  "override_attribute" : {
     "mongodb":
      {
        "version": "2.6.3-1",
        "replSet": ""
      }
  }
}
```

override_attributeは不要である。

## 正しく上書きできる

```
{
  "run_list": [
    "recipe[nginx]",
    "recipe[nodejs]",
    "recipe[mongodb]",
    "recipe[redis]"
  ],
  "mongodb":
    {
      "version": "2.6.3-1",
      "replSet": ""
  }
}
```
Homebrewのパーミッションが壊れたときの対策

```brew update```を実行しても、以下のようなエラーメッセージが出る場合があります。

```zsh
$ brew update
error: unable to unlink old 'CONTRIBUTING.md' (Permission denied)
```

今回は、Homebrewのインストールディレクトリのパーミッションが壊れているためエラーが出ていました。

対策として、以下のコマンドを実行して

* パーミッションを修正する
* ```brew update```ではなく、手動でFormulaを更新する

よう対策します。

```zsh
$ cd $(brew --prefix)

$ ls -af .
$ sudo chown -R [username]:admin $(brew --prefix)

$ git fetch --all
$ git reset --hard origin/master

```
dockerのデータ永続化はcronでcommitし続ければいい気がしてきた

[DockerHub - データコンテナの使い方 - Qiita](http://qiita.com/tukiyo3/items/d123e1f9703154fd79b1)

```bash:cronに登録しておく
#!/bin/sh
set -eu

WORKDIR="/mnt/usb/docker"
if [ ! -d $WORKDIR ];then
    echo "$WORKDIR cannot access" | mail -s "alminiumbackup.sh" tukiyo3@gmail.com
fi

docker commit -a "tukiyo3 <tukiyo3@gmail.com>" c3215e67cf97 private/alminium-backup
docker save -o $WORKDIR/alminium-backup.tar private/alminium-backup
gzip $WORKDIR/alminium-backup.tar
mv $WORKDIR/alminium-backup.tar.gz $WORKDIR/alminium-backup.tar.gz.`date "+%a"`
```

# dockerのIMAGEは積み上げ式

IMAGEは積み上げ式です。
コミットすると前のIMAGEに追加されます。
前のIMAGE内にあったファイルを削除しコミットしたところでIMAGEサイズは縮みません。

IMAGEのサイズを小さく抑え続けるにはIMAGEに対するコミットの回数を極力減らすこととなる。

# 手順

* [docker上のCentOS7でsshdを起動 - Qiita](http://qiita.com/tukiyo3/items/c3cf46f28766e9cf728f)を済ませてcommitしておく。

```bash:
docker run \
 --name production \
 -it \
 -d \
 -p 2222:22 \
 tukiyo3/centos-ja:7.0sshd \
 /usr/sbin/sshd -D
```

こんな感じで起動させておき、

```bash:オートコミット
docker commit \
  --pause=false \
  -a "tukiyo3 <tukiyo3@gmail.com>" \
  $(docker ps -a | awk '/production\s+$/{print $1}') \
  "tukiyo3/production:$(date '+%Y%m%d_%H%M')" \
  || mail -s "auto commit error" tukiyo3@gmail.com
```

* `--pause=false`はdocker1.1.0で追加された、コミット中の動作一時停止しないオプション

```bash:save(イメージ->tar)
docker save -o 20140715_0808 tukiyo3/production
```

* docker export (コンテナ->tar)はそのままだと復元できないので使わないように。

後は古いイメージをHDD容量と相談しながら削除。
増分の保存なのでそんなに一気には増えないでしょう。


## tarからイメージ復元

```bash:
docker load -i private_alminium.tar
```
docker上のCentOS7でsshdを起動

docker使っていない人にdockerの環境を使ってもらうにはsshdがないと拒絶反応起こす。
あと`ctrl-p`が喰われるのがとても痛いのでsshdやっぱりいいよね。

```bash:
docker run --name production -it -p 2222:22 \
 tukiyo3/centos-ja:7.0 /bin/bash
```

/etc/rc.d/init.d/functions が無いとssh-keygenが出来ないので
initscriptsをインストール

```bash:sshd
yum install -y passwd openssh-server initscripts
/usr/sbin/sshd -D &
```

```bash:コンテナにssh接続
ssh root@192.168.2.4 -p 2222
```
docker上のCentOS7でMariaDBを起動

[docker上のCentOS7でsystemctlからのmariadbの起動は出来ない - Qiita](http://qiita.com/tukiyo3/items/b24e4dc62de59d4a7570)

```bash:
docker run --name production -it -p 3306:3306 \
 tukiyo3/centos-ja:7.0 /bin/bash
```

## 初期設定

```bash:インストール
yum install -y mariadb-server
mysql_install_db --user=mysql --ldata=/var/lib/mysql/
```

## 起動

```bash:起動
nohup mysqld_safe &
```

```bash:接続
mysql
```

## 停止

```bash:停止
mysqladmin shutdown
```
Hubotが簡単に試せるVagrantFileとshellを書いた


## 概要

[ikemonn/hubot_box](https://github.com/ikemonn/hubot_box)

[Hubot](https://hubot.github.com/) × [HipChat](https://www.atlassian.com/ja/software/hipchat)を試してみたくなったので、Vagrant環境で試せるようにVagrantFileとshellを書いた。

READMEに書いてあるとおりのコマンドをコピペすれば、Hubotが動くまでのところまでは簡単にたどり着ける。
vagrant box addとvagrant upに時間がかかるので注意。

HipChat連携を試したい人は、下記を参考にアカウントを取得する必要がある。
[hubotをHipChatのbotとしてherokuにデプロイしてみる](http://www.mrlittlebig.com/blog/057/)


Apacheとredis-commanderもインストールするようになっているので、Redisの中身を見るときに使うと便利。

## README


環境
------
CentOS6.5 
Redis 
redis-commander 
Node.js 
CoffeeScript 
Apache 
Hubot
hubot-hipchat  


使い方
------
### HUBOTを試す
```
$ git clone https://github.com/ikemonn/hubot_box.git
$ cd hubot_box
$ vagrant box add centos65 http://www.lyricalsoftware.com/downloads/centos65.box
$ vagrant init centos65
$ cp -f ./conf/Vagrantfile ./Vagrantfile
$ vagrant up
$ vagrant ssh
$ cd /vagrant
$ hubot --create mybot
$ cd mybot
$ npm install
$ hubot
Hubot> hubot ping
Hubot> PONG # PONGが返ってきたらOK
```

### HipChat連携を試す

```
# 上記作業終了後
$ vi bin/hubot
--------------
#!/bin/sh

npm install
export PATH="node_modules/.bin:node_modules/hubot/node_modules/.bin:$PATH"
# Admin権限のあるAPIトークン
export HUBOT_HIPCHAT_TOKEN="Admin API Token"
# hubotユーザのJID
export HUBOT_HIPCHAT_JID="hubot JID"
# hubotユーザのパスワード
export HUBOT_HIPCHAT_PASSWORD="hubot password"
# ルームID
export HUBOT_HIPCHAT_ROOMS="your room"
# hubotはデフォルトで8080を使うが、既に使われている場合は適当に設定
# export PORT=9999

exec node_modules/.bin/hubot "$@"
--------------
$ npm install  hubot-hipchat --save
$ bin/hubot -a hipchat
```

その他
------
Apacheと[redis-commander](http://joeferner.github.io/redis-commander/)をいれているので、Redisの中身を覗きたいときは
使用すると便利。

##参考
[ikemonn/hubot_box](https://github.com/ikemonn/hubot_box)
pyenvでpipで入れられないライブラリをインストールする時のオプション

# 背景

しつこく、続けいている最新リリース版ninix-ayaをDockerで動かそうと、Python3.4では、うまくゴーストがインストール出来なかったので、どうやら、3.3向けに開発されているようなので、pyenvを導入。

ninix-ayaで使うGPyGObjectはpipでは、Windowsプラットフォーム以外は手動で入れる必要がある。

# 問題点

pyenvでpythonコマンドが任意の版に変更できても./configure&&make系はデフォルトでは/usr/local等に入れられてしまう。これでは、pyenvでpythonの版が手軽に変更できても、毎度ビルドする羽目になる。

# 解決方法

## pyenv prefixを使う

pyenvの公式ページのインストールしたpythonのアンイストール方法でのみ乗っているコマンドのpyenv prefixを使うことで解決した。

```
./configure --prefix=$(pyenv prefix)
```

こんな感じで指定する。

# まとめ

もしかすると、Virtualenvを使うとこの問題解決なのかもだが、面倒くさいので今のところ使ってない。

# 関連記事

- [pyenvがぶっ壊れて何故かpython3が/usr/bin/python3になってしまう??](https://abrakatabura.hatenablog.com/entry/2020/07/07/122645)
try～catch使うほどじゃないけどgotoは嫌だってときのための便利な書き方

# **目的**

**[「まとめて例外をスローする小技」](http://qiita.com/mpyw/items/6bd99ff62571c02feaa1)** では何だか大がかり過ぎるなぁ、もっとライトなソリューションが欲しいなぁ、って時に（適当）

- gotoの是非についてはここでは議論しないことにします。
- ソースコード中の `※` については **[「$_GET, $_POSTなどを受け取る際の処理」](http://qiita.com/mpyw/items/2f9955db1c02eeef43ea)** を参照してください。

# **入力フォームと実行スクリプトが別ファイルのとき**

`while (true) { ... }` のように末尾に `break` を必要としない書き方です。

```html+php
<?php

// ※
function h($str) {
    return htmlspecialchars($str, ENT_QUOTES, 'UTF-8');
}

// ※
foreach (['name', 'email', 'comment'] as $v) {
    $$v = (string)filter_input(INPUT_POST, $v);
}

do {
    
    // 入力項目チェック
    if ($name === '') {
        $msgs[] = '名前が未入力';
    }
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        $msgs[] = 'Eメールが未入力または無効';
    }
    if ($comment === '') {
        $msgs[] = 'コメントが未入力';
    }

    // 1つでもエラーが発生していればdoブロックを脱出
    if (!empty($msgs)) {
        break;
    }
    
    // 処理を実行
    do_something_action($name, $email, $comment);
    $msgs[] = '～実行完了しました';

} while (false);

header('Content-Type: text/html; charset=utf-8');

?>
<!DOCTYPE html>
<html>
<body>
<?php if (!empty($msgs)): ?>
  <ul>
<?php foreach ($msgs as $msg): ?>
    <li><?=h($msg)?></li>
<?php endforeach; ?>
  </ul>
<?php endif; ?>
</body>
</html>
```

# **入力フォームと実行スクリプトが同一ファイルのとき**

`do` と `if` 組み合わせられるのってPHP特有なんですかね…？

```html+php
<?php

// ※
function h($str) {
    return htmlspecialchars($str, ENT_QUOTES, 'UTF-8');
}

// ※
foreach (['name', 'email', 'comment'] as $v) {
    $$v = (string)filter_input(INPUT_POST, $v);
}

// 何かPOSTデータがあったときだけ実行
do if ($_POST) {
    
    // 入力項目チェック
    if ($name === '') {
        $msgs[] = '名前が未入力';
    }
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        $msgs[] = 'Eメールが未入力または無効';
    }
    if ($comment === '') {
        $msgs[] = 'コメントが未入力';
    }

    // 1つでもエラーが発生していればdoブロックを脱出
    if (!empty($msgs)) {
        break;
    }
    
    // 処理を実行
    do_something_action($name, $email, $comment);
    $msgs[] = '～実行完了しました';
    
    // フォームをクリア
    $name = $email = $comment = '';

} while (false);

header('Content-Type: text/html; charset=utf-8');

?>
<!DOCTYPE html>
<html>
<body>
<?php if (!empty($msgs)): ?>
  <ul>
<?php foreach ($msgs as $msg): ?>
    <li><?=h($msg)?></li>
<?php endforeach; ?>
  </ul>
<?php endif; ?>
  <form method="post" action="">
    名前: <input type="text" name="name" value="<?=h($name)?>"><br>
    Eメール: <input type="text" name="email" value="<?=h($email)?>"><br>
    コメント: <input type="text" name="comment" value="<?=h($comment)?>"><br>
    <input type="submit" value="送信">
  </form>
</body>
</html>
```
ProGuardの設定ミスってる事に気がついた＞＜

しまった＞＜
ProGuardの設定ミスってる事にきがついた＞＜；


+ [【Androidアプリ】簡単作成　～設定ファイルのパッケージ名を1行変えるだけ～](http://qiita.com/Katemag/items/9a36b0fcc803f13fadbf)
+ [【Androidアプリ】簡単作成 第２巻～第１３巻 ＆ おまけ続き](http://qiita.com/Katemag/items/065cfaec4ff70409055c)
+ [【Androidアプリ】簡単作成 英語版 第１巻～第１３巻](http://qiita.com/Katemag/items/3213ce7ba2d1acbbca12)

上記で利用している
【基本ソースjar】aas_bj-v0.0.1.jar
の
jp.gr.java_conf.aas.bj.TitleActivity
の
難読化しちゃいけないメソッドを難読化してしまった見たいです。

具体的には、
res\layout\title_pop_beta.xml
res\layout\title_pop_review.xml
内で、
「android:onClick」から読んでいるメソッドっす～隊長…
やっぱり、「android:onClick」使わない方が良かったかな～。
楽だったから、つい使っちゃったけど。

ProGuardの設定をもう少し勉強せねば。

さて、どの方法で対応しようかな。

いずれにせよ、もう眠いので明日調べよう。

対応したら、ファイル名を aas_bj-v0.0.**2**.jarに変更して
２６アプリ内のjarファイルを入れ替えねば・・・orz

---
【2014/07/16 AM 05:30 追記】
勉強しました・・・

[【ProGuard】少しだけ勉強して見た私的メモ](http://qiita.com/Katemag/items/7aea93c464856e23bb2b)

さて、２６アプリのzip内のJarは、また明日だな。

---
# 対応完了！！
対応は完了済みですので、お気に召すままご利用下さい。
別にGooglePlayに上げる必要は無く、野良アプリとしての利用も出来るズラ！！

+ [【Androidアプリ】簡単作成　～設定ファイルのパッケージ名を1行変えるだけ～](http://qiita.com/Katemag/items/9a36b0fcc803f13fadbf)
+ [【Androidアプリ】簡単作成 第２巻～第１３巻 ＆ おまけ続き](http://qiita.com/Katemag/items/065cfaec4ff70409055c)
+ [【Androidアプリ】簡単作成 英語版 第１巻～第１３巻](http://qiita.com/Katemag/items/3213ce7ba2d1acbbca12)
Check! Amazon Cognito アマゾン コグニート

こんばんわ、[cloudpack](http://cloudpack.jp) の [@dz_](http://twitter.com/dz_) こと大平かづみです。

Introducion of Amazon Cognito
------

今日は Amazon Cognito の概要を和訳してみました。

> Amazon Cognito is a simple user identity and data synchronization service that helps you securely manage and synchronize app data for your users across their mobile devices. 

Amazon Cognito は、ユーザの識別情報とデータ同期を行うシンプルなサービスで、モバイル端末越しのユーザのために、安全なアプリデータの管理・同期を助けてくれます。

> You can create unique identities for your users through a number of public login providers (Amazon, Facebook, and Google) and also support unauthenticated guests.

パブリックなログインプロバイダ(Amazon, Facebook 及び Google)を通して、ユーザに対して固有の識別情報を作成することができ、また、認証してないユーザのサポートも行えます。

> You can save app data locally on users’ devices allowing your applications to work even when the devices are offline.

あなたのアプリケーションに挙動を許可することで、端末がオフラインの時であっても、ユーザの端末のローカルに、アプリデータを保存することができます。

> With Amazon Cognito, you can save any kind of data in the AWS Cloud, such as app preferences or game state, without writing any backend code or managing any infrastructure.

Amazon Cognito を使えば、バックエンドのコードを書いたりインフラ管理をすることなく、アプリの設定情報やゲームの状態など、どんな種類のデータでも AWS クラウドに保存できます。

> This means you can focus on creating great app experiences instead of having to worry about building and managing a backend solution to handle identity management, network state, storage, and sync.

これは、識別情報管理、ネットワーク状況、ストレージ及び同期の制御するためのバッグエンドソリューションのビルドや管理で悩まされる代わりに、素晴らしいアプリの体験を作ることに集中できることを意味します。

Epilogue
----------
最初、気になって、まず Cognito の本来の意味を調べてみたのですが、incognito = 匿名 しか見つからず、これの由来の言葉か、造語のようですね。
R: Saving and Reading Matrix in R


R has a very difficult, yet probally extremely powerful scheme called "dataframe". Because of its intrication, saving and reading can be difficult for a beginner like me. 


Suppose Mat is Matrix. The following will save in the text file that is readable from Matlab. 

> write.table(Mat, "Matrix", sep = ",", row.names = FALSE, col.names = FALSE)


Howver, the matrix saved this way cannot be read from R. When R reads a text file, it considers the column as "names" in data.frame attributes.  Without the prescribed names, R will confuse names with values.


>	data.frame attributes: 
		names: category. e.g. Sex 
		class: class of the category "Name". e.g. Male
		row.names: subjects. e.g. Josh, Mary


Instead, we shall

write.matrix("Matrix". sep = ", ")


When you do this, we can recover the file with


> M = read.csv("Matrix", header = FALSE)


M extracted this way, however, is data.frame. 

its columns are given the name Vk, and 
its rows are enumerated. 
	  

To extract the column, simply call M$Vk. 
To extract the row, as.numeric(M[k, ]) will do. 
You might want to prepare a separate matrix into which you copy thes numerics.
R: dlmMLE usage


This is the tool to help us with the M step.
This is connected to optim, so we can use that as well. 
	We are still using the model

	x_0 ~ N(m0, C0) 
	x_t = GG x_{t-1} + w_t v_t ~ N(0, W)
	Y_t = FF x_t + v_t w_t ~ N(0, V)


function dlmMLE

	Input: 

	Data:
		The time series data.

	Parameters: 
		The parameters subject to the Likelihood optimization

	build:
		function that returns a dlm object. That is, 
		build=function(x) will make the objective 		function the likelihood function of the dlm governed by parameter x. 



Example:

	buildTest <- function(x){ 
		m <- dlmModPoly(1, dV = exp(x[1]))
		m$JW  <- matrix(1)
		m$X <- matrix(exp(x[2]), nc = 1, nr = length(Nile))
		j <- which(time(Nile) == 1899)
	m$X[j,1] <- m$X[j,1] * (1+ exp(x[3]))
	return(m) 	 
	}

buildTest will give me dlm dependent on three parameters, in which W is given by 
	exp(x[2])*(1+ exp(x[3])).
R: Factor To Numeric



When x is in the form of factors,  
as.numeric(x) will only give the indices of the levels to which the entries are corresponding.
In order to fix this,  what we have to do is to call the level of x, and apply the corresponding index.
That is,
level(x)[x]
will do. 

>n_to_factor <- function(x){
	if(class(x) == 'factor'){
		as.numeric(levels(x)[x])	
		}
	else
		x 
}
R: plot fonts in Japanese




png seems to work fine, even sometimes without the following addition. 

>png("/tmp/test.png")
par(family="HiraMaruProN-W4")
plot(iris, main = "アヤメのデータ")
dev.off()


Also, add the following chunk to the .Rprofile. This requires X. 


>setHook(packageEvent("grDevices", "onLoad"),
	function(...){
        if(.Platform$OS.type == "windows")
            grDevices::windowsFonts(sans ="MS Gothic",
                                    serif="MS Mincho",
                                    mono ="FixedFont")
        if(capabilities("aqua"))
            grDevices::quartzFonts(
              sans =grDevices::quartzFont(
                c("Hiragino Kaku Gothic Pro W3",
                  "Hiragino Kaku Gothic Pro W6",
                  "Hiragino Kaku Gothic Pro W3",
                  "Hiragino Kaku Gothic Pro W6")),
              serif=grDevices::quartzFont(
                c("Hiragino Mincho Pro W3",
                  "Hiragino Mincho Pro W6",
                  "Hiragino Mincho Pro W3",
                  "Hiragino Mincho Pro W6")))
        if(capabilities("X11"))
            grDevices::X11.options(
                fonts=c("-kochi-gothic-%s-%s-*-*-%d-*-*-*-*-*-*-*",
                        "-adobe-symbol-medium-r-*-*-%d-*-*-*-*-*-*-*"))
        grDevices::pdf.options(family="Japan1GothicBBB")
        grDevices::ps.options(family="Japan1GothicBBB")
        }
)

>attach(NULL, name = "JapanEnv")
assign("familyset_hook",
       function() {
            winfontdevs=c("windows","win.metafile",
                          "png","bmp","jpeg","tiff")
            macfontdevs=c("quartz","quartz_off_screen")
            devname=strsplit(names(dev.cur()),":")[[1L]][1]
            if ((.Platform$OS.type == "windows") &&
                (devname %in% winfontdevs))
                    par(family="sans")
            if (capabilities("aqua") &&
                devname %in% macfontdevs)
                    par(family="sans")
       },
       pos="JapanEnv")
setHook("plot.new", get("familyset_hook", pos="JapanEnv"))
setHook("persp", get("familyset_hook", pos="JapanEnv"))
R: ggplot2 使い方




データフレームに専攻しているので、それに直さなければならない。

	library(ggplot2)

	A <- data.frame(x=0:5,y=0:5)
	B <- data.frame(x=(seq(from=0, to=10, by=1)), y=(seq(from=0, to=5, by=0.5)))
	C <- data.frame(x=(seq(from=0, to=5, by=0.5)), y=(seq(from=0, to=10, by=1)))

new.df<-rbind(A,B,C)






色の分け方：オートでやってくれる。だがその前にデータフレームにID をつける。


	new.df$ID<-rep(c("A","B","C"),c(nrow(A),nrow(B),nrow(C)))




なぜかファイルのセーブ方法が違う。ggsave を使え。

		ggsave(filename = fileTitle)

プロットの描写は以下のようにする。

		ggplot(new.df,aes(x,y,color=ID) )+geom_line() +labs(title = plotTitle ,x= xname, y = yname)


このように、データの長さが違ってもきっちり描写してくれる。
文字化けがおこる。文字化けノートを参照。

ちなみに、geom_path()をgeom_line()の代わりに使うと、点を関数になるように勝手にソートせずに、トラジェクトリーをそのまんま描いてくれる。

		ggplot(new.df,aes(x,y,color=ID) )+geom_path() +labs(title = plotTitle ,x= xname, y = yname)


http://docs.ggplot2.org/current/geom_line.html
gem:annotate

https://github.com/ctran/annotate_models/blob/develop/README.rdoc

##概要
現状のスキーマの注釈をコメントとしてファイルの上部や下部に追記してくれる。

- ActiveRecord models
- Fixture files
- Tests and Specs
- Object Daddy exemplars
- Machinist blueprints
- Fabrication fabricators
- Thoughtbot's factory_girl factories, i.e. the (spec|test)/factories/<model>_factory.rb files
- routes.rb file (for Rails projects)

追加される注釈はこんな感じ:

```rb
   # == Schema Info
   #
   # Table name: line_items
   #
   #  id                  :integer(11)    not null, primary key
   #  quantity            :integer(11)    not null
   #  product_id          :integer(11)    not null
   #  unit_price          :float
   #  order_id            :integer(11)
   #

    class LineItem < ActiveRecord::Base
      belongs_to :product
     . . .
```

##インストール

###Gemfile x rubygems.org で:

    gem 'annotate', ">=2.6.0"

###Gemfile x Github:

    gem 'annotate', github: 'ctran/annotate_models'

###environment gems に rubygems.org:

    gem install annotate

###environment gems に Github checkout:

    git clone git://github.com/ctran/annotate_models.git annotate_models
    cd annotate_models
    rake build
    gem install pkg/annotate-*.gem


##使い方

(もし Gemfile でインストールしてたら後述のコマンドの頭に `bundle exec`を足すこと.)

###使い方(rails)

#### 注釈を加える: すべての models, tests, fixtures, factories について:

    cd /path/to/app
    annotate

#### 注釈を加える: models, tests, factories だけ:

    annotate --exclude fixtures

#### 注釈を加える: models だけ:

    annotate --exclude tests,fixtures,factories

#### 注釈を加える: routes.rbについて:

    annotate --routes

####注釈を削除する: model/test/fixture/factory

    annotate --delete

####注釈を削除する: routes.rb

    annotate --routes --delete


##オプション
    Usage: annotate [options] [model_file]*

|オプション|説明|
|:--|:--|
|-d, --delete|注釈を削除する。|
|-p, --position [before or after]|注釈を追記する箇所を指定する。|
|--pc, --position-in-class [before or after]|modelファイルにて、注釈を追記する箇所を指定する。|
|--pf, --position-in-factory [before or after]|factoryファイルにて、注釈を追記する箇所を指定する。|
|--px, --position-in-fixture [before or after]|fixtureファイルにて、注釈を追記する箇所を指定する。|
|--pt, --position-in-test [before or after]|testファイルにて、注釈を追記する箇所を指定する。|
|--pr, --position-in-routes [before or after]|routes.rbにて、注釈を追記する箇所を指定する。|
|-r, --routes| 'rake routes'の結果をroutes.rbに追記する。 |
|-v, --version|annotateのバージョンを表示する。|
|-m, --show-migration|注釈にマイグレーションの番号を含める。|
|--model-dir dir|dirにあるmodelファイルに注釈を追加する。|
|--ignore-model-subdirects|modelの副階層を無視する。|
|--sort|カラムをアルファベット順に並べる|
|-e [tests,fixtures,factories]|[]で囲まれた対象には注記を追記しないようにする。 fixtures, test files, and/or factories --exclude|
|-f [bare or rdoc or markdown]|スキーマ情報を描画するフォーマットを指定する。|
|--force|変更がなくても注記を更新する。|
|--trace|注記追記に失敗したときスタックトレースを表示する。|
|--timestamp| routes.rbに更新日時を追記する。|

##WARNING

<b>ファイル末尾に追記された注記よりしたにコメントを書かないこと。</b>
HBase環境構築からRubyでアクセスするまで

お仕事で HBase を使う事になったので環境構築から Ruby でアクセスするまでをやってみた。

HBase(スタンドアロンモード)をDockerで起動する
----------------------------------------

https://github.com/dajobe/hbase-docker にちょっと古いDockerfileがあったりするので使わせてもらった。

修正点1: Dockerfile

```
ENV HBASE_VERSION 0.94.11
```

→

```
ENV HBASE_VERSION 0.94.21
```

修正点2: start-hbase.sh

```
id=$(docker run -d -v $PWD/logs:/opt/hbase/logs -p :2181 -p :9090 -p :60000 -p :60020 dajobe/hbase)
```

→

```
id=$(docker run -d -v $PWD/logs:/opt/hbase/logs -p 2181:2181 -p 9090:9090 -p 60000:60000 -p 60020:60020 dajobe/hbase)
```

これで後は README.md に書かれた手順通り構築して起動する

```
$ docker build -t dajobe/hbase .
$ ./start-hbase.sh
```

Rubyのhbaserbでアクセスする
------------------------

HBaseは色々なアクセス手段があるようだが、一番簡単そうだった Thrift 経由でアクセスしてみることにした。

ちなみに hbaserb をインストールする時に Mac だと Thrift のコンパイルで引っかかった。http://stackoverflow.com/questions/19649984/thrift-ruby-gem


```Ruby
#! /usr/bin/env ruby
# encode

require 'hbaserb'

client = HBaseRb::Client.new '192.168.59.103'

table = client.create_table "test", "fam1", "fam2"
table.mutate_row "1", {'fam1:hoge' => 'hoge', 'fam1:fuga' => 'fuga', 'fam2:count' => "1"}
table.mutate_row "2", {'fam1:hoge' => 'foo', 'fam1:fuga' => 'bar', 'fam2:count' => "1"}
```

注意: 僕の環境では DOCKER_HOST が 192.168.59.103 だ。

HBase がほかの KVS (memcached とか)と違う点としては、カラムファミリーという概念だろうか。テーブル生成時に、カラムファミリーというカラムを束ねる入れ物を指定しておく必要がある。この場合はfam1, fam2 を指定した。カラムは、fam1:hoge のようにカラムファミリーとコロンを頭に付ける必要がある。

これは hbaserb の問題かもしれないが、"1" のかわりに 1 を指定した場合はエラーが出た。
```
/Library/Ruby/Gems/2.0.0/gems/thrift-0.9.1/lib/thrift/bytes.rb:79:in `convert_to_utf8_byte_buffer': undefined method `encoding' for 1:Fixnum (NoMethodError)
```

自動的に to_s でもしてくれればいいのにとは思ったが、HBase ではデータ構造としては、ただのバイト列しかないらしいしそんなもんなんだろう。

```ruby
#! /usr/bin/env ruby
# encoding: utf-8

require 'hbaserb'

client = HBaseRb::Client.new '192.168.59.103'

table = client.get_table "test"
row = table.get_row("1").first

p row.columns["fam1:hoge"].value
p row.columns["fam1:fuga"].value
p row.columns["fam2:count"].value
```

読み出すのはこんな感じ。get_row 以外にも get メソッドや、table の create_scanner メソッドなんかも使えるが hbaserb の lib/hbaserb 以下を見れば大体使い方はわかるだろう。
JPQLのLIMIT OFFSETの罠

## 確認したバージョン

GlassFish4.0にバンドルされているJPA2でDBはPostgreSQL9.2で現象を確認しています。

## JPA2によるLIMIT OFFSET句

JPA2(EclipseLink)はJPQLで
`javax.persistence.TypedQuery#setMaxResults(int)`及び`javax.persistence.TypedQuery#setFirstResult(int)`によってPostgreSQLの`LIMIT OFFSET`句をサポートしています。

例えば、ApplicationUserというEntityに対して`find`というNamedQueryで取得するようなJavaのコードを以下のように書いた場合、

```java
@PersistenceUnit
private EntityManager entityManager;

public List<ApplicationUser> find() {
    List<ApplicationUser> list = this.entityManager
        .createNamedQuery("ApplicationUser.find", ApplicationUser.class)
        .setFirstResult(0)
        .setMaxResults(10)
        .getResultList();

    return list;
}
```

SQLは以下の様に出力されます(必要部分のみに加工)

```SQL
SELECT
	user_id,
	user_name,
FROM
	application_user
LIMIT 10 OFFSET 0
```

ここまでは期待通りなのですが、これをNativeQueryと絡めて実行した場合、以下の様になります

```java
@PersistenceUnit
private EntityManager entityManager;

public List<ApplicationUser> find() {
    List<ApplicationUser> list = this.entityManager
        // この部分がNativeQueryかNamedQueryか違うだけ。
        .createNativeQuery("SELECT user_id, user_name FROM application_user", ApplicationUser.class)
        .setFirstResult(0)
        .setMaxResults(10)
        .getResultList();

    return list;
}
```

結果実行されるSQLは以下のようになります。

```SQL
SELECT
	user_id,
	user_name,
FROM
	application_user
```

`LIMIT OFFSET`句が消えてしまっている事が分かるでしょうか。
ちなみに実行結果はどちらも同じになります。

この事から、NamedQueryを用いた場合はSQLによって処理が行なわれますが、NativeQueryを用いた場合は一旦全件取得した上で、プログラムにより結果件数のみ返すようになっているようです。

自分の場合は大量データを取得する場所でNativeQueryとsetMaxResults/setFirstResultが利用されており、パフォーマンス遅延でこの問題に気がつきました。


## おまけ
お願いだから気を利かせて実行せずに、潔く実行時にExceptionで落としてください。。。
「オブジェクト指向プログラミング」と「関数型プログラミング」のたった一つのシンプルな違い



# はじめに
[関数型プログラミングとオブジェクト指向の抜き差しならない関係について整理して考える](http://qiita.com/kenokabe/items/13ea8d2da6adce1b3b9a)という記事がkenokabeさんという方が挙げていて、拙著の [新人プログラマに知っておいてもらいたい人類がオブジェクト指向を手に入れるまでの軌跡](http://qiita.com/hirokidaichi/items/591ad96ab12938878fe1)について言及があったので、補考として挙げておく。

# 暗黙的状態と明示的状態
これまで、関数を「わかりやすくきれいに書く方法」とオブジェクト指向が「どのようにして生まれてきたか」について話してきた。

* [新人プログラマに知ってもらいたいメソッドを読みやすく維持するいくつかの原則](http://qiita.com/hirokidaichi/items/c9a76191216f3cc6c4b2)
* [新人プログラマに知っておいてもらいたい人類がオブジェクト指向を手に入れるまでの軌跡](http://qiita.com/hirokidaichi/items/591ad96ab12938878fe1)


一見、それぞれ関係ないように思うかもしれないが、実は大きなテーマでつながっている。

『それは「状態」をどのように取り扱い単純化するか。』ということだ。そして、これがいわゆる関数型プログラミングとオブジェクト指向プログラミングの最大の違いとなる。

関数をきれいに書くためには理解を困難にする「状態」を排除する方法を学んだ。それは例えば再代入を避けることや、ネストを減らして今どのような状態にあるかを覚えなくてよいようにした。

また、オブジェクト指向の歴史は、状態とそれに関わる処理を明示的にするための歴史だと学んだ。実際的なプログラミングをするのには直面してしまう「状態」に対して、名前を付け、階層管理し、必要以上にそれらが依存しないようにし、関連する処理を一纏めにして、その処理以外を受け付けないことで一つの部品・仮想機械として取り扱えるようにすることで、より大きな課題を解決していけるようにした。

~~これらのように状態を意識しないように隠蔽した状態を「暗黙的状態」（または宣言的状態）と呼び、明示的に名前を付けて管理した状態を明示的状態と言う。~~

このように、プログラム中で動的に変化する状態をオブジェクトや構造体、変数の粒度で管理されるとき、その状態は「明示的状態」と呼ばれ、プログラム中で変数間の関係性が宣言的に記述され、イミュータブル性が維持される状態を「暗黙的状態」または「宣言的状態」という。このパラダイムを採用しているプログラミングスタイルのことを関数型プログラミングと呼ぶ。これは参照透過性を表から見るか裏から見るかの違いではあるが、手続き型プログラミングの対比としては、この観点で見るのがもっともわかりやすいだろう。(7/15文意がとりにくいため修正)

ガウディ本として知られる[コンピュータプログラミングの概念・技法・モデル](http://www.amazon.co.jp/dp/4798113468)から明示的状態について、引用すると

> 手続きの中の明示的状態とは、その生存期間が二度以上の手続き呼び出しにわたるような１つの状態で、手続きの引数に現れないものである。(6.1.2 明示的状態)

明示的状態の取り扱いは非常に難しい。なぜならそれは、人間が「覚えておくべきこと」がシステムの中に残ってしまうからだ。それが残っている限り、バグを見つけ出すのは人間の仕事になる。

オブジェクト指向のよいところは、「状態」を明示的にして、人間がそのコントロールをしやすくするところにある。だが、複雑に絡み合う状態をわかりやすく明示的に管理するのが人間の仕事である以上、不断の努力が必要になる。

ある程度サイズまでのプログラムであれば、明示的状態を持つプログラミングスタイルは、明快でわかりやすい。オブジェクト指向プログラミングが一定の成果を上げたのもそれが大きな要因だ。

一方で、近年、関数型プログラミングが再び注目を集めている最大の理由は、オブジェクト指向だけで取り扱うには複雑になりすぎてしまう問題に対して、１つのソリューションを提供してくれるからだと考えている。たとえば、並列性の問題などを明示的状態ではなく、暗黙的状態として宣言できることで、人間が明示的に管理する必要がなくなり、バグが入り込む余地が大幅に減る。

暗黙的状態しかもたないプログラミングスタイルは、抽象度がどれだけあがっても管理する問題の複雑性は変化しないため、明示的状態を持つプログラミングスタイルで対応が難しくなる問題への回答となりうるということだ。

```ruby:明示的状態と暗黙的状態
list = [1, 2, 3, 4, 5, 6, 7]

# 暗黙的状態のsum関数
def sum_dec(list, s)
  return s if list.empty?
  x, *xr = list
  sum_dec(xr, s + x)
end

# 明示的状態のsum関数
def sum_exp(list)
  s = 0
  list.each { |i| s += i }
  s
end

p sum_dec(list, 0)
p sum_exp(list)
```

#状態ありプログラミングの限界

ガウディ本では、OOPのような状態ありプログラミングの限界(6.9.1)として、次の２つを挙げている。

* 現実世界は並行的である
* 現実世界は分散的である

並行性、分散性どちらも現代的なプログラミングにとって重要なファクターである。GoのChannel、ScalaのActorなど並列性・分散性に意識を向けたプログラミング言語が注目を浴びていることからも、これらの問題は今そこにあるものとして認識されつつあるのであろう。

元記事ではFRPの話が、取りざたされていた。リアクティブプログラミングとは、離散イベントにおける値の関係を宣言的に記述する(暗黙的・宣言的状態)ことで、並列性、非同期性の諸問題を隠蔽し、モジュラーに扱えることが最大の特徴だ。

これもまた、状態の明示性と暗黙性の問題だ。

# まとめ
* OOPと関数型の違いは状態の明示性
* 一定レベルの抽象化までは明示的状態は扱いやすい
* 並行分散非同期に注目が集まる昨今、ふたたび宣言的状態に注目があつまりつつある
python+pandasで大規模データを扱うときのメモ

##MySQLからデータを取り出す
```py
"""Get data from MySQL with pandas library."""
import MySQLdb
import pandas.io.sql as psql

con = MySQLdb.connect(db='work', user='root', passwd='') # DB接続
sql = """SELECT product_id, product_nm, product_features FROM electronics"""
df = psql.read_sql(sql, con) # pandasのDataFrameの形でデータを取り出す
con.close()
```

##データからベクトルを作る1
大規模データを使ってクラスタリングなどのためのベクトルを作る際、メモリ消費を抑えるためにデータを削除しながら繰り返し処理を行う。

```py
"""Delete rows while creating dataset."""
X = []
for index, row in df.iterrows(): # 行ごとに繰り返し処理
    Xi = [row.col1, row.col2, row.col3]
    X.append(X)
    df = df.ix[index:] # メモリの消費を抑えるためにデータを削除しながらベクトルを作成
```

##データからベクトルを作る2（速度改良）
1つめのやり方のではコードはきれいだが、繰り返しの速度が遅いという難点がある。
一度リストにするやり方の方が何倍も速い。

```py
"""High speed row iteration in pandas DataFrame"""
# データをコピーしてリストへ
df_index, df_col1, df_col2, df_col3 = \
    list(df.index), list(df.col1), list(df.col2), list(df.col3)
del df # データを削除
for _ in df_index:
    # データを削除しながらイテレート
    col1, col2, col3 = df_col1.pop(), df_col2.pop(), df_col3.pop()
    Xi = [col1, col2, col3]
    X.append(Xi)
```
Railsの日本語化


Railsのデフォルトの設定では，エラーメッセージなどが全て英語になっています．これはI18nを利用して，日本語に切り替えることができますが，日本語用のロケールファイルが付属していません．

さっと日本語化したいときには，`rails-i18n`のgemを利用すると良いでしょう．

```ruby
# Gemfileに以下を追記し，bundle install
gem 'rails-i18n'
```

```ruby
# config/application.rb
# 次の２行を追加（２行目はタイムゾーンを東京に設定）
config.i18n.default_locale = :ja
config.time_zone = 'Asia/Tokyo'
```

rails-i18nの翻訳が一部気に入らない場合などは，`config/locales/ja.yml`を作成して設定することで，上書きすることが可能です．
Unityについて


## Untiyの画面

![SS_2014-07-14_21_29_35.png](https://qiita-image-store.s3.amazonaws.com/0/18573/9b9a556c-0104-af72-3ea0-e037e190fe35.png "SS_2014-07-14_21_29_35.png")

1. ヒエラルキービュー：現在のシーンに配置されているオブジェクトが表示される
+ シーンビュー：ポリゴンのオブジェクトなどが置かれたシーンを確認できる
+ プロジェクトブラウザ：現在のプロジェクトで準備されているアセットのファイルが表示される
+ インスペクター：選択中のGameObjectなどの情報が表示される

## プロジェクト、シーン、アセット

###プロジェクト
演劇の舞台で例えると「シンデレラ」や「桃太郎」のような演目のこと

### シーン
「シンデレラ登場」や「桃太郎」と言った一つ一つの場面のこと

### アセット
登場人物や小道具のこと

## カプセルをつくる
メニューバー→「GameObject」→「Create Other」→「Capsule」

## X,Y,Z軸

+ X軸：左右
+ Y軸：上下
+ Z軸：奥行き

## マウス操作

+ 右クリックを押しながらマウス移動：カメラの位置が変化せずに注視点だけが移動
+ マウスホイール押しながらマウス移動：カメラ位置と注視点が同時に動く平行移動
+ マウスホイールころころ：カメラの位置を奥行き・手前に移動
+ ALT+左ボタンを押しつつマウス移動：注視点はそのままに、注視点を中心にカメラの位置だけを回転移動
+ fキー押下：選択しているGameObjectを中心としたカメラにできる


## シーンギズモとパース

### シーンギズモ
右上のラッパが刺さったようなもの。シーンビューが現在どういう角度から見えているのかを表している。
x, y, zと書かれたラッパをクリックすることでその軸からまっすぐ見たカメラにすることが出来る。
初期状態に戻したければ、レイアウトを変更する。「Wide」から「Wide」のように同じでも可。

### パース
シーンギズモの下の「Persp」をクリックすることで、カメラのパース（カメラから見た時の歪み）のありなしを切り替えられる。
パースありが「Persp」、無しが「Iso」という表示。基本的にパースありでみる。

## GameObjectとScriptの作成

+ メニューバー→「GameObject」→「Create Other」→「Cube」
+ 「Asset」→「Create」→「C# Script」

もしScriptの名前を間違えた時は、ファイル名とファイル内のclass名を書き換えないといけないので、一旦削除して作りなおしたほうが良い。

### GameObjectに紐付ける方法

1. 作成したスクリプトをヒエラルキービューの「Cube」にドラッグ＆ドロップ
(もしくは「Cube」を選択して、インスペクターの「Add Component」ボタンから「Script」→「studyScript」を選択)
+ 「Cube」のインスペクターに「studyScript」が出ていればOK


## Viモード
MonoDevelopの設定画面を開き、[テキストエディタ]→[動作]と進んだところにある「Viモードを使用する」にチェックを入れる。


## GameObjectとは
Unity上に配置されているものは全てGameObjectである。

##参考
[ゲーム作りの初め方](http://www.amazon.co.jp/%E3%82%B2%E3%83%BC%E3%83%A0%E4%BD%9C%E3%82%8A%E3%81%AE%E3%81%AF%E3%81%98%E3%82%81%E3%81%8B%E3%81%9F-Unity%E3%81%A7%E8%A6%9A%E3%81%88%E3%82%8B%E4%BC%81%E7%94%BB%E3%81%8B%E3%82%89%E3%83%AC%E3%83%99%E3%83%AB%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%81%BE%E3%81%A7-%E3%81%82%E3%81%99%E3%81%AA-%E3%81%93%E3%81%86%E3%81%98/dp/4797377364)
Android Studio0.8.0にSupport packageを使う方法(仮)

　[MacBookAirにAndroidStudioを導入](http://qiita.com/mackiso/items/3bedcbe4c7f9314c0bea)に書かせて頂いた方法で導入したAndroid Studioはバージョンが0.8.0でした。
　これも用いてSupport packageを使用する際に、ライブラリの追加方法がいまいちわからず、調べることになったのでメモを。
　これで合っているのかよくわからないのですが。
　間違い等あればご指摘願います、よろしくお願いします。
#環境
OS X 10.9.3
Android Studio (Beta) 0.8.0
#手順
##Project Structureを開く
![スクリーンショット 2014-07-14 23.23.09.png](https://qiita-image-store.s3.amazonaws.com/0/48605/940183fc-57a4-ca78-2041-f5576bf1ff73.png "スクリーンショット 2014-07-14 23.23.09.png")
　この子ですね、`⌘;`でも開けます。
##Dependencyタブを選択
![スクリーンショット 2014-07-14 23.23.28.png](https://qiita-image-store.s3.amazonaws.com/0/48605/8d07543f-f439-a403-d0c4-8d9e0d9f2af5.png "スクリーンショット 2014-07-14 23.23.28.png")
　自分のモジュールを選択して、次にDependencyタブを選択してみました。
![スクリーンショット 2014-07-14 23.24.01.png](https://qiita-image-store.s3.amazonaws.com/0/48605/38be726f-877a-3655-a21b-8d06e7a044f1.png "スクリーンショット 2014-07-14 23.24.01.png")
　ほら、怪しい十字の文字です、選択しました。
![スクリーンショット 2014-07-14 23.24.37.png](https://qiita-image-store.s3.amazonaws.com/0/48605/e3e6207c-a151-c39f-efdd-86bb73e83618.png "スクリーンショット 2014-07-14 23.24.37.png")
　Library Dependencyの文字。これだ。きっと。
![スクリーンショット 2014-07-14 23.25.10.png](https://qiita-image-store.s3.amazonaws.com/0/48605/58d67513-c7bc-6fa1-a697-aabbc4794d53.png "スクリーンショット 2014-07-14 23.25.10.png")
　ありました！(もちろん、SDKマネージャーで事前にダウンロードしていた)OK選択！
##解決(？)
　無事にプロジェクトでサポートライブラリを使うことができている、みたいです、たぶん。
　ただ、libフォルダは空っぽで、これでいいのかな？と。
　どうなのでしょう。分かり次第、追記はしたいと思います。ご教授願えれば幸いです。

#追記(2014/07/14)
　これだけではダメっぽい。
![スクリーンショット 2014-07-14 23.56.02.png](https://qiita-image-store.s3.amazonaws.com/0/48605/fcd79230-0672-ef58-810a-48605ff06784.png "スクリーンショット 2014-07-14 23.56.02.png")
#追記(2014/07/16)
　build.gradleの`dependencies`を書き換えることで今のところエラーはなくなりました！

```build.gradle

android{
hogehoge;
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:support-v4:19.+'
    compile 'com.android.support:support-v13:19.+'
}
```

`om.android.support:support-v4:19.+`と
`compile 'com.android.support:support-v13:19.+`
の部分ですね。また問題が出たら、対処していきまする。
RailsでHashの一部だけを取り出す・取り除く方法


ActiveSupportには

* Hashの一部を取り出す: Hash#slice
* Hashの一部を取り除く: Hash#except

ためのメソッドが用意されています．

以下の様に用います．

```ruby
{a: 1, b: 2, c: 3}.slice(:a, :c)
=> {:a=>1, :c=>3}

{a: 1, b: 2, c: 3}.except(:a)
=> {:b=>2, :c=>3}
```

モデルの属性値の一部をinitializeなどで渡したいときに便利ですね．


## 参考

* [rails/activesupport/lib/active_support/core_ext/hash/slice - Github](https://github.com/rails/rails/blob/master/activesupport/lib/active_support/core_ext/hash/slice.rb)
* [rails/activesupport/lib/active_support/core_ext/hash/except.rb - Github](https://github.com/rails/rails/blob/master/activesupport/lib/active_support/core_ext/hash/except.rb)
「Stan で欠測データの相関係数を推定してみた」補足資料

[Stan で欠測データの相関係数を推定してみた](http://www.slideshare.net/hoxo_m/stan-36896297)の補足資料です。

実行したプログラムの全体です。

```stan:model.stan
data{
  int<lower=0> N;
  vector[2] y[N];
  int<lower=0> Nmiss;
  real x[Nmiss];
}
parameters {
  vector[2] mu;
  real<lower=0> var_x;
  real<lower=0> var_y;
  real cov;
}
transformed parameters {
  matrix[2,2] sigma;
  sigma[1,1] <- var_x;
  sigma[2,1] <- cov;
  sigma[1,2] <- cov;
  sigma[2,2] <- var_y;
}
model{
  for(i in 1:N)
    y[i] ~ multi_normal(mu, sigma);
  for(i in 1:Nmiss)
    x[i] ~ normal(mu[1], sqrt(sigma[1,1]));
#    increment_log_prob(-0.5 * log(2 * pi() * sigma[1,1]) - 0.5 * ((x[i] - mu[1])^2)/sigma[1,1]);
}
generated quantities {
  real cor;
  cor <- cov / sqrt(var_x * var_y);
}
```

```r:main.R
library(rstan) 

set.seed(123)
N <- 1000
x <- rnorm(N, mean = 50, sd = 10)
y <- 10 + 0.8 * x + rnorm(N, mean =0, sd = 7)
data <- data.frame(x, y)
data1 <- subset(data, x >= 60)
data2 <- subset(data, x < 60)

set.seed(314)
datastan <- list(N=nrow(data1), y=data1, x=data2$x, Nmiss=nrow(data2))
fit <- stan(file="model.stan", data=datastan, iter=1000, chain=4)
traceplot(fit, ask=FALSE)
print(fit, digit=2)
```

```:結果
               mean se_mean    sd     2.5%      25%      50%      75%    97.5% n_eff Rhat
mu[1]         50.17    0.01  0.31    49.57    49.96    50.16    50.37    50.78   709 1.01
mu[2]         47.91    0.11  2.02    43.73    46.63    47.91    49.19    51.87   320 1.01
var_x         99.02    0.16  4.66    90.17    95.93    98.97   102.08   108.24   872 1.00
var_y        153.43    1.57 26.75   109.73   134.96   151.41   168.48   211.08   292 1.02
cov           99.73    0.73 13.26    74.21    91.13    99.59   108.24   126.37   331 1.02
sigma[1,1]    99.02    0.16  4.66    90.17    95.93    98.97   102.08   108.24   872 1.00
sigma[1,2]    99.73    0.73 13.26    74.21    91.13    99.59   108.24   126.37   331 1.02
sigma[2,1]    99.73    0.73 13.26    74.21    91.13    99.59   108.24   126.37   331 1.02
sigma[2,2]   153.43    1.57 26.75   109.73   134.96   151.41   168.48   211.08   292 1.02
cor            0.81    0.00  0.04     0.71     0.79     0.81     0.84     0.87   785 1.01
lp__       -3171.17    0.07  1.73 -3175.50 -3172.02 -3170.86 -3169.92 -3168.93   577 1.00
```
dart:htmlに依存したコードのユニットテスト

# 問題

`dart:html`に依存したライブラリコードのテストは普通にやると

```
The built-in library 'dart:html' is not available on the stand-alone VM.
```

というふうに怒られる。

# 解決方法

### 1. テストコード側で準備

`package:unittest/html_config.dart`をimportして、mainメソッドの最初に`useHtmlConfiguration();`する。

```dart
import "package:unittest/unittest.dart";
import "package:unittest/html_config.dart";

void main() {
  useHtmlConfiguration();
  test("html test", () {
   ...
  });
}
```

### 2. テスト結果表示用のHTMLファイルを配置する

テスト表示用のHTMLファイルを用意（`html_test.html`とする）

```html
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>html_test</title>
</head>
<body>

<script type="application/dart" src="html_test.dart"></script>
<script src="packages/browser/dart.js"></script>
</body>
</html>
```

ポイントは`html_test.dart`をHTML内で呼び出すことです。

### 3. `$ pub serve`する  

ちゃんと`test`ディレクトリにテストコードを書いていれば、

```shell-session
Serving my_app web  on http://localhost:9000
Serving my_app test on http://localhost:9001
```

のようにログが流れるはず。

### 4. テスト用ページにアクセスする
先ほど配置した`http://localhost:9001/html_test.html`をブラウザで開く。

これでテスト結果がHTML形式で出力される。
Private AppExchangeを試してみた

# Private AppExchangeとは

Winter '14から使える様になった、組織内ユーザ用のAppExchange。
参考記事: [TechCrunch: SalesforceがAppExchangeのプライベートバージョンをローンチ, 企業が自分のアプリストアを持てるようになった](http://jp.techcrunch.com/2013/11/01/20131031salesforce-launches-a-private-version-of-appexchange-for-companies-to-manage-their-own-app-stores/)

Private AppExchange自身はAppExchangeから使いたい組織にインストールすると使える様になる。

# Private AppExchangeのインストール

https://appexchange.salesforce.com/listingDetail?listingId=a0N3000000B4VlZEAV
ここから。インストールしたい組織のパッケージインストール権のあるユーザでログインしてGet It Nowから。
入れ方は普通のパッケージと同じ。

# 初期設定

パッケージをインストール後、右上のアプリケーション切り替えで「Private AppExchange」を選ぶと、初期設定の画面になる。
最低限「Store Name」と「Store Logo」を設定。

![スクリーンショット 2014-07-14 22.40.38.png](https://qiita-image-store.s3.amazonaws.com/0/9490/4ed1d642-1062-bc93-5a17-bb59004731b8.png)

## 権限セットの付与

Private AppExchangeのStoreへのアクセスを許可するユーザには、「Store User」の権限セットを付けておく必要がある。

# 公開するアプリの追加

「Store Administration」タブの「List a New App」から設定する。
組織にインストール済みのアプリケーションや、作成したアプリケーションから選ぶ。

![2014-07-14 22.50.53.png](https://qiita-image-store.s3.amazonaws.com/0/9490/42161a78-d1b1-c165-a25d-77e160ae19ca.png)

## 公開

いろいろ必要事項を入力して、最後に「Publish Listing」すると公開。
![2014-07-14 23.04.44.png](https://qiita-image-store.s3.amazonaws.com/0/9490/1831796e-04ac-7c77-c5d0-dd6dbd3c55db.png)

公開したアプリがこんな感じで出る。
![スクリーンショット 2014-07-14 22.47.39.png](https://qiita-image-store.s3.amazonaws.com/0/9490/f71c9753-a659-8c63-3fe4-615bfc3e3f7e.png)


# モバイル(iPhone)からStoreを使う
## Salesforce1モバイルへのStore追加
「設定 > モバイル管理 > モバイルナビゲーション」から「ナビゲーションメニュー項目」に「Store」を追加。

![2014-07-14 22.51.29.png](https://qiita-image-store.s3.amazonaws.com/0/9490/61f04077-a10b-97f7-1b66-317c89665f7d.png)

## Salesforce1でStoreを開く

![写真 2014-07-14 22 57 41.png](https://qiita-image-store.s3.amazonaws.com/0/9490/31068a41-81c5-bd34-c8f0-a611b0fdb554.png)

モバイル対応してるアプリだけが表示される？
![写真 2014-07-14 22 57 49.png](https://qiita-image-store.s3.amazonaws.com/0/9490/b6575809-2dcb-bb00-f9da-5c7610d2d963.png)

# 管理者向けダッシュボード
アクセス統計的なのが見れる。

![スクリーンショット 2014-07-14 23.13.07.png](https://qiita-image-store.s3.amazonaws.com/0/9490/5bfcdf8d-8d2f-67e6-3674-9f2816d08193.png)


# 試してないこと

- Translation Workbenchで見た目カスタマイズできるらしい
- カテゴリもカスタマイズできるらしい
- 承認申請の設定をするとアプリケーションの利用開始に承認フローを通せる様になるっぽい（ライセンスの割当が必要なパッケージとかで使うのかな？）

# 参考

- [Private AppExchange Admin Guide
(pdf)](https://appexchange.salesforce.com/servlet/servlet.FileDownload?file=00P3000000IL7pdEAD)
今年からジワジワくる【秘伝】のJavaScript - {ライブラリ系}初回編

と私が勝手に思っているだけですが
早速それを紹介？ではなくメモります。

#理由
誰かが、情報発信をしないとダメかなと思い、気づいたメモとして残します。
ちょっと変わり種を紹介したかった
将来的に流行ったりした時に少しうれしいからです。

#JS
正確には、JavaScriptです
そして、私はJSエンジニアではありませんが、初めてJSに触れたのは小学生の頃初めて買ってもらったWindows98のPCです。あの頃は意味もなく動いたりすることが面白くて仕方なかったのです。
今回は、そんな幼少の気持ちを奮い起こしたものを紹介します。

#それでは紹介
順番は適当です。見た方が面白いと感じたものを使っていただければという感じです。そして、一介のエンジニアたる私の独断と偏見でメモしてるだけですので、あまり内容は気にしないでください。ああ、JSも知らない残念なやつだと罵ってくださっても構いません、実際そのとおりなのでｗ

// TODO
*知人(JSer)に数が少ないと言われましたので、少し追加しますｗ*

##1. PleaseJS
初回コミット日が2014/6/29なのでまだ知ってる人は少なそうと思いトップバッターに→今後拡張されると思います

ランダムにカラースキームを作成できるJSです
試しに使ってみたら面白いです

```js:please.js
Please.make_color({
	colors_returned: 4
});
```
色がランダムに変わるので視覚的に面白い感じですね。
すばらしい

###参考
→http://www.checkman.io/please/

##2. Chart.js
お次はChart.jsです。
ああ、知ってるよ！って方も多いと思います、個人的にはそろそろ出回ってきたかなーと思っています。

こちら単純な記法で６つのグラフでデータを視覚化できます。
最近は、そういうツールが多くなっていますが、JSでより簡単につくれるのは大きいでしょう。HTML5のCanvasを使っているということもあり、ブラウザ対応はまだクロームが安心なイメージですがそれも徐々に全体的に動きが安定しそうな雰囲気であります。インタラクティブな挙動がほしいサービスにはうってつけでしょう。

また、公式によると超軽量のJSであり、わずか11.01kbで事足りると書かれてあります。

###参考
→http://www.chartjs.org/

##3. Hammer.js 2.0
最近のスマフォ事情にJSの動作がもっさりしてたり、なんだか処理が複雑に、そんな時はこのJSが便利です。
多くの機能があるわけではありませんが、押したり、タップしたり、ズームイン、ズームアウト、回転、スワイプなどの認識装置としてこちらのHammerを使うことができます

###参考
→http://hammerjs.github.io/

##4. Two.js
このJSはおもしろい
画面描写をかなり自由にできるだけでなく、フロント側でユーザが自由に動かせる仕組みがあります。
例えば、球体をおいておいて、それを動かすだけでなく潰したり、膨らましたりできます
一方方向の「動き」だけでなく、こちらの提供を触ってくれたユーザへのさらに挙動変更ができるのは先の先の先まで動かせるということになり新しい取り組みのような気がします。他のJSと組み合わせればこれだけでずっと遊べるサービスが広がります

私の予想では、今後このようなJSが増えてSPにもこんなことができるアプリが広がると思います
いち早くやればあなたも儲かるアプリ開発エンジニアの一人です。

参考
→http://jonobr1.github.io/two.js/#introduction


----------------
他にもたくさん在庫があるのですが、紹介できるかどうか微妙なところです。
多分よいのですが、使ったことがないのでなんとも言えない感じです。

気が向いたらまたJS紹介します。
もちろん、まだ主流ではなくギーク？的におもしろそうなやつで