OmniAICreator/Qiita-1.07M huggingface dataset:
passwdコマンドでパスワードが変更できない


※どうやらDocker Hubに上がっている`centos:latest`が非公式のリポジトリであることに起因しているみたいです。公式は`centos:6.4`とのこと。

dockerでCentOSのイメージを動かしている時に、パスワードの変更ができなくてハマった時の対応。

## エラー内容について

パスワード変更しようとした時のエラー内容は下記の通り。

```
# passwd

Changing password for user root.
New password:
/usr/share/cracklib/pw_dict.pwd: No such file or directory
PWOpen: No such file or directory
```

「セキュリティチェック用の辞書が無いよ」と怒られているみたい。
一旦、`cracklib-dicts`のパッケージを削除して入れなおすと復旧するようだ。

## パッケージの入れなおし

`cracklib-dicts`を削除する

```
# rpm -e cracklib-dicts --nodeps
```

`cracklib-dicts`を再度入れる。

```
# yum -y install cracklib-dicts

Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp.jaist.ac.jp
 * extras: ftp.jaist.ac.jp
 * updates: mirrors.yun-idc.com
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package cracklib-dicts.x86_64 0:2.8.16-4.el6 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

===========================================================================
 Package                    Arch    Version        epository  Size
===========================================================================
Installing:
 cracklib-dicts             x86_64  2.8.16-4.el6   base       3.6 M

Transaction Summary
===========================================================================
Install       1 Package(s)

Total download size: 3.6 M
Installed size: 8.9 M
Downloading Packages:
cracklib-dicts-2.8.16-4.el6.x86_64.rpm                                                                                                                     | 3.6 MB     00:00
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Warning: RPMDB altered outside of yum.
** Found 2 pre-existing rpmdb problem(s), 'yum check' output follows:
pam-1.1.1-17.el6.x86_64 has missing requires of cracklib-dicts >= ('0', '2.8', None)
udev-147-2.51.el6.x86_64 has missing requires of MAKEDEV >= ('0', '3.11', None)
  Installing : cracklib-dicts-2.8.16-4.el6.x86_64                                                                                                                             1/1
  Verifying  : cracklib-dicts-2.8.16-4.el6.x86_64                                                                                                                             1/1

Installed:
  cracklib-dicts.x86_64 0:2.8.16-4.el6

Complete!
```
Android関係のコマンド・ツールまとめ

全然更新しないうえ、ほったらかしになってたのでちょい更新
といっても、Androidの制御系のお話から離れちゃってるので、書けるネタあんまりないけど。

#付属コマンドまとめ
##adb
`adb devices`
言わずもがな。

`adb root` 
root接続しなおすときに使う。

`adb -s <device name> shell` 
デバイス名を指定してshellを実行する。d（デバイス用）、e(エミュレータ用)オプションもある。しかし、複数台接続して処理する場合、どちらも使えないのでsオプション一択。

`adb connect <ipaddress>:<port>`
端末をネットワーク経由で接続するときに使う。

`adb logcat`
androidのシステムログを取得するときに使う。これで取得できるのは、mainログ。vオプション指定で、イベントログと通話・通信ログが取得できる。時間指定をして測るときは、`timeout <sec> adb logcat`を使う。


**adbのよた話**
adbは高負荷な通信に耐えられる設計になっておらず、そのバグは未解決のまま。例えば、adb経由でデバイスとTCP通信を行い、アプリケーションをインストール＆アンインストールする動作をさせるとする。100回前後で、TCP通信がデバイス側で強制切断される。これは、デバイスを再起動＆adb(server)を再起動すると戻る。（確認済。誰も修正しないバグ。）

adb-server1つに対して、adb-clientは複数あります。複数デバイスを同時間に動かすプログラムを作る時、adb-serverとadb-clientを1対1の関係にしないと、上記のバグが原因で全体に影響がでます。

そういう使い方する方、あんまりいないだろうけど。
（中の人はAndroidアプリケーションを作ることにまったく興味なく、AndroidアプリケーションやIOSアプリケーションなどを外からの制御により、コントロールすることに興味があるので、そういうことをしてます。）

##adb shell

`adb shell ps`
アプリケーションのprocess idを知るときに使う。

`adb shell kill <pid>`
アプリケーションを強制終了するときに使う。root権限が必要。

`adb shell am start -a android.intent.action.VIEW -d http://hogehoge.com`
Activityの起動(ACTION_VIEW + URL) 正直あまり使わない。

`adb shell am start -n <package name>/<activity name>`
Acitvityの起動　よく使う。特に何回も起動するときに重宝。大概、アプリケーションは強制終了する。

`adb shell am startservice <package name>/<activity name> `
サービス起動　

`adb shell am broadcast <package name>/<activity name> `
ブロードキャスト送信

##aapt
`appt d permissions hogehoge.apk` 
アプリケーションのpermissionとパッケージ名を知るときに使う。

`appt d xmltree hogehoge.apk AndroidManifest.xml`
アプリケーションのAndroidManifest.xmlの中身を知るときに使う。逆コンパイルせずにパッケージ名、アクティブ名を調べるときに便利。

[aaptコマンその他まとめ（外部サイト）](http://skillnote-one.blogspot.jp/2012/11/aapt.html)

#配布ツールまとめ
##apktool
`apktool d hoge.apk`
有名ツール。smaliファイルとAndroidManifest.xmlを取得するときに使う。

##androguard
`androapkinfo.py -i hogehoge.apk`
アプリケーションのMain Activity名とその他Activity名を知るときに使う。アプリケーションを100個ほど調べた結果、Activity名は「パッケージ名.{…}Activity」という形式が多い。しかし時々、「パッケージ名（一部省略）.{…}Activity」というのがあった。

##taintdroid
androidアプリケーションの通信を調べるツール。OSコンパイルの際に組み込んで使う。精度はだいぶ低い。（と思われる）

##droidscope
OSに組み込む。使い方わからん。
SublimeTextをCoffeeScriptに対応させる


環境：Mac OS X 10.9.4

前提：Package Controlがインストール済み

## CoffeeScriptをシンタックスハイライト

1. メニュー「Tools」-「Command Palette...」を選択する。
2. 入力欄にinstallと入力してEnterキーを押下する。
![Command Palette - install](https://qiita-image-store.s3.amazonaws.com/0/41963/dc14cbc9-9c91-8c8b-4f29-bcc13cfd66e1.png "Command Palette - install")

3. CoffeeScriptと入力してEnterを押下する。
![Package Control - CoffeeScript](https://qiita-image-store.s3.amazonaws.com/0/41963/227c791c-6631-309c-c036-4ca86f7ec73e.png "Package Control - CoffeeScript")


これで拡張子が「.coffee」ファイルがハイライト表示されう。
WEBページの歴史(AJAXとか周辺)

#注意書き

この記事は、弊社の社員に説明するために適当に書いたので、不正確なところが多いです。
真面目な人は、ちゃんと調べて正しい歴史を学びましょう。

#WEBページの歴史(AJAX周り)
## 先史時代　ただのHTML
* ハイパーリンク &lt;A&gt; でページロード(HTTP GET)
* サーバーへのデータ送信は、&lt;FORM&gt; (HTTP POST)
* スクリプトとか無い。
* 動くのは &lt;MARQUEE&gt;, &lt;BLINK&gt;, GIF画像ぐらい。

##中世暗黒時代　DHTML(笑)
* ブラウザにスクリプトが！！  &lt;SCRIPT&gt;, JavaScript
* DOMを、スクリプトから変更できる！
* → **こいつ動くぞ！**
* 見た目がリッチに！
* **見た目だけだった…**

## 近代　AJAX
* WEB2.0(笑)
* XHTML?
* **XmlHttpRequest(XHR)**, &lt;IFRAME&gt; の活用
* データ取得タイミングが、 **人間依存 → スクリプト依存** へ
* **スクリプトタイミング**で、自由にリモートのデータを取ってこれる
* Google Map の衝撃。どこまでも無限にスクロールできる
* **ウィルスの猛威**
* 制限が強まる方向
 * クロスドメイン制約

## 現代　??
* WebSocket とか (**サーバータイミング**での通信)
Windows7でVagrantの環境整備続き

[その1](http://qiita.com/rana_kualu/items/2028ab6575d43850dc7a) / [その2](http://qiita.com/rana_kualu/items/c3b19bac6991958d6382) / [その3](http://qiita.com/rana_kualu/items/51a7db79ff5891c8a69f)

## 日本語化

```
$ vi /etc/sysconfig/i18n
#LANG="en_US.utf8"
LANG="ja_JP.utf8"
```

en_USをja_JPに変更。
再起動。
「標準フォルダの名前を現在の言語に合わせて更新しますか？」には「古い名前のままにする」を選択。
X Windowが日本語になっていることを確認。

## WinSCPでログイン

プロトコルSFTP、ホスト名192.168.33.10、ポート番号20、IDとパスワードはvagrant。
普通に入れる。
root/vagrantでも入れる。
公開サーバならPermitRootLogin noのするところだが、ローカルなので特に制限しない。

## PHPを更新

CentOSデフォルトのPHPは5.3なので、最新版に更新する。
[remi](http://rpms.famillecollet.com/enterprise/6/)に早くもPHP5.6ができてたので、そちらを見るようにする。

```
# yum remove php*
# wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
# wget http://ftp.iij.ad.jp/pub/linux/fedora/epel/6/i386/epel-release-6-8.noarch.rpm
# rpm -Uvh remi-release-6.rpm 
# rpm -Uvh epel-release-6-8.noarch.rpm
```

インストールを実行

```
# yum install --enablerepo=remi --enablerepo=remi-php56 php
# service httpd restart
```

これでPHP5.6がインストールされる。
PHP5.6.0RC1だった。はええよ。
ただ必要最低限しか入れていないため、mbstringすらない。
$ yum list --enablerepo=remi > hoge
とかやってリストから必要なパッケージを選択する。
remiにはPHPだけではなくPEARとかPECLとかSmartyとかSymfonyとかphpMyAdminまで入ってる。いみわからん。
とりあえずこんなかんじで選択。

```
# yum install --enablerepo=remi --enablerepo=remi-php56 php php-common php-cli php-pdo php-mysql php-devel php-gd php-bcmath php-pecl-apc php-pecl-imagick php-pecl-hrtime php-pecl-spl-types php-tidy php-mbstring php-mcrypt
```

## gitをインストール

```
# yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel
# yum install git

$ git config --global user.name  NurseAngel
$ git config --global user.email hoge@example.com
```

## 現状を保存

いつでもこの時点に戻せるように、現在のサーバ状態を保存する。

```
> vagrant package
> vagrant box add centos_65_32_php56 package.box
> vagrant init centos_65_32_php56
> * Vagrantfile編集
> vagrant up
```

vagrant packageで現在の状態がpackage.boxに保存される。

```
> vagrant destroy
> vagrant up
```

でpackage時点に戻る。

```
	==> default: Configuring and enabling network interfaces...
	The following SSH command responded with a non-zero exit status.
	Vagrant assumes that this means the command failed!
	ARPCHECK=no /sbin/ifup eth1 2> /dev/null
	Stdout from the command:
	Stderr from the command:
```

戻らなかった。
なんかエラーにが出る。
192.168.33.10のIPアドレスが割り振られない。

http://www.absolute-keitarou.net/blog/?p=583
vagrant package前に対応しないといけないらしい。

```
$ sudo ln -s -f /dev/null /etc/udev/rules.d/70-persistent-net.rules
```

```
> vagrant halt
> * package.boxを削除
> vagrant package
> vagrant box remove centos_65_32_php56
> vagrant box add centos_65_32_php56 package.box
> vagrant init centos_65_32_php56
> * Vagrantfile編集
> vagrant up
```

これで正常にIPアドレスが割り振られるようになった。

## 完成

とりあえずPHPが自由に使えるサーバができた。
これで無事、やりたいことがやれるようになる。
が、特にやりたいことがなかった。
Windows 7でPlayground OSSを使ってみる

最近さすがにクライアントアプリもさくっと作れるようになっときたいなーと思い始めたので、挑戦してみることにしました。

AndroidとiOSで別に書くのは嫌だっていうのと、作るなら一攫千金狙えるゲームでしょ！ってことで、ラブライブでも使われているというKLabの[Playground](http://www.klab.com/jp/press/130926.html)を触ってみることにしました。

Unityは少し触ったんですが有料ということもあって、無料でクロスプラットフォームでゲームに特化したライブラリを探しました。
その中でまずPlaygroundを触ってみようと思った理由は、こんな感じです。

* OSS (Apache 2.0)
* Android/iOS対応
* ラブライブ楽しい

3つ目がメインですねｗ

# ドキュメント
まず`README.md`を読むと、ドキュメント類はすべて`Doc/`にあると書いてあります。
また、まずは`Doc/Project.md`を読めと書いてあります。
そんな感じで見ていくと、ドキュメントは次のように読むといいみたいです。

* README.md
* Doc/Project.md
* Doc/How_to_run.md
* Doc/Toboggan/Toboggan_Operation_Manual_JP.pdf
* Doc/Toboggan/Toboggan_Plugin_Manual_JP.pdf

# ダウンロード
PlaygroundはGithubで公開されています。
https://github.com/KLab/PlaygroundOSS

適当な場所に[Zip](https://github.com/KLab/PlaygroundOSS/archive/master.zip)をダウンロードして、解凍します。

# Visual Studioインストール
Windowsで動作させるためには、Windows用のエンジンをコンパイルする必要があります。
ということでVisual Studioをインストールします。
インストールするのは、[Visual C++ Express 2010](http://www.visualstudio.com/downloads/download-visual-studio-vs)です。

この状態だとVisual C++が古く、エンジンのソリューションを開くことすらできません。
Windows Updateで更新を確認して何回かUpdateすれば開けるようになります。

# エンジンビルド
ゲームエンジンをビルドします。
`Engine/porting/Win32/OSSGameLibraryWin32.sln`をダブルクリックして、Visual Studioを起動します。
読み込みに少し時間がかかりますが、起動したら`F7`キーでビルドします。

`指定したプラットフォーム ツールセット (v120) はインストールされていないか無効です。`
みたいなエラーが出たんですが、プロジェクトのプロパティでツールセットを`v100`にしてみたら上手くビルドできました。

# サンプルを実行してみる
Tutorialフォルダにいろいろサンプルがあるので、それを動かしてみます。

まずTobogganを起動します。
`Tools/Toboggan/KLBToolHost.exe`を実行します。

メニューの`Tools`>`Setup`でGameEngine LocationにさきほどビルドしたSample Projectを選びます。
`Engine/porting/Win32/Output/Debug/SampleProject.exe`

メニューの`File`>`Open`で`Tutorial/01.SimpleItem`を開きます。

`File`>`Publish All`でアセットをゲームエンジンがロード可能な形式へ変換します。

`Tools`>`Run`でエンジンを起動します。
このとき先ほどパブリッシュしたデータがロードされます。

# おわりに
とりあえずサンプルプログラムが動くところまではできました。
もう少し触ってみようと思いますが、なにぶん情報が少ないので素直にcocos2dxとか使った方がよさそうですｗ
Androidイメージファイル配布サイトまとめ（随時更新）

##Androidそもそもの仕様の話
Androidが使うポート番号は5554から5585。最大16個接続可能。
奇数番号：adbコネクションを待ち受ける。
偶数番号：コンソールコネクションを確立する。

adbはadb-server,adb-client,adbdでセット。普段一番気にしないのがadb-client。adb関係のコマンドはadb-clientからserverに依頼して、端末内のadbdに送られる。adb-serverは5037番ポートでadb-clientとTCP通信している。

androidのNIC確認は`adb shell ls /sys/class/net/`でできる。

##AndroidSDKに付属してるAVD
既知のことだが、酷く重い。理由はAndroidのアーキテクチャ見ればわかる。アプリケーションはAndroidのサンドボックス内で動くので、結果として３重でエミュレーションしてるから。intelの拡張プラグインがあるが、環境によってインストールできない場合があり、使えない。複数のエミュレータが必要な場合、AVDは不適切。

##ISOファイル配布サイト
[Android-x86 - Porting Android to x86](http://www.android-x86.org/download)

以下virtualbox上での話
※1.配布イメージによってインターネット接続できるものとできないものがある模様。
以下Android-x86-4.0-r1のISOを立ち上げた結果のメモ
1.asus･･･eth0が見えてない。[stackoverflow](http://stackoverflow.com/questions/10069121/no-network-in-android-x86-on-virtualbox-4-1-2)に同様の話がある。しかし、デフォルトでsudoが使えないため、お手上げ中。

2.eeepc･･･eth0が見えていてインターネット接続できるが、表面上インターネット未接続。wifiがOFFになってる。`adb root`後、再度接続、`setprop net.gprs.http-proxy http://proxy.hoge.com:8080`を試したが、proxyが通ってないことを確認した。

3.amd_brazos･･･インストールできない。
4.tegav2･･･インストールできない。
5.thinkpad･･･
6.tx2500･･･
7.s103t･･･

##OVAファイル配布サイト
[AndroVM blog](http://androvm.org/blog/)

以下virtualbox上での話
※1.NAT接続でポートフォワーディングの設定にすると、proxyがつながらない。

※2.ポートフォワーディングの設定で5555番ポートに固定される。（5557番で接続できないことを確認）またIPアドレスも10.0.3.15で固定の可能性がある。

※3.ブリッジでネットワーク経由で接続すると、ポート番号が5555で固定される。（※2と同様）

※4.ネットワークアダプタ１は未割り当てで固定。ネットワークアダプタ２を主に使う。アダプタ１をNATもしくはブリッジにして、アダプタ２を無効化するとインターネット接続できない。（確認済み）

※5.コマンドラインからアプリケーションをアンインストールする場合、`adb root`を実行、再接続してから実行しないと怒られる。（アンインストールは要root権限）理由はコマンドラインからインストールされたアプリケーションは、system領域にあるから。

※7.このサイトで配布されてるVMを使うとビデオメモリが足りないと怒られるので、数値を増やす。

##登録して使うVM image
[Genymotion](https://cloud.genymotion.com/page/customer/edit/)

前述のAndroVMの別サービス。しかし、私の環境（Ubuntu 14.04LTS）だと立ち上げと共にフリーズが起きた。Ubuntuを安全に再起動するコマンドを押しても、コマンドが機能しない。そのため２回電源ボタンを押すことになった。Ubuntuユーザは使わないほうが無難かもしれない。

##Android OSをビルドして使う
方法は後ほど。Googleの公式サイトを見ながら、他サイトを見ながらやればおｋ

AndroidOSをビルドすると、AVDと同じスキンになり、結局は３重エミュレータになる。重い。OS部分だけ抜き出して、vboxに移動できないか、考え中。他、NICの問題も残る。
感覚覚書

「あの人の一部は映画でできている」というトークイベントでAR三兄弟の川田さんのお話を聞いてきた。
※イベントの説明は[こちら](http://www.uplink.co.jp/event/2014/28474)

いろいろな映画についての思い入れやおもしろポイントが展開される中で、[ゴーストバスターズの緑のおばけのベトベト感の見せ方](https://www.youtube.com/watch?v=j2nYqyfDMnQ)に対し「視覚に触覚を与えている」と表現していたのがとても印象的だった。

ということは[さわれる検索](http://sawareru.jp/)は触覚に視覚を与えている事になるのかなと思ったり。

感覚を足す以外にも引いたり（麻酔とか）入れ替えたり（触ると口の中で味がするとか）して遊べそう。

川田さんの開口一番「通りすがりの天才です」が超シビれた、そんな夜。
javascriptで変数名を動的に生成・連結する方法

# 概要
javascriptで動的に変数名を作成・宣言したい時，例えばfor文で次々に変数を作成・宣言したい時の方法．
# 生成・連結方法
* [eval](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/eval)を利用する．以下，num0~num9を動的に宣言し，初期化する例．
<pre>
for (var i = 0; i < 10; i++) {
　　eval("var num" + i + "=" + i + ";");
}
</pre>
Octopressで見出しタグを目次にする方法


[jekyll-toc-generator](https://github.com/dafi/jekyll-toc-generator)というプラグインが使えますが、Octopressで使うと、ちょっとだけ不都合があったので、変更しました。

[https://github.com/syui/jekyll-toc-generator](https://github.com/syui/jekyll-toc-generator)


```bash:
$ echo "gem 'nokogiri'" >> ~/octopress/Gemfile

$ cd ~/octopress

$ bundle install

$ cd ~/octopress/plugins/

$ curl -O https://raw.githubusercontent.com/syui/jekyll-toc-generator/master/_plugins/tocGenerator.rb
```

あとは、個別ページやメインページなど表示したい場所で`{{ content }}`を`{{ content | toc_generate }}`に変更します。


```html:source/_includes/article.html
- <div class="entry-content">{{ content }}</div>

+ <div class="entry-content">{{ content | toc_generate }}</div>
```

https://github.com/imathis/octopress/blob/2.5/.themes/classic/source/_includes/article.html#L27

なお、有効無効の設定は、`noToc: true`のオプションになります。デフォルトでは有効なので、無効にする設定です。

```css:
---
layout: post
noToc: true
---
```

これで、目次が自動形成されていい感じです。



参考:

[Octopressで見出しの目次を作る方法 改 - 割り箸ポテチ](http://blog.chopschips.net/blog/2014/07/08/octopress-toc-improved/)
MEAN環境でCOMET(Long polling)通信を作ってみた（個人メモ）

#目的
フロントAngularJS、バックNodejsのいわゆるMEAN環境でtwitterのstreaming APIを使ってCOMET通信をやってみた。今回は主に通信〜NodeJS側のセッション内での情報共有の部分でいくつかわかったことがあるのでメモとし残します。
・初歩的な情報も残す。
・Passportでの認証部分は結果的に何もノウハウがないので割愛。
・あくまでも個人メモなので、単体で動くコードは将来の努力目標とする。

#ハマったところ
・フロント側とバック側が非同期で処理するのはJavascriptなので自然にそうなってしまうが、複数のHttpリクエスト間で情報共有する部分は意外と情報が少なく、トライ＆エラーを繰り返した。
・ロングポーリングなので、ブラウザがリクエストを送って、結果が返ってくるまではずっと待ち続けるかというと、そうでもなかった。（少なくともChromeでは）リクエスト発行後120秒で接続が一旦切られてしまうので、そのあたりの考慮も必要。

#通信部分の実装
・Angularからの初回$http.getでは(twitterの）Streamを呼び出すまでを処理し、StreamのCallback関数内で取得した(twitter)データをSessionStoreに追加する。この部分のポイントはsessionStoreの参照＆格納する部分。

```
//sessionStore参照
req.sessionStore.get(req.sessionID, function (err, session){
}
//sessionStore格納 (req.session.save()でも良い）
req.sessionStore.set(req.sessionID, session, function (err){
}
```
・Angularからの２回め以降の呼び出しが実際にはLongPollingとなるが、普通通りに$http.get等で呼び出せば良い。NodeJsでは、上記と別の関数を準備して、上記関数でセッションに書きだした情報を読み書きしてやれば良い。setIntervalを使って数秒間隔でsession情報を問い合わせる。データがなければ繰り返し、あればフロントに戻す。ポイントだけ抜き出す。

```
//ブラウザが定期的にリクエストし直すために必要
if(req.listeners("close").length===0) {
  req.on("close", function() {
    // request closed unexpectedly
    clearInterval(interval);//タイマをストップ
  });
}
//sessionStoreからsession取得
req.sessionStore.get(req.sessionID, function (err, session){
}
//session格納
//req.sessionに格納しておけばreturn時にSessionStoreにコピーされる
req.session.statuses=session.statuses.splice(0);//sample
clearInterval(interval);//結果を返すためにタイマをストップ
```

#感想
・DataStoreの動きが、responseありとなしでは全く違うので苦労した。
　→（データ取得側のような）responseなしの場合にはSessionStoreに直接格納する、またはrequest.session.save()のいずれか。
　→（データ返却側のような）responseありの場合には一旦request.sessionに格納してやる必要がある。SessionStoreに直接書いても上書かれるのでNG.

＃やっぱり文字で書くとダメですね。シーケンス図をチャチャッと作れたらなあ。

#後日談
twitterのStreaming APIを使って、タイムラインのユルユル表示をするということ自体は間違いではないだろうが、ほころびが目立ってきた。
・Strreaming APIをサーバ側で使用するということは、どうしてもセッション管理が複雑になってしまう。つまり、セッションごとにstatusesの取得結果を保持することになり、気まぐれなWEBクライアントの動き（ログアウトしない。いきなり切れる。）に合わせるとStreaming呼出し遮断とセッション情報のお掃除が必要となる。一ユーザが複数のセッションを張ることなどを考えると、セッションID毎でなく、ユーザ単位でやるべきか？等の考慮すべきことがまだあると思われる。つまるところ、複雑な仕組みになりすぎる。
・Streaming APIのstatuses/userにはなぜかパラメータでinclude_entitiesの指定ができない。このパラメータはtext部分の短縮形のURLを通常のURLに展開してくれるもので、Statusを画面表示する際には展開された形でなければわかりづらいと言える。また、URL展開のためのAPIも提供されていない。Streaming APIにこのオプションがないのは単純に「現在開発中」ということなのかもしれないが、REST APIのstatuses/home_timelineであれば使えるし、結局のところCOMETなども全部おしゃかにしてして作り直すべきなのかもしれない。（ほぼ結論が出ている。あとは開発時間の問題。）
HTMLで字詰め(カーニング)できるJS書いてみた

いろいろあってHTMLで字詰めできるライブラリが欲しくなったので
自分で書いてみました。探してみるといろいろライブラリあるみたいですが＞＜
あ、IEでは確認してません。動かなかったらすみませんm(__)m

## ソースコード
gistにおきましたm(__)m
https://gist.github.com/sawapi/75431c2ffb56610e0e7e

## 使い方
使い方は簡単です。
以下のように記述することで、字詰めされた状態のHTMLを取得できます。

```javascript
var text = "「字詰め」のテストです。"
text = text.kerning(); // 字詰めされたHTMLを取得する
console.log( text );
```

結果は以下の通りです。

```html
<span style="display:inline-block;margin-left:-0.5em;">「</span>字詰め<span style="display:inline-block;margin-right:-0.5em;">」</span>のテストです<span style="display:inline-block;margin-right:-0.3em;">。</span>
```

## サンプル
JavaScriptの説明はWikipediaから引用しましたm(__)m
http://ja.wikipedia.org/wiki/JavaScript

```html
<!doctype html>
<html>
<head>
<style>
h2 { margin: 0px; padding: 0px; color: #222222; font-size: 18px; }
div { font-size: 14px; color: #444444; border: 1px solid #a0a0a0; padding: 5px; }
</style>
</head>
<body>

<h2>字詰めなし</h2>
<div>
JavaScript（ジャヴァスクリプト）とは、プログラミング言語のひとつである。
Javaと名前が似ているが、異なるプログラミング言語である（後述の#歴史を参照）。
オブジェクト指向のスクリプト言語であることを特徴とする。
主にウェブブラウザに実装され、動的なウェブサイト構築や、
リッチインターネットアプリケーションなど高度なユーザインタフェースの開発に用いられる。
</div>

<h2>字詰めあり</h2>
<div id="kerning">
JavaScript（ジャヴァスクリプト）とは、プログラミング言語のひとつである。
Javaと名前が似ているが、異なるプログラミング言語である（後述の#歴史を参照）。
オブジェクト指向のスクリプト言語であることを特徴とする。
主にウェブブラウザに実装され、動的なウェブサイト構築や、
リッチインターネットアプリケーションなど高度なユーザインタフェースの開発に用いられる。
</div>

</body>
<script src="./kerning.js"></script>
<script>
var element = document.getElementById( 'kerning' );
element.innerHTML = element.innerHTML.kerning();
</script>
</html>
```

字詰めした結果は以下の通りです。
(「。」のあとにスペースがあるように感じるのは改行のせいです)
![20140612192124.png](https://qiita-image-store.s3.amazonaws.com/0/26955/aeb6248a-5e4f-8822-a690-099812af6eb0.png)

## まとめ
対応している文字が20種類くらいと少ないので、まだまだ見た目はあれなんですが
少しはましになったかと思います。
こんなのでよければ自由に使ってくださいm(__)m

元記事：http://sawapi.hatenablog.com/entry/2014/06/12/193309
通貨のI18nは気をつけた方がいい


皆さんはRailsの

```ruby
number_to_currency
```

という関数をご存知だろうか？



例えば、あるものの金額が、`23654200`円だったとする。
まったくもって読みにくい。

これを会計風に表示してくれるのが`number_to_currency`である。


```ruby
number_to_currency(23654200)
```

としてみると、

```
23,654,200円
```

と表示してくれる。とても優秀な関数である。

ちなみに、これはデフォルトの設定を以下のように指定しておかないとこういう風にはならないかもしれない。

```ja.yml
ja:
  number:
    currency:
      format:
        delimiter: ","
        format: "%n%u"
        precision: 0
        separator: "."
        significant: false
        strip_insignificant_zeros: false
        unit: 円
```

こういった細かいオプションについては

http://api.rubyonrails.org/classes/ActionView/Helpers/NumberHelper.html

を参照して欲しい。


**で、本題。**

これの厄介なところは、いざロケールが英語の人が見てみると、この値段は

```
$23,654,200.00
```

と表示される。
素晴らしい機能すぎて涙が出る。。。

ja->enの場合は値段が高くなっているので、モノを販売しているときは多分大きなトラブルにはならないと思うが、値段が高くなって困るケースも多々あるはずなので転ばぬ先の杖として以下のように設定しておくと良い。

```en.yml
en:
  number:
    currency:
      format:
        delimiter: ","
        format: "%n%u"
        precision: 0
        separator: "."
        significant: false
        strip_insignificant_zeros: false
        unit: " JPY"
```

もしくは

```en.yml
en:
  number:
    currency:
      format:
        delimiter: ","
        format: "%u%n"
        precision: 0
        separator: "."
        significant: false
        strip_insignificant_zeros: false
        unit: "¥"
```

と設定しておくと安全。
自分は、'¥'と書いてあっても通過単位がわからない人は外国では多いと思うので、ググれる'JPY'の方がいいのではないかと思っている。

ちなみに、ドル払いも可能にするときは、普通に何らかの関数を別途作ったほうが無難だと思う。


本来、localeには、地域と言語の2軸あり、今回の場合の円はどちらかと言うとjpという地域に属するもの。
こういうものは他にもあるかも知れないが、お金の話はセンシティブなので、皆さんもなにか問題になる前に設定を見なおしてみてはいかがでしょう？
パーミッションについて

教えてくれ五飛、俺はあと何回ディレクトリのパーミッションをぐぐれば良いんだ。

というわけで、忘れた頃にやってくるディレクトリのパーミッションについてメモしておこうと思いました。

## ファイルとディレクトリで異なるパーミッション

Linuxのパーミッションは、8進数を3つ組み合わせた形で指定します。
`744` であるとか `777` といった風にですね。
それぞれ1桁ずつ独立しており、各桁が指定するのは以下の様になります。
（左から1桁、2桁、3桁めとします。）

|桁|内容|
|:-:|:--|
|1|所有者|
|2|グループ|
|3|その他のユーザ|

また、数値が意味するパーミッションをまとめたのが以下の表です。

|名前|英字|8進数|ファイル|ディレクトリ|
|:-:|:-:|:-:|:-:|:-:|:-:|
|読取|r|4|ファイルの表示|ファイル一覧の表示|
|書込|w|2|ファイルの上書き、変更|新規ファイルの作成、削除|
|実行|x|1|ファイルの実行|そのディレクトリに移動|

8進数というのは、コマンドなどで指定する時の数値になります。

|8進数|`ls -l`表記|
|:-:|:-:|
|7|rwx|
|6|rw-|
|5|r-x|
|4|r--|
|2|-w-|
|1|--x|

つまり、以下の `chmod 754 ./test.sh` というコマンドを発行した場合は

```
test.shファイルを、所有者は「読取」「書込」「実行」権限を有し、
グループは「読取」「実行」権限を有する。
その他のユーザーは「読取」権限のみを有する。
```

上記のパーミッションをファイルに付与する、という事になります。

## ファイルの削除を制限するスティッキービット

上記の通り、ファイルの削除はファイルのパーミッションに関わらず、ディレクトリのパーミッションが参照されます。
しかし、スティッキービットを指定したディレクトリに関しては、
**ファイルの削除がファイルの所有者のみに制限されます。**

* **drwxrwxrwt**

スティッキービットが設定されているディレクトリは、
ファイルリスト取得時、上記の通り末尾に `t` が付与されます。

## ディレクトリの実行権限に関する注意点
ディレクトリの実行権限はサブディレクトリに影響します。

+ **/User/DevSong/Documents/**

上記の様なディレクトリがあり `DevSong` ディレクトリに実行権限がない場合、
`Documents` ディレクトリが例え `777` であったとしても `Documents` ディレクトリへの書き込み、削除はできません。
初めてのPHP5のはまりポイント集

PHP5向けにほぼ初めて開発する人向けの情報をのせておきます。主に初めて調べて行っていく際にはまるポイントを書いていきます。

対象

* PHP5


初心者(私含む)がよくやってしまうミスシリーズ


#mysql_connectなどの古いものをつかってしまう
ネットで調べると古い時代のphp資料がよく見つかる。それをうのみにするとあとでたいへんっぽい


非推奨リスト(解決策)

* mysql_connect(PDO)
* 後で追記していきます

#手続き型で書いちゃう
参考書でもあるのが、オブジェクト指向ではないものが多い。
まあ、人それぞれなので、オブジェクト指向では書かないといけないわけではないですが。。。。

#Notice非表示の環境で慣れてしまう(2014/7/13追記。コメントより)
Notice表示設定にしてあると未定義の変数を使用していると、phpを実行した際に表示されるようになる。また、ほかの警告内容のものも表示されるようです。エラーが表示されたら消すようにしましょう。表示されないのもあるのかは不明。


解決策
php.iniにて設定するか、error_reportingを使用すればよさそうです

#phpオンリーのファイルの最後を?>で閉じちゃう
phpオンリーのファイルは最後を?>閉じる必要がないらしい。理由は、?>移行にある文字(空白や改行など)によって、予期せぬバグを招くため。



#変更記録
* 2014/8/8 「phpオンリーのファイルの最後を?>で閉じちゃう」を追加
modern.IEのダウンロードから起動までを自動で行うツール

# どんなツールか

modern.IEの仮想マシン (virtual machine, 以下VMと略) のダウンロードから起動までを自動で行うツールをGoで書いてみました。macのVirtualBox用です。

ソースは [hnakamur/moderniedownloader](https://github.com/hnakamur/moderniedownloader) にあります。
バイナリは[Releases · hnakamur/moderniedownloader](https://github.com/hnakamur/moderniedownloader/releases)にあります。

# セットアップ

上記のバイナリのリンクからダウンロードして、以下のコマンドで実行パーミションをつけるだけです。

```
chmod +x moderniedownloader
```

# 使い方

## 使用可能なmodern.IE の種類の一覧を表示

```shell-session
$ ./moderniedownloader -L
IE6 - WinXP
IE8 - WinXP
IE7 - Vista
IE8 - Win7
IE9 - Win7
IE10 - Win7
IE11 - Win7
IE10 - Win8
IE11 - Win8.1
```

## ダウンロードと起動

例えばIE11入りのWindows7のVMを起動したい場合は以下のようにします。

```shell-session
$ ./moderniedownloader "IE11 - Win7"
```
初回はVMの分割ファイルをダウンロード、ファイル結合、VM登録、VM起動を行うので時間がかかります。2回め以降は単に起動するだけなので早いです。

### 詳細な処理内容

- VMタイプと同名のVMが登録されていなかったら
    - VMタイプと同名の*.ovaファイルが存在しなかったら
        - VMの分割ファイル (*.sfxと*.rar)をダウンロードして結合し*.ovaファイルを作成します。(その後*.sfxと*.rarは削除します)
            - *.sfxと*.rarは既に存在するファイルはスキップします。途中終了したりして不完全なファイルがある場合は、消してから再実行してください。
    - *.ovaファイルをインポートしてVMを作成します。
    - VMのDVDストレージにVirtualBox GuestAdditionsのDVDイメージをマウントします。
    - "Snapshot 1"という名前でスナップショットを作成します。
- VMを起動します。
- VMのクリップボード連携を双方向に設定します。


## 登録済みのVMの起動

例えばIE11入りのWindows7のVMを起動したい場合は以下のようにします。

```shell-session
$ ./moderniedownloader "IE11 - Win7"
```

つまり、ダウンロードして起動する場合と同じです。

## 登録済みのVMの一覧表示

```shell-session
$ ./moderniedownloader -l
IE11 - Win7
```

## pecoで選択して起動

```shell-session
$ ./moderniedownloader "`./moderniedownloader -l | peco`"
```

# Goで書いた経緯と感想

## なぜGoで書きなおしたのか

バイナリ1つで配布できて便利なのと、Goの勉強を兼ねてという2つです。

[modern.IEのOSX上のVirtualBox VMのダウンロードから起動までを自動化するスクリプト - Qiita](http://qiita.com/hnakamur/items/7b2c153c60ee1a637ff2)にも書きましたが、最初はbash scriptで実装し、その後Node.jsで実装しなおしました。でも、ヘッドレスブラウザでJavaScriptを解釈するのはページ内のJavaScriptエラーに弱いという欠点が見つかりました。

そこでHTMLファイル内のscriptタグからJSONの部分を正規表現で切り出して取得するようにしました。ただ、この方式ならNode.jsでなくても良いので、勉強を兼ねてGoで書きなおしてみたというわけです。

## Goで書いてみた感想

Node.jsで書いた時はコールバックやPromiseを使って実装したのですが、やはりGoのほうが書きやすかったです。

分割ファイルをダウンロードする処理の並列化には、以下のページを参考にしました。ありがとうございます！

* [golang でループを手っ取り早く並列化する方法 — KaoriYa](http://www.kaoriya.net/blog/2013/07/08/)
* [go - Example for sync.WaitGroup correct? - Stack Overflow](http://stackoverflow.com/questions/19208725/example-for-sync-waitgroup-correct)
Rails4+turbolinks環境でgooglemap apiを使う時の注意点

期待通り動くまでに苦労したので、ここで共有します。

#apiロード時の注意点

turbolinksはjsを使い回すので、特定のページでgoogle map apiをロードしようとしても、工夫していなければロードできません。

##A: 全てのページでapiを読み込む

サイトにアクセスした時点でapiをロードする方法です。
apiを使わない場合もロードしてしまいますが、最初の読み込み重たくなるだけで、後の動作は快適です。

````app/views/layouts/application.html.erb
<head>
  <%= javascript_include_tag "http://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false" %>
</head>
````

##B: apiを使うページヘのリンクだけturbolinkを切る
特定のページだけapiをロードしたい場合は、apiを使うページヘのリンクに対して`'data-no-turbolink' => true`を設定すると動作します。

````app/views/layouts/application.html.erb
<head>
  <%= yield(:head) if content_for?(:head) %>
</head>
````
````app/views/hoges/index.html.erb
<% content_for(:head) do %>
  <%= javascript_include_tag "http://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false" %>
<% end %>
````
```
<%= link_to 'View Map', hoges_path, class: "btn", 'data-no-turbolink' => true %>
```

#トリガー発火時の注意点

turbolinksの発火条件を追加する必要があります

##A: page:changeを追加する

jsはそのままで、htmlが読み込まれた時にマップを初期化するトリガーを追加します。

````application.js
  google.maps.event.addDomListener(window, 'load', init_map); //元からあるトリガー
+ google.maps.event.addDomListener(window, 'page:change', init_map); //追加したトリガー
````

##B: jquery-turbolinksを使う
````none:Gemfile
gem 'jquery-turbolinks'
````

````applicaion.js
  //= require jquery
+ //= require jquery.turbolinks
  //= require turbolinks
````

````hoge.js.coffee
$->
  init_map()
````
以上です。
間違いなどがありましたら指摘していただけると嬉しいです。

###参考
http://stackoverflow.com/questions/13807686/gmaps4rails-and-turbolinks-not-loading-without-full-page-refresh
Sinatra-AssetpackでEncoding::UndefinedConversionError　


こんな感じのエラー(production環境で)が出たら

```
App 46 stderr: Encoding::UndefinedConversionError - U+30A1 from UTF-8 to US-ASCII:
App 46 stderr: 	/var/lib/gems/1.9.1/gems/sinatra-assetpack-0.3.3/lib/sinatra/assetpack/package.rb:112:in `encode'
App 46 stderr: 	/var/lib/gems/1.9.1/gems/sinatra-assetpack-0.3.3/lib/sinatra/assetpack/package.rb:112:in `block in combined'
App 46 stderr: 	/var/lib/gems/1.9.1/gems/sinatra-assetpack-0.3.3/lib/sinatra/assetpack/package.rb:108:in `map'
App 46 stderr: 	/var/lib/gems/1.9.1/gems/sinatra-assetpack-0.3.3/lib/sinatra/assetpack/package.rb:108:in `combined'
App 46 stderr: 	/var/lib/gems/1.9.1/gems/sinatra-assetpack-0.3.3/lib/sinatra/assetpack/package.rb:94:in `minify'
App 46 stderr: 	/var/lib/gems/1.9.1/gems/sinatra-assetpack-0.3.3/lib/sinatra/assetpack/class_methods.rb:32:in `block (3 levels) in add_compressed_routes!'
App 46 stderr: 	/var/lib/gems/1.9.1/gems/tilt-1.4.1/lib/tilt.rb:127:in `fetch'
```

環境変数LANGにen_US.UTF-8を指定してあげればとりあえず凌げる。
Passengerの場合は設定ファイルに以下の行を追加すれば環境変数を設定できる。

```
passenger_set_cgi_param LANG en_US.UTF-8;
```

###参考URL
https://github.com/rstacruz/sinatra-assetpack/issues/76
呼び出し元のmethod名を取得

※ ruby2.0以上

## こんなmethodを定義しておく
```ruby:test.rb
def current_method
  caller_locations(1).first.label
end
```
```ruby:test.rb
def hoge
  "#{current_method}_methodだよ"
end

def fuga
  "#{current_method}_methodだよ"
end
```

````ruby:pry
pry(main)> hoge
=> "hoge_methodだよ"
pry(main)> fuga
=> "fuga_methodだよ"
```

上記のように``current_method``の呼び出し元のmethod名を取得できる
RuboCop | Style/LambdaCall

# RuboCop | Style/LambdaCall

## 概要

RuboCopの「Style/LambdaCall」警告について。

lambdaの呼び出し方法についてチェックします。
デフォルトでは *call* を推奨します。

### 設定値一覧

|設定対象|設定値|内容|デフォルト|
|:-----|:---|:---|:---:|
|EnforcedStyle|call|callメソッドを利用する|○|
|EnforcedStyle|braces|()を利用する|--|

## LambdaCall

各設定値での検証結果をまとめます。

### 検証プログラム

lambda_call.rb

~~~ruby
double = ->(x) { x * 2 }

2.step(10, 2).each do |x|
  puts double.call(x)
  puts double.(x)
end
~~~

### 実行結果 デフォルト の場合

.rubocop.yml

~~~yaml
LambdaCall:
  EnforcedStyle: call
~~~

~~~bash
$ rubocop lambda_call.rb
Inspecting 1 file
C

Offenses:

lambda_call.rb:5:8: C: Prefer the use of lambda.call(...) over lambda.(...).
  puts double.(x)
       ^^^^^^^^^^

1 file inspected, 1 offense detected
~~~

### 実行結果 consistent に設定します

.rubocop.yml

~~~yaml
LambdaCall:
  EnforcedStyle: braces
~~~

~~~bash
$ rubocop lambda_call.rb
Inspecting 1 file
C

Offenses:

lambda_call.rb:4:8: C: Prefer the use of lambda.(...) over lambda.call(...).
  puts double.call(x)
       ^^^^^^^^^^^^^^

1 file inspected, 1 offense detected
~~~

## 補足

この警告は rubocop -a で修正可能です。

## RuboCopまとめ記事

http://qiita.com/tbpgr/items/edbfecb6a6789dd54f47
EC-CUBEをmac内にインストールする方法

## テストでEC-CUBEをmac内にインストールする方法
### mysqlの初期設定まで
自分の環境にbrewでmysql51が入っていたので、5.6をインストール&リンク

```
brew install mysql
brew unlink mysql51
cd /usr/local/var/mysql
rm -f ib_logfile*
rm ibdata1
# 余計なものがなければ以下だけで大丈夫なはず
brew link mysql
mysql.server start
mysql -uroot
```

##### データベース作成
```
create database eccube_db;
create user eccube_db_user;
GRANT ALL ON eccube_db.* TO 'eccube_db_user'@'localhost' IDENTIFIED BY 'eccube_db_user';
```

### EC-CUBEのインストール
- ソースコードを本家サイトからダウンロード http://www.ec-cube.net/download/
  - ユーザー登録が必要（ダルい）
- zipファイルを解凍
- phpのビルトインサーバで起動

```
unzip eccube-2.13.2.zip 
cd eccube-2.13.2/html/
php -S localhost:8000 # 5.3以前だと動かないはず
open http://localhost:8000/
```
tarのディレクトリを1階層スキップする

Chefで

```
tar xf archive-1.0.0.tar.gz -C /var/www/html
mv /var/www/html/archive-1.0.0 /var/www/html/archive
```

みたいなことをやろうと思うと ruby_block とか出てきてつらいので調べた。

```
tar xf archive-1.0.0.tar.gz -C /var/www/html --strip=1
```
ビルド済みの ruby を git clone で撒く手順

別ホストでビルドした ruby を git レポジトリに突っ込んで、git clone でデプロイする手順を自分のためにまとめておく。

# 条件

ビルドサーバと、デプロイ先ホストのアーキテクチャが同じであること。OSのバージョンも同じだとなおよい。

# ビルドサーバ作業

ruby や C拡張な gem のビルドに必要なライブラリを入れる ※ ここでは例として CentOS を対象に記載しているがもちろんその限りではない

```bash
$ sudo yum groupinstall -y "Development tools"
$ sudo yum -y install openssl openssl-devel readline-devel readline compat-readline5 libxml2-devel libxslt-devel libyaml-devel
```

rbenv && ruby-build のインストール ※ rbenv の設定に関しては [オレオレ rbenv 運用 Tips](http://qiita.com/sonots/items/a309520b9cce1b7631a5) のテクニックを使っているが、普通にやってもらって構わない

```bash
$ git clone https://github.com/sstephenson/rbenv ~/.rbenv
$ mkdir -p ~/.rbenv/plugins
$ git clone https://github.com/sstephenson/ruby-build ~/.rbenv/plugins/ruby-build

$ cat <<'EOF' | sudo tee /etc/profile.d/rbenv.sh
if [ -d "$HOME/.rbenv" ]; then
  export PATH="$HOME/.rbenv/bin:$PATH"
  eval "$(rbenv init --no-rehash -)"
fi
EOF
$ exec $SHELL -l
```

ruby のビルド && bundler のインストール ※ 個人的には [ruby-build の --enable-load-relative オプション](http://qiita.com/sonots/items/04008fa2337a27fc2692)を使うのが好きだが、普通のビルド方法で書いておく。普通といいながら `MAKE_OPTS="-j 4"` をつけて並列コンパイルするテクニックを使っておく。

```bash
$ MAKE_OPTS="-j 4" rbenv install 2.1.2
$ rbenv local 2.1.2
$ gem install bundler
$ rbenv rehash
```

ビルドサーバで bundle してアプリに必要な gem を全て入れておく(C拡張な gem もビルドしておく)

```bash
$ cd ~/あなたのアプリ
$ bundle
```

github 上に ruby-アプリ名-x86_64 のようにレポジトリを作っておき、push する、前にゴミ掃除する ※ ポイントと言えるのはこのゴミ掃除ぐらいか

```bash
$ cd ~/.rbenv/versions/2.1.2
# git 指定で入れた gem に .git ディレクトリがあって邪魔になるので消さないといけない
$ find . -name '.git' | xargs rm -r
$ git init
# git add . だけでは .so ファイルなどを入れてくれないので -f でいれる
$ git add -f .
```

あとはふつうに commit && push

```bash
$ git commit -a -m 'initial commit'
$ git remote add origin git@github.com:sonots/ruby-アプリ名-x86_64.git
$ git push -u origin master
```

# デプロイ先ホスト作業

利用に必要なライブラリを入れる。※ いつからか使うだけなのに libyaml-devel が必要になったので入れておく。前はすべて ruby レポジトリに入ったのでなにもいらなかったのだが。。。

```bash
$ sudo yum -y install libyaml-devel
```

rbenv のインストール ※ ruby-build はもちろん不要

```bash
$ git clone https://github.com/sstephenson/rbenv ~/.rbenv

$ cat <<'EOF' | sudo tee /etc/profile.d/rbenv.sh
if [ -d "$HOME/.rbenv" ]; then
  export PATH="$HOME/.rbenv/bin:$PATH"
  eval "$(rbenv init --no-rehash -)"
fi
EOF
$ exec $SHELL -l
```

ruby のデプロイ (git clone)

```bash
$ git clone git@github.com:sonots/ruby-アプリ名-x86_64.git ~/.rbenv/versions/2.1.2
```

すべての gem が入っている状態なので、bundle install フリー。rbenv などは最初の１度だけ入れれば良いので、以降のアップデートは git pull するだけとなる。
Nexus5を長持ちさせるただ１つの方法


Nexus5を長持ちさせる方法を発見しました！！

それは・・・


. 
.
.
 

**カバーを付けること。**

.
それも買ってすぐに！
ネタじゃなくて、真剣ですよ。





でないと、購入三日目に
うっかりコンクリの上に落としただけで

![nexus5_broken.jpg](https://qiita-image-store.s3.amazonaws.com/0/38611/c200ba28-2535-34c6-819b-771568f2be0a.jpeg)

こうなります（涙目）

車に乗り込もうと、ちょっとおしりのポケットに入れようとしたところで
手を滑らせてしまい、足元のコンクリの上に落下。それだけです。
そんなケース、結構ありませんか？

最近の端末はフチが非常に薄くなってますよね。しかも表面はガラス製。
良く見ると、ガラス板がフチすれすれのところまで来ているので、
特にNexus5はフチをぶつけると簡単にガラスに衝撃が加わってしまうようです。

***なのでみなさん、Nexus5はカバー必須ですよ！！！***

こういったことは、国内メーカが作った端末では考えられないことかなと
日本の良い部分を再発見したりもします。その分値段も違いますけどね。
enthumbleキーカスタマイズ例(HJKL配列)

HJKL配列を選んだ理由は普段使用しているテキストエディタがVimなので。

基本的にそのままですが、PgUp、PgDn、マウスのスクロールなどを
HJKLの周りに集めることでなるべく無駄のないキーボード操作を目指しました。
また、トラックボールと併せて使用するためにPにLクリックを割り当てています。
最近使い始めたばかりであまりカスタマイズはしていませんが将来的には
ホームポジション固定でキーボード操作できるようにしていく予定です。

今のままでも十分動かしていませんが…

変更次第追記していきます。

(7/15)
すっかり忘れていたInsertを追加。


[HowToUse]
Check=http://jp.enthumble.com
Name=enthumble version 3.0
[KEY]
Space={Enter}
Muhenkan={Esc}
Henkan={Esc}
Hiragana={vkF3sc029}
F1={}
F2={}
F3={}
F4={}
F5={}
F6={}
F7={}
F8={}
F9={}
F10={Volume_Mute}
F11={Volume_Down}{Volume_Down}
F12={Volume_Up}{Volume_Up}
F23={}
F24={}
1={F1}
2={F2}
3={F3}
4={F4}
5={F5}
6={F6}
7={F7}
8={F8}
9={F9}
0={F10}
-={F11}
Hat={F12}
\={}
Q=^q
W=^w
E=^e
R=^r
T=^t
Y={Backspace}
U={PgDn}
I={PgUp}
O={Backspace}
P={LButton}
@={}
LB={Home}
A=^a
S=^s
D=^d
F=^f
G=^g
H={left}
J={down}
K={up}
L={right}
Semicolon={}
:={Insert}
RB={End}
Z=^z
X=^x
C=^c
V=^v
B=^b
N={Backspace}
M={WheelDown}
,={WheelUp}
.={delete}
/={}
Backslash={}
Up={ASC 33194}
Down={ASC 33195}
Left={ASC 33193}
Right={ASC 33192}
LButton={ctrl down}{PgUp}{ctrl up}
MButton={MButton}
RButton={ctrl down}{PgDn}{ctrl up}
WheelUp={}
UWheeDown={}
PageUp={}
PageDown={}
Home={}
End={}
Delete={}
Bacspace={}
Enter={}
Escape={}
Hankaku={}
Tab={}
Capslock={}
Lwin={}
Rwin={}
Insert={}
Zabbix2.2.4をCentOS7でビルドしてみた


zabbixをちょっとビルドだけしてみた。
動作確認は出来ていない。

```bash:centos7
docker run -v /home/docker/host:/root -i -t tukiyo3/centos7qa-ja /bin/bash
```

```bash:zabbixをダウンロードしてから
mkdir ~/host && cd ~/host
tar xzf zabbix-2.2.4.tar.gz
cd zabbix-2.2.4
```

```bash:ビルドに必要なパッケージ
yum install -y \
  tar \
  sqlite-devel \
  libssh2-devel \
  mariadb-devel \
  net-snmp-devel \
  OpenIPMI-devel \
  curl-devel \
  unixODBC-devel \
  make
```

```bash:configure
./configure \
 --prefix=/opt/zabbix-2.2.4 \
 --with-ssh2 \
 --with-mysql \
 --enable-proxy \
 --enable-server \
 --enable-agent \
 --with-openipmi \
 --with-net-snmp \
 --with-libcurl \
 --with-iconv \
 --with-unixodbc
```

```bash:zabbixの実行にzabbixユーザが必要
adduser zabbix
/opt/zabbix-2.2.4/sbin/zabbix_server
```

```bash:commit
docker commit   -a "tukiyo3 <tukiyo3@gmail.com>" -m "add:zabbix2.2.4" \
  cc99ea67e2c4 tukiyo3/centos7qa-ja-zabbix2.2.4

```

```bash:commitしたimageから起動
docker run -v /home/docker/host:/root -i -t tukiyo3/centos7qa-ja-zabbix2.2.4 /bin/bash
/opt/zabbix-2.2.4/sbin/zabbix_server
```
Ubuntu 14.04 でRbenv + Ruby 2.1.2をインストールにreadlineエラーが出た

下記のコマンドでRubyをインストールすると、
```
$ CONFIGURE_OPTS="--disable-install-doc" rbenv install 2.1.2
```

コンパイルエラーが出ました。

```
readline.c: In function ‘Init_readline’:
readline.c:1977:26: error: ‘Function’ undeclared (first use in this function)
     rl_pre_input_hook = (Function *)readline_pre_input_hook;
                          ^
readline.c:1977:26: note: each undeclared identifier is reported only once for each function it appears in
readline.c:1977:36: error: expected expression before ‘)’ token
     rl_pre_input_hook = (Function *)readline_pre_input_hook;
                                    ^
readline.c: At top level:
readline.c:634:1: warning: ‘readline_pre_input_hook’ defined but not used [-Wunused-function]
 readline_pre_input_hook(void)
 ^
make[2]: *** [readline.o] Error 1
make[2]: Leaving directory `/tmp/ruby-build.20140707103533.10631/ruby-2.1.0/ext/readline'
make[1]: *** [ext/readline/all] Error 2
make[1]: Leaving directory `/tmp/ruby-build.20140707103533.10631/ruby-2.1.0'
make: *** [build-ext] Error 2

```

調べたところ、この回避策を見つけました。

```
$ CONFIGURE_OPTS="--disable-install-doc" rbenv install 2.1.2
```

参考：https://github.com/sstephenson/ruby-build/issues/584
Zabbix 2.2でMySQLを監視する

はじめに
=======

Zabbix 2.2のソースには「conf/zabbix_agentd/userparameter_mysql.conf」が含まれているので、これを使ってMySQLを監視します。本家が公開している[RPMパッケージ](http://repo.zabbix.com/zabbix/2.2/rhel/6/ " Zabbix SIA.が公開しているRed Hat Enterprise Linux 6用のRPMパッケージ")のzabbix-agentにも「/etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf」として同梱されています。

手順
====

1. Zabbixエージェントを適切に設定する（ここでは説明しない）
2. MySQLにZabbixエージェント用のユーザーを作成する
3. 「userparameter_mysql.conf」で指定されているHOMEに「.my.cnf」を作成する
4. Zabbixエージェントを再起動する
4. zabbix_getなどで挙動を確認する

詳細な手順
---------

### 2. MySQLにZabbixエージェント用のユーザーを作成する

MySQLにユーザーを追加します。ユーザー名「zabbix」、パスワードが「zbxpasswd」の場合は以下のような感じで。

```
mysql> grant process on *.* to 'zabbix'@'localhost' identified by 'zbxpasswd';
```

### 3. 「userparameter_mysql.conf」で指定されているHOMEに「.my.cnf」を作成する

「userparameter_mysql.conf」をみるとHOMEは以下のように設定されています。

```:/etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf
HOME=/var/lib/zabbix
```

「/var/lib/zabbix/.my.cnf」を作成し、MySQLのユーザー名とパスワードを指定する。「/var/lib/zabbix」ディレクトリーがない場合はそれも作成すること。また、「/var/lib/zabbix/.my.cnf」にはパスワードを記載するので、権限は400あたりにしておくとよい。

例えば次のような手順になる。

```shell-session
$ sudo mkdir /var/lib/zabbix
$ sudo vim /var/lib/zabbix/.my.cnf
$ sudo chmod 400 /var/lib/zabbix/.my.cnf
$ sudo chown -R zabbix:zabbix /var/lib/zabbix
```

「/var/lib/zabbix/.my.cnf」はこんな感じに記述する。

```mysql
[client]
user = zabbix
password= zbxpasswd

```

### 5. zabbix_getなどで挙動を確認する

Zabbixサーバー側からzabbix_getで挙動を確認し、値が取得できていればOK。

> $ zabbix_get -s IPアドレス -k mysql.status[Com_insert]
167105
$
Dockerでcommitしてみる


![docker_logo.png](https://qiita-image-store.s3.amazonaws.com/0/45249/63102bca-140a-25bb-0f49-c1971bd50b0d.png "docker_logo.png")

[以前](http://qiita.com/mattuso/items/90a5d1490b38903b30ad)Docker上でCentOSを動かしてみましたが、今度はcommitして新しいイメージを作成してみる。

## コンテナ起動

まずはコンテナを起動する。名前は`default`とします。

```bash
core@core-01 ~ $ docker run -i -t -d --name="default" centos /bin/bash
```

起動確認

```bash
core@core-01 ~ $ docker ps

CONTAINER ID  IMAGE          COMMAND    CREATED        STATUS        PORTS  NAMES
55082e783e5f  centos:latest  /bin/bash  2 seconds ago  Up 1 seconds         default
```

## コンテナに接続

`docker attach`コマンドでコンテナに接続します。
接続先の指定は **コンテナID**, **コンテナ名** どちらでも可能。

```bash
core@core-01 ~ $ docker attach default

bash-4.1#
```

接続したら検証用にApacheをインストールしておく。

```bash
bash-4.1# yum -y install httpd
```

## コミット（イメージ作成）する

まずは`ctl+p``ctl+q`でコンテナから抜ける。

`docker commit`コマンドで`default`というコンテナを`httpd`という名前のイメージとして保存する。

```bash
core@core-01 ~ $ docker commit default httpd
```

`docker images`コマンドで確認すると、`httpd`という名前のイメージができていることが確認できる。

```bash
core@core-01 ~ $ docker images

REPOSITORY  TAG     IMAGE ID      CREATED         VIRTUAL SIZE
httpd       latest  097a51f5048a  35 minutes ago  205.4 MB
centos      latest  0c752394b855  3 weeks ago     124.1 MB
```

同一リポジトリに`httpd`タグを付与して管理する場合には次のようにオプションを指定する。

```bash
core@core-01 ~ $ docker commit default centos:httpd
```

```bash
core@core-01 ~ $ docker images

REPOSITORY  TAG     IMAGE ID      CREATED         VIRTUAL SIZE
centos      httpd   78620a15284f  4 seconds ago   205.4 MB
centos      latest  0c752394b855  3 weeks ago     124.1 MB
```

## イメージを削除する

`docker rmi`コマンドでイメージを削除する。
ちなみに、起動中のコンテナで使用しているイメージは削除できないみたいです。

```bash
core@core-01 ~ $ docker rmi httpd

Untagged: httpd:latest
Deleted: 097a51f5048a2dd7a6aa6776feb36c2bfaaba963ec9259bba1bf840b80d446c7
```

## まとめ

Docker Commitする場合は `docker commit <コンテナ名/ID> <イメージ名>:<タグ名>` で行う。
さくらVPSのサーバー情報(IPとGatewayとDNS)を取得するスクリプト

メモです。

#Script
```shell-session
#!/bin/bash

ip_addr=""
passwd=""

curl=$(which curl)
lcurl=""

cookie_file="cookie"

vps_init() {

  if [ -z $ip_addr ]; then
    echo -n "IP Addr: "
    read ip_addr
  fi

  if [ -z $passwd ]; then
    echo -n "Password "
    stty -echo
    read passwd
    stty echo
  fi

  echo -e "\n"
}

login() {
  vps_init
  url="https://secure.sakura.ad.jp/vpscontrol/"
  token=$($curl -L $url | grep Token | sed -e 's/.* value="\(.*\)".*/\1/g')
  
  $curl -L -c $cookie_file \
      -F "Submit=index" \
      -F "Token=$token" \
      -F "ipaddress=$ip_addr" \
      -F "password=$passwd" \
      $url > /dev/null

  if [ ! -e $cookie_file ]; then
    echo "Login failure."
    finish -1
  fi

  name=$(cat $cookie_file | grep secure.sakura.ad.jp  |awk '{print $6}')
  val=$(cat $cookie_file | grep secure.sakura.ad.jp  |awk '{print $7}')

  

  lcurl="eval $curl -L -b \"$name=$val\""

}

generate_config() {
  url="https://secure.sakura.ad.jp/vpscontrol/main/"

  tmp=$($lcurl \
      -F "Token=$token" \
      $url | egrep "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" | sed -e "s/[^0-9\.,]//g" | tr ',' ' ')

  ip=$(echo $tmp | awk '{print $1}')
  gateway=$(echo $tmp | awk '{print $3}')
  dns1=$(echo $tmp | awk '{print $4}')
  dns2=$(echo $tmp | awk '{print $5}')
  cat <<EOF > ./vps-config
#VPS Config
VPS_IP="$ip/23"
VPS_GATEWAY="$gateway"
VPS_DNS1="$dns1"
VPS_DNS2="$dns2"
EOF
  

}

finish() {

  rm -f $cookie_file

  exit $1
}

main() {
  login
  generate_config
  finish 0
}

main
```
ぼくのGruntfile

Gruntfileを晒そうかと思います。
スタイルはSsss+Compassを使用しています。


## プロジェクト構造
|- Gruntfile.coffee
|- package.json
|- config.rb
|- js
|- css
|- src
　|- scss
　|- js

## Gruntfile
* ソースがスッキリするのでcoffee形式で記述
* CSSの圧縮と出力先については、Compassを使用しているので、config.rbで設定
* ライブリロードを有効にしているので、別途[Chromeエクステンション](https://chrome.google.com/webstore/detail/livereload/jnihajbhpnppcggbcgedagnkighmdlei)をインストールしている

``` coffee:Gruntfile.coffee
'use strict'
module.exports = (grunt) ->

    grunt.initConfig
    
        pkg: grunt.file.readJSON 'package.json'
        
        watch:
            options:
                livereload: true
            js:
                files: ['src/js/*.js']
                tasks: ['uglify']
            compass:
                files: ['src/scss/**/*.scss']
                tasks: ['compass']
        
        uglify:
            myscript:
                files: [
                    expand: true,
                    cwd: 'src/js/',
                    src: ['**/*.js'],
                    dest: 'js/',
                    ext: '.min.js'
                ]
        
        compass:
            dist:
                options:
                    config: 'config.rb'
                    force: true
    
    grunt.loadNpmTasks 'grunt-contrib-watch'
    grunt.loadNpmTasks 'grunt-contrib-uglify'
    grunt.loadNpmTasks 'grunt-contrib-compass'
    
    grunt.registerTask 'default', ['watch']

```
fluentdでクリックログ収集してます

fluent-agent-liteでリンククリックのログ（サーバ２台）を集計サーバに送りつけて、
td-agentで、mysqlに突っ込むということをしています。

fluentd便利っすね。confファイル書くだけでログ集めてくれるんだから

業務なのであまり公開はしたくないのですが、ちょっと詰まってるところもあり、公開します
ご教示いただけますと幸いです。。

設定は以下です

```lang:tfluent.conf
<match panda.koala_startclick.**>
 type copy
<store>
  type file_alternative
  path /XXXXXXXXXXXXXXXXXXX_%Y%m%d
  compress gzip
  buffer_type file
  buffer_chunk_limit 256m
  output_include_time false
  output_include_tag false
  output_data_type attr:message
  add_newline true
</store>
<store>
 type parser
 remove_prefix panda
 add_prefix parsed
 format ltsv
 time_format %d/%b/%Y
 key_name message
</store>
</match>
<match parsed.koala_startclick.**>
 type copy
<store>
  type mysql_bulk
  host XXXXXXXXXXXXXXXXXXX
  database XXXXXXXXXXXXXXXXXXX
  username XXXXXXXXXXXXXXXXXXX
  password XXXXXXXXXXXXXXXXXXX
  column_names linkname,uniqid,datetime,useragent,useragenttype,deviceid,refererurl,serviceid,locationurl,ip
  table StartLogRawData
  on_duplicate_key_update true
  on_duplicate_update_keys linkname,uniqid,datetime
  flush_interval 60s
</store>
</match>


<match panda.koala_endpoint.**>
 type copy
<store>
  type file_alternative
  path /XXXXXXXXXXXXXXXXXXX_%Y%m%d
  compress gzip
  buffer_type file
  buffer_chunk_limit 256m
  output_include_time false
  output_include_tag false
  output_data_type attr:message
  add_newline true
</store>
<store>
   type parser
   remove_prefix panda
   add_prefix parsed
   format ltsv
   time_format %d/%b/%Y
   key_name message
</store>
</match>
<match parsed.koala_endpoint.**>
 type copy
 <store>
  type mysql_bulk
  host XXXXXXXXXXXXXXXXXXX
  database XXXXXXXXXXXXXXXXXXX
  username XXXXXXXXXXXXXXXXXXX
  password XXXXXXXXXXXXXXXXXXX
  column_names uniqid,datetime,useragent,useragenttype,deviceid,serviceid,ip,resultpoint,resultid,resultcount,resultanother1,resultanother2
  table EndPointRawData
  on_duplicate_key_update true
  on_duplicate_update_keys uniqid,datetime
  flush_interval 60s
 </store>

</match>


<match panda.koala_startclick_inner.**>
 type copy
<store>
  type file_alternative
  path /XXXXXXXXXXXXXXXXXXX_%Y%m%d
  compress gzip
  buffer_type file
  buffer_chunk_limit 256m
  output_include_time false
  output_include_tag false
  output_data_type attr:message
  add_newline true
</store>
</match>
```

これですが、１０日ほどで、何故かtd-agentが新しいログを受け付けなくなり、td-agentの再起動で治ります。
その際に/var/log/td-agent/td-agent.logには何も吐かれておりません

いま、以下の試みをしています。
fluentdは基本メモリ上で動作します。
そのメモリがあふれてしまい、次の処理ができなくなってるのではないか？？という仮説を立てました。
そのため、buffer_typeをファイルに変えました(2014/07/07)

＊ちなみに、stdoutプラグインを開発環境で試してるのですが、特に処理のログも出ないです。

参考にしたのは以下
http://blog.glidenote.com/blog/2014/01/28/td-agent-queue-size-exceeds-limit/
http://docs.fluentd.org/ja/articles/out_file
http://tech-sketch.jp/2013/05/fluentd-buffer.html

これで治るのかちょっと定かではないので、様子見なのですが。。。。


# 色々わかったこと！

##その１

まず、ログが出ないのは、in_multiprocessプラグインのバグ。外したら出ました
v11で、マルチプロセス標準搭載らしいですが、ログは出るんですかね。。。

##その２

よく止まるのは、ファイルオープンの上限を超えているから。
http://docs.fluentd.org/ja/articles/before-install

こちらを実際本番かどうする前にやらないとダメです
コマンドプロンプト起動時、自動的に文字コードをUTF-8にして日本語もちゃんと表示できるようにする方法

Windows7 でのみ動作確認済。XPとかだとうまくいかないかもっぽぃらしい。

# 前提知識
* コマンドプロンプトのデフォルト文字コードは Shift_JIS
* `chcp` コマンドで文字コードを変更できる
 * ただし、文字コードを変更しただけでは日本語を表示できない
 * 文字コードを変更しても、コマンドプロンプトを再起動するとデフォルトに戻ってしまう
* そのため、以下2ステップを行う必要がある
 1. 文字コードが UTF-8 のときに使用するフォントを、日本語対応のものにする
 1. コマンドプロンプト起動時、自動的に文字コードが UTF-8 になるよう設定する

# 実際の手順
## Step:1 使用フォントを日本語対応のもの(MSゴシック)にする (*1)
1. コマンドプロンプトを実行する
2. プロパティ ＞ フォント ＞ フォント で 【MSゴシック】を選択する
3. コマンドプロンプトを終了する

## Step:2 起動時に文字コードが UTF-8 になるようにする

### Step:2-A レジストリを使う方法
1. 適当な場所に、以下内容のバッチファイルを用意する

```bat:sample.bat
chcp 65001
```

2. `regedit` 等で、レジストリの以下どちらかのキーを開く
 * `HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor`
 * `HKEY_CURRENT_USER\Software\Microsoft\Command Processor`
3. 上記キーに以下項目を作成する (*2)
 * 名前：`AutoRun`
 * 値： *(用意したバッチファイルのパス)*

### Step:2-B レジストリを使わない方法
1. 適当な場所に、コマンドプロンプトのショートカットを作成する
2. ショートカットのプロパティ ＞ ショートカット ＞ リンク先 に以下を追記する (*3)
 * `/K "chcp 65001"`
3. 以降、コマンドプロンプトはこのショートカットから実行するようにする

# Shift_JIS に戻したいとき
* コマンドプロンプトで以下コマンドを実行する
 * `chcp 932`

# 注釈
* (*1)
 * 以降、文字コードが UTF-8 の状態で プロパティを開くと以下のエラーメッセージが出るようになるが、無視する。

 > ポイント サイズには 5 から 72 を指定してください。

* (*2)
 * ここで指定したバッチファイルは、コマンドプロンプト起動時に毎回最初に実行される。
* (*3)
 * 起動時パラメータ。`/K` 以降に指定されたコマンドを実行する。

# 詳しい解説が書いてあるとこ
 * http://technet.microsoft.com/ja-jp/library/cc771320%28v=WS.10%29.aspx
 * http://msdn.microsoft.com/en-us/library/dd317756%28VS.85%29.aspx
 * http://www.fine-view.com/jp/zatsugi/editor_console.html
toggleClassはCSSの設定を上書きしない

初学者（水蕗おじさん）がひっかかったので、備忘録として・・・。
これでは動きません。

```html:body部
<body>
<div class="base">
<p class="dish">お皿</p>
</div>
</body>
```
```css:CSS部
.dish {
	padding: 10px;
	background-color: #86C793;
}
.base {
	padding: 10px;
	background-color: #FFEF6D;
}
.bright {
	background-color: #D7ED83;
}
```

```js:JavaScript部
jQuery(function($){
	$(".dish").bind("mouseenter mouseleave", function() {
		$(this).toggleClass("bright");
	});
}
```
.dishに対して.brightでbackground-colorの重ねがけを狙っても動きません。
.css()を使ってください。

**.addClassや.removeClassも同様です。**
canvasサイズをwindowサイズにする方法

canvasはcssでwidth:100%;とかheight:100%;とか使えないみたいなので、jsでwindowのresizeイベントで都度widthとheightを設定していく。
※canvasのcssではなく属性のwidthとheightで直接設定しないとダメみたい。
※ところどころjQueryも使用(楽なので)。

```js:javascript
window.onload = function(){

	// stageを生成
	// ※canvasタグのid名を引数に指定
	var stage = new createjs.Stage('canvas');
	
	// windowのリサイズ設定
	var id;
	$(window).on('resize', function(e){
		clearTimeout(id);
		id = setTimeout(function(){
			stage.canvas.width = $(e.target).width();
			stage.canvas.height = $(e.target).height();
		}, 100);
	});
	$(window).trigger('resize');

}
```

resizeイベントの度に再設定するとパフォーマンス的にアレみたいなので、setTimeoutを使用して設定頻度を調整している。(とりあえず100msにしてみた。)
CreateJSでcanvasに画像を読み込み表示する方法

CreateJSを用いてcanvasに画像を読み込んで表示する方法です。

```js:javascript
window.onload = function(){

	// Stageオブジェクトを作成
	// ※canvasタグのid名を引数に指定
	var stage = new createjs.Stage('canvas');
	
	// Bitmapオブジェクトを作成
	// ※画像ファイルパスを引数に指定
	var bitmap = new createjs.Bitmap('images/image_1.png');
	
	// stageにBitmapオブジェクトを配置
	stage.addChild(bitmap);
	
	// canvasの描画設定
	// ※30fpsで描画を繰り返す
	createjs.Ticker.setFPS(30);
	createjs.Ticker.addEventListener('tick', function(){
		stage.update();
	});

}
```

とりあえず描画のfpsは30にしておきました。