OmniAICreator/Qiita-1.07M huggingface dataset:
Spring Data JPA の設定時エラー

メモ程度に書きます。

Repositoryのbase-packageを設定しようと書くとどうしてもWarningが出る。
設定は以下のようにした。

```:config
<jpa:repositories base-package="jp.xxx.yyy.repository" entity-manager-factory-ref="entityManagerFactory" />
```

```:warning
Referenced bean 'jpaMapppingContext' not found
```

結局SpringのバージョンとSpringDataJPAのバージョンが合わない？
SpringDataJPAのバージョンを1.6.0→1.5.2に変更するとWarningは消えた。
むむむ。。。
npm-scripts実行時の環境変数について

Grunt使うほどでもないんだけどなー、でもnpm-scriptsに書くには横に長くなるしなー、と思っていたら[アドバイス](https://twitter.com/yosuke_furukawa/status/473001593307025408)をもらいました。

で、[オレ的Gruntに対する最新の気持ち](http://yosuke-furukawa.hatenablog.com/entry/2014/02/19/112931)の`bin/build.sh`というところを見たらシェルスクリプトに直に`browserify`と書いてあって、あれ、なんで`browserify`直接実行できるの、と思ってnpm-scripts実行時の環境変数について調べてみたりしました。

```json:package.json
{
  "scripts": {
    "start": "env"
  }
}
```

調べてみました、と言ってもこれだけなのですけど。

```bash:Terminal
$ npm start
```

で出力させてみると、`PATH`の先頭に`/Users/sasaplus1/.nodebrew/node/v0.10.28/lib/node_modules/npm/bin/node-gyp-bin`（これは`nodebrew`を使ってるからかな）と`/Users/sasaplus1/path/to/package/node_modules/.bin
`が追加されてたり、`npm_config_*`が追加されてたりしました。

`PATH`に`/node_modules/.bin`が追加されてたからローカルにインストールしたモジュールでも`scripts`内ではモジュール名だけでコマンドが実行できてたんですね。（`npm-scripts`を実行するときnpmがローカルにインストールしたモジュールのパスを勝手に解決してるのだと思っていた）

あと`npm_config_*`系の環境変数も渡されるので`package.json`にいろいろ設定値を書いて、シェルスクリプトに渡す、なんて使い方もできますね。使い方によってはかなり便利なんじゃないかなーと思ったのでした。まる。

---

ちなみに

```bash:Terminal
$ npm bin
```

とすると、そのディレクトリから近い`node_modules/.bin`までの絶対パスを出力してくれる、というのを思い出したので一応。
ちゃんとした`node_modules/.bin`までのパスだったり、`node_modules`がない場合はカレントディレクトリに対して`node_modules/.bin`を付加しただけのパスだったりするみたい？
徹底攻略PDFオープンデータ。PDFMinerで始めるPDFテキスト分析。

#紹介
オープンデータは、
政府データを、全ての人が自由に加工し、自由に再配布し、自由に商用利用できるようにしていこうとする政治活動です。
現在、政治の透明性や経済の活性化の観点から注目されており、
日本政府も実際にデータを出し始めています。

[ -> 参考サイト：Open DATA METI | 経済産業省のオープンデータカタログサイト](http://datameti.go.jp/?lang=ja)


ただし、日本のオープンデータの問題として、
☆１のオープンデータが出てくるケースが多い事が挙げられます。
オープンデータは、そのオープン性により５つ星で評価されます。

![5star-steps.png](https://qiita-image-store.s3.amazonaws.com/0/38787/bd7cc4e1-070d-af5e-23d0-0876ed9078bc.png)

☆１のオープンデータ、つまりPDFは、
構造化データではない為に最もクローズドとされています。

しかし、技術に疎い公務員の方に機械可読性の重要性を説くことは難しく、
それを理解して貰えたとしても機械可読性の為の予算を割り振って貰えるかは微妙です。
現実問題として、PDFに対峙する必要があるのです。

その為のツールとして、PDFMinerが面白いです。

PDFMinerとは、PDFから主に文章情報を取得・解析する為のPythonライブラリです。
[Googleトレンド](http://www.google.co.jp/trends/explore#q=PDFMiner)を見ますと、2011年頃から注目されているようです。

PDFからTXT・HTMLへコンバートするアプリは既に存在しますが、
PDFMinerはPDFページの構成要素をツリー構造で管理する機構
（ex.LTPage->LTTextBox->LTTextLine->LTChar,LTText）
を持っており、より細かな調整ができます。

より細かな調整ができるので、例えば、
各省庁の定型的なPDFをTXTにコンバートする為のプログラムを用意するなどができると思います。

#インストール手順
PDFMinerのインストールは、下記の手順で行います。

1.Python(2.4 <= version < 3.0)をインストールする。
2.[ソース](http://pypi.python.org/pypi/pdfminer/)をダウンロード・解凍する。
3.setup.pyをコンソール(端末)で実行する。

```
python setup.py install
```

4.インストール後の動作確認をする。

```
pdf2txt.py samples/simple1.pdf

#コマンド実行後、Hello Worldが連続表示されたらOK。
#　-> サンプルPDFからテキストを抽出する事に成功している。
```

5.CJK統合漢字を扱うための追加インストールをする。

```
make cmap
python setup.py install
```

　※Win環境はmakeを持たないので、こちらを代わりに実行する。

```
mkdir pdfminer\cmap
python tools\conv_cmap.py -c B5=cp950 -c UniCNS-UTF8=utf-8 pdfminer\cmap Adobe-CNS1 cmaprsrc\cid2code_Adobe_CNS1.txt
python tools\conv_cmap.py -c GBK-EUC=cp936 -c UniGB-UTF8=utf-8 pdfminer\cmap Adobe-GB1 cmaprsrc\cid2code_Adobe_GB1.txt
python tools\conv_cmap.py -c RKSJ=cp932 -c EUC=euc-jp -c UniJIS-UTF8=utf-8 pdfminer\cmap Adobe-Japan1 cmaprsrc\cid2code_Adobe_Japan1.txt
python tools\conv_cmap.py -c KSC-EUC=euc-kr -c KSC-Johab=johab -c KSCms-UHC=cp949 -c UniKS-UTF8=utf-8 pdfminer\cmap Adobe-Korea1 cmaprsrc\cid2code_Adobe_Korea1.txt
python setup.py install
```

#コマンドラインツール
PDFMinerには２つのコマンドラインツールが付いているようです。
一つは *pdf2txt.py* 。
指定したPDFをTXT/HTMLにコンバートします。

```
pdf2txt.py  -o output.txt input.pdf
```

もう一つは *dumppdf.py* 。
デバッグ用のツールで、擬似XML形式で指定PDFの指定コンテンツを出力します。
又、イメージ等の特定要素だけを抽出するのにも使えます。

```
dumppdf.py -a foo.pdf
```

詳しい仕様は[元記事](http://www.unixuser.org/~euske/python/pdfminer/#tools)をどうぞ。

#API
[APIの説明資料（英語）](http://www.unixuser.org/~euske/python/pdfminer/programming.html)のツリー図を読んだ上で、サンプルコードを読むと理解が深まります。
又、[より詳しい例示として紹介されているページ（英語）](http://denis.papathanasiou.org/2010/08/04/extracting-text-images-from-pdf-files/)もあるようです。
加えて、既に[日本語のブログ記事](http://boxheadroom.com/2009/03/22/python_pdfminer)もあったようです。

#つづく
それでは、さっそく使って行ってみましょう。
Enjoy it! Enjoy mining life!
bitbucketの(gitの)privateレポジトリにCIツールからアクセス

# 秘密鍵を登録する
以下のコマンドでCIツール上でからbitbucketへのアクセスをする(gitコマンドを実行する)ユーザのssh鍵を生成する
(ここではjenkinsユーザを想定)

```
sudo -u jenkins ssh-keygen
```
ファイル名とパスフレーズを聞かれるのでファイル名は適当に、パスフレーズは何も入力せずにEnter.

すると以下のようなファイルが作成される
```
$ sudo -u jenkins cat ~/.ssh/id_rsa.pub 
ssh-rsa AAAAB3NzaC1yc2EAA196v2tBAAABAQD1wLrGbLc3AhF9Ch02cF7xDN4HZlVkmmbeEm7ayEHMFhMDe5zqd/8cc00G9bNdlpaVK25EIc/edzTNijgB/L1sSN1N48vUtXaLSerOQFvoeR1MevjRKYkedSAHITWc1Xeb7UKcebyK/ONshIO8mhT7dIqIvfvLigcAq5+oSH6oaoF4+FFBB2jnrAAAAsYGQiNk/GRAqnCsDnsxJxwKk/unU7uzjTHinCGfEeaCtRz4iDOsn9ox42oVFvS6C7JEw42Zkx2x3pZHPTluQiLf9jyddSyW3oMgvSVi+2wRE+dRKIlcl/5bqH6v4zXpWV/c3L6gGGYQ9p27p8iMMR4Kdqhz jenkins@ci-server
```

# privateリポジトリにssh公開鍵を登録
以下のURLにアクセスするとdeploy鍵が出来るため、ここに先ほど作成した公開鍵(ここではid_rsa.pub)の内容を登録する。
Labelは判別しやすい好きな名前、keyのフィールドは **スペースに注意して** 先ほどの内容を貼付ける
(言語設定などによって項目名は違う可能性あるので適宜読みかえること)

https://bitbucket.org/accountname/reponame/admin/deploy-keys

# CIツールにgitレポジトリを設定する
httpsのアドレスではなく、git@~を設定する

```
git@bitbucket.org:accountname/reponame.git
```

# status code:128でエラーが出る場合(jenkins)
ソースコード管理システムでGitを選択して、正しいURIを設定しても以下のようなエラーが表示される場合がある

```
Failed to connect to repository : Command "git ls-remote -h git@bitbucket.org:accountname/reponame.git HEAD" returned status code 128:
stdout: 
stderr: fatal: The remote end hung up unexpectedly
```

このエラーが出る場合、known_hostsに登録されていないためにエラーになるケースがある。
その場合は、CIツールの実行ユーザで一度適当なgitコマンドを実行してみる。
(cloneしてきたリポジトリはすぐに消して問題ない

```
sudo -u jenkins git clone git@bitbucket.org:accountname/reponame.git
Cloning into reponame...
The authenticity of host 'bitbucket.org (131.103.20.168)' can't be established.
RSA key fingerprint is 97:8c:1b:f2:6f:14:6b:5c:3b:ec:aa:46:46:74:7c:40.
Are you sure you want to continue connecting (yes/no)? *yes*
```

### ポート22が使えない場合
インフラの都合上FW外へのポート22がブロックされている場合、
bitbucketはssh over httpsをサポートしているのでURIを以下の形式で設定する

```
ssh://git@altssh.bitbucket.org:443/accountname/reponame/
```
ネタ帳。

# はじめに #
色々やりたいことが浮かぶものの、当然ながら思いついたタイミングですべて消化できないので備忘録的にここに書きためていく。
記事化したらここにリンクを貼っていく(かもしれない)。

# ネタリスト #
- **SplunkにTwitterデータを取り込んでなんとなく分析**
    
    ~~適当なキーワードでフィルタリングしたツイートから社畜とか見つけたい。~~
    →　TwitterのFilter APIでは日本語表現をほぼ引っ掛けられないのでテーマの見直し。(2014/06/08)

    [**SplunkにTwitterのデータをぶちこむ。**](http://qiita.com/t_nakayama0714/items/5cebde7f5e66083d5044)
    [**SplunkにTwitterのデータをぶちこむ(自分のタイムライン)。**](http://qiita.com/t_nakayama0714/items/2ac1ac4c1c58270b96f7)
    [**Splunkで自分のタイムラインをサクッと分析。**](http://qiita.com/t_nakayama0714/items/c2b78dcdf8bd61bbe3af)
    
    
- **オープンデータを適当に集めて分析**

    多分データ量が多いのでこっちはSplunkというよりはOSSチームでやりたい。

- **仮想化ソフトウェア比較**

    これまで日和ってVMware Playerしか使ってこなかったチキンですが、OpenStackもやるしXenやらVirtualBoxやらにも手を出してみたいと思います。ESXiも触らないとなぁ。

    → Vagrant用にVirtualBoxを導入してみましたが、まだ慣れない感じです。Vagrant + VirtualBoxで形になったら記事化します。(2014/06/08)

- **Vagrantとはなんぞや？**

    Chefとかの勉強と一緒に。

- **コンテナ的ななにか**

    Dockerとかですかねぇ。さっぱり触ったことない。

    → Linuxカーネルを共有してアプリ実行環境を効率的に構築する感じなので、基盤ソフトの一種ではあるけど、Docker使って何かやるってのは難しそう。現段階では優先度低め。(2014/06/08)

- **word2vecでなんJ語を解析**

    あんちべさんが艦これ語について分析やってたけど、そのノリでなんJ語やってみたい。

    [自然言語処理の最新手法"word2vec"で艦これ加賀さんから乳を引いてみる](http://antibayesian.hateblo.jp/entry/2014/03/10/001532)

- **Androidアプリ作る**

    アプリ作成はさっぱりやったことないので、勉強を兼ねてTwitterクライアントでも作ってみたい。
    そしてQiitaにはこんな素晴らしい教材が。
    
    [Android再入門 - Twitterクライアントを作ってみよう](http://qiita.com/gabu/items/70689560618f8e67e726)
扱いにくい階層の深いHashをフラット(1階層)にする


APIなどで階層の深いHashを受け取り、そのデータをアプリケーションで利用する際に、レスポンスデータがどんなデータパターンで来てもエラーにならないように設計するのは以外と難しいことがあるかと思います。

そこで、受け取った階層の深いHashをフラットにして1階層に変換する機能を作ったのでニーズがある方は使ってみてください。


```/lib/utility/hash_flatter.rb

#今回は/libにutilityフォルダを作成してそこに作りました。

class HashFlatter < Object
  def set(hash)
    @hash = hash
    @flatted = false
  end
  def flat
    @flatted = true
    @ret = {}
    @hash.each do |key, value|
      if value.class == Hash || value.class == ActiveSupport::HashWithIndifferentAccess
        value.each do |key_s, value_s|
          @ret = @ret.merge({key.to_s + '[' + key_s.to_s + ']' => value_s})
          @flatted = false
        end
      else
        if value.class == Array
          value.each_with_index do |element, index|
            @ret = @ret.merge ({key+'['+index.to_s+']' => element})
            @flatted = false
          end
        else
          @ret = @ret.merge ({key => value})
        end
      end
    end
  end
  def get
    @ret
  end
  def flatted?
    @flatted
  end

  def self.flat hash
    hf = HashFlatter.new
    hf.set hash
    hf.flat
    while hf.flatted? == false
      hf.set hf.get
      hf.flat
    end
    hf.get
  end

end

```

``` /config/appication.rb

#この一行を追加しておけば、いつでもHashFlatterが使えます。
config.autoload_paths += %W(#{config.root}/lib/utility)


```

実際に使ってみると、こんな感じに。

```
hash=
  {"name"=>"Toshiyuki Oka",
   "age"=>"29",
   "location"=>
   {"country"=>"Japan",
    "city"=>"Tokyo",
    "other"=>
    {"detail"=>"Minatoku-Minamiazabu",
     "building"=>"Furukawa building"
    }
   }
  }

HashFlatter.flat(hash)
=> {"name"=>"Toshiyuki Oka", "age"=>"29", "location[country]"=>"Japan", "location[city]"=>"Tokyo", "location[other][detail]"=>"Minatoku-Minamiazabu", "location[other][building]"=>"Furukawa building"}

```

どんなときに特に役に立つかというと、例えば、locationが必須データではなかったときに、

```
hash["location"]
=> nil

user.location.country = hash["location"]["city"]
=> NoMethodError: You have a nil object when you didn't expect it!
```

となってしまい、それを回避するためにはいくつかの条件分岐をしなければなりません。
もちろん可読性が低くなり、エラーの原因にもなります。

**HashFlatter**を使えば、hash["location"]がnilでも、

```
#hash["location"]=nilのときは下記のようになり、
hash["location"]
=> nil

HashFlatter.flat(hash)
=> {"name"=>"Toshiyuki Oka", "age"=>"29", "location"=>nil}


#hash["location"]!=nilのときは下記のようになるので、条件分けが必要ありません。
hash["location"]
=> {"country"=>"Japan", "city"=>"Tokyo", "other"=>{"detail"=>"Minatoku-Minamiazabu", "building"=>"Furukawa building"}}

HashFlatter.flat(hash)
=> {"name"=>"Toshiyuki Oka", "age"=>"29", "location[country]"=>"Japan", "location[city]"=>"Tokyo", "location[other][detail]"=>"Minatoku-Minamiazabu", "location[other][building]"=>"Furukawa building"}
```

以上、ニーズに合致する方がいたら使ってみてください！！
Android Studio で問題なくビルドできるのに cannot resolve symbol が急に荒ぶった時対処

チヤオ

なんかgradleとか問題無いはずなのにcannot resolve symbolで
ソースがいちいち赤くなってプチファッキンな時ってあるよね？

ビルドもできるし問題ないんだけどキモ過ぎるよね。

そんな時には File → Invalidate Caches / Restart...
出てきたボップアップのInvalidate and Restartで昔の素直なAndroid studio君に戻ってもらおう！

下記な感じで！
![スクリーンショット 2014-06-01 22.34.21.png](https://qiita-image-store.s3.amazonaws.com/0/5176/17757da6-5d35-f345-3912-d3ef6259d7e9.png)

![スクリーンショット 2014-06-01 22.31.22.png](https://qiita-image-store.s3.amazonaws.com/0/5176/a5ab883e-ad34-5d6e-8849-922be3795e14.png)


android studioのアイコンがダサいのでスプラッシュのシンプルなヤツベースのアイコンにすればいいのに
Ubuntu から Windows の共有フォルダをマウントして利用する

# HOWTO

## Windows 側

### 共有フォルダの準備

Linux からアクセスしたいフォルダを共有フォルダにしてください。

## Linux 側

### 必要なパッケージ

cifs-utils が入っていなければ入れてください。
samba-client を入れろという解説記事も多いみたいですが、単に Linux 側からマウントするだけなら cifs-utils で十分です。

```shell-session
$ sudo apt install cifs-utils
```

### 必要なディレクトリ

マウント先のディレクトリを作成してください。

```shell-session
$ sudo mkdir -p /mnt/windows
```

### コマンド

以下のコマンドでマウントしてください。

```shell-session
$ sudo mount -t cifs -o username=[username],password=[password] //[server]/[share] /mnt/windows
```

ここで

* [username][password] : Windwos のユーザ名およびパスワード
* [server] : Windows のサーバ名または IP アドレス
* [share] : 共有フォルダ名

となります。
なお、アカウントがドメインやワークスペースで管理されている場合、`domain=[domain_name]` をユーザー名・パスワードのあとに追加する必要がある、かもしれません。（というのは自分が確認した環境ではドメイン管理のユーザーでも記載せずにマウントできたことがあるので・・・。）

例えば、接続先 Windows 側のユーザ名 "mdstoy"、パスワード "qiita"、IPアドレス "192.168.0.1"、共有フォルダ名 "win_share" の場合のコマンドは以下のようになります。

```shell-session
$ sudo mount -t cifs -o username=mdstoy,password=qiita //192.168.0.1/win_share /mnt/windows
```

うまく行っていれば、`/mnt/windows` が共有フォルダを指しているはず！
JavaコレクションクラスのtoString()をスレッドローカル変数で補強する

toString()を読んでみる
==
`ArrayList`を直に`toString()`するような機会はデバッグ出力のときくらいにしかないものとは思いますが、その`toString()`、実際にコードを読んでみたことはあるでしょうか。
読んでみるとですね、単に内容をカンマ区切りで表示しているだけではないことがわかります。

```java:AbstractCollection.java
public String toString() {
    Iterator<E> it = iterator();
    if (! it.hasNext())
        return "[]";

    StringBuilder sb = new StringBuilder();
    sb.append('[');
    for (;;) {
        E e = it.next();
        sb.append(e == this ? "(this Collection)" : e);
        if (! it.hasNext())
            return sb.append(']').toString();
        sb.append(',').append(' ');
    }
}
```

カンマ区切り文字列化する前に要素が自分自身でないか判定して、もし自分自身を格納していたら "(this Collection)" とだけ出力しそこから先は再帰しないようにしているのです。

自分自身を格納していた場合に無限再帰に陥るのを回避しているのですね。

しかしちょっと待ってくれ。 **孫要素以下に自分自身を含んでいたらノーチェックで無限再帰突入**ではないか。ぬるいぞ`toString()`。

無限再帰を絶対阻止
==
一般論ですが、こういう回避処理は
1. 作らずに危険性を仕様に書く
2. 漏れなく回避できる処理を作り込む
のどちらかにしたいものです。中途半端な仕様がもっとも道具としてよろしくありません。
無論、今やろうとしていることは後者、漏れなく回避する方の処理です。

さて、この循環参照検出を書くにあたって難しいのは、要素を見たときそれが先祖の代で登場していたかをいかに判定するかであります。スタックフレームの中で同じオブジェクトの`toString()`を通過していないか、と言い換えることもできます。

では`getStackTrace()`でスタックフレームを取得すれば判定できるんじゃないかとすぐ思いつきますが、それは無理。`StackTraceElement`オブジェクトは通過してきたクラス・メソッド情報を含むのですが肝心のインスタンス情報を持たないのです。

そこで別案。静的なハッシュセットに`this`を、`toString()`開始時に登録、抜けるときに削除すれば通過してきたことの印にできます。

そんなことしたらマルチスレッド環境で記録が混乱する？ いえいえ、そんなときのための **スレッドローカル変数** です。スレッドローカル変数たる`java.lang.ThreadLocal`クラスは、`get()`, `set()`でオブジェクトを一個だけ出し入れできるのですが、問い合わせてきたスレッドごとに別々に格納していてくれます。

静的なハッシュセットはスレッドローカル変数に持っておいてもらえばスレッド間での衝突もありません。

というわけでコード。

```java
private static ThreadLocal<Set<Object>> stackedObjectsContainer = new ThreadLocal<>();

@Override
public String toString() {
    Iterator<E> it = iterator();
    if (! it.hasNext())
        return "[]";

    Set<Object> stackedObjects = stackedObjectsContainer.get();
    if (stackedObjects == null) {
        stackedObjects = new HashSet<Object>();
        stackedObjectsContainer.set(stackedObjects);
    }
    stackedObjects.add(this);
    try {
        StringBuilder sb = new StringBuilder();
        sb.append('[');
        for (; ; ) {
            E e = it.next();
            sb.append(stackedObjects.contains(e) ? "(recursion)" : e);
            if (!it.hasNext())
                return sb.append(']').toString();
            sb.append(',').append(' ');
        }
    } finally {
        stackedObjects.remove(this);
    }
}
```

このコードそのものより、スレッドローカル変数の存在を知っていることの方が役に立つことは多いと思います。お見知りおきを。
[tmlib.js]要素を複数作るときはgroupを作ると便利

# 要素を複数作るときはgroupを作ると便利

敵とかエフェクトとかなんもかんも`addChildTo(this)`してると、管理用のメンバが増えてややこしくなる。

```js
tm.define("TestScene", {
    superClass: "tm.app.Scene",
    
    init: function() {
        this.superInit();

        this.enemys = []; // これがあんまり好きくない

		for (var i=0, len=10; i<len; ++i) {
			var enemy = tm.display.RectangleShape()
				.addChildTo(this);
			this.enemys.push(enemy);
		}

		// 全体になにかする
		this.enemys.each(function (l) {
			l.x += 100;
		});
    },
});
```

そこで、まとめる用グループを作っとけばいい感じになる。

```js
tm.define("TestScene", {
    superClass: "tm.app.Scene",
    
    init: function() {
        this.superInit();
        this.fromJSON({
            children: {
                enemyGroup: "tm.display.CanvasElement",
            },
        });

        for (var i=0, len=10; i<len; ++i) {
            var enemy = tm.display.RectangleShape()
                .addChildTo(this.enemyGroup);
        }

        // 全体になにかする
        this.enemyGroup.children.each(function (l) {
            l.x += 100;
        });
    },
});
```

ついでに、`for`文かくのも面倒なので、こうするともっとすっきりする。

```js
tm.define("TestScene", {
    superClass: "tm.app.Scene",
    
    init: function() {
        this.superInit();
        this.fromJSON({
            children: {
                enemyGroup: "tm.display.CanvasElement",
            },
        });

        (10).times(function () {
            var enemy = tm.display.RectangleShape()
                .addChildTo(this.enemyGroup);
        });

        // 全体になにかする
        this.enemyGroup.children.each(function (l) {
            l.x += 100;
        });
    },
});
```

というメモでした。

ちなみに、`times`っていう便利関数は[tmlib.js](http://phi-jp.github.io/tmlib.js/)のもので、標準じゃないのでご注意。
Dstatのプラグインの書き方

[Dstat](http://dag.wiee.rs/home-made/dstat/)はメジャーなツールですが、プラグインの書き方についてはあまりドキュメントがなかったので、ここに書いてみようと思います。

## Hello, World!
`dstat_hello_world.py`を作って、(CentOSの場合)/usr/share/dstat/にコピーします

```py
class dstat_plugin(dstat):
    def __init__(self):
        self.name   = 'hello_world'
        self.type   = 'f'
        self.width  = 5
        self.scale  = 1000
        self.vars   = ('hello', 'world')

    #def check(self):
    #    # Check anything

    def extract(self):
        self.val['hello'] = 1
        self.val['world'] = 10000
```

`dstat  --hello-world`を実行すると以下が出力されます。

```
hello_world
hello world
1.00  10.0k
1.00  10.0k
1.00  10.0k
...
```

## 解説
`extract`が一定時間ごとに呼び出されるので、その時の値をセットすればdstatがよきにはからってくれます。

また`/usr/share/dstat/*.py`のプラグインが参考になると思います。

以下はソースコードからの推測ですが…(間違ってたらごめんなさい)

* self.width
    * 表示時の文字列の幅です。5〜7ぐらいがレイアウトをぶちこわさない感じです

* self.type: 値の型
    * `s`: 文字列
    * `i`: Integer (たぶん)
    * `d`: Integer (たぶん)
    * `f`: float
    * `b`: byte

* self.scale
    * 1000とか1024を設定しておくと、その単位で`1k`とか`1m`みたいな表示にしてくれます

* オプションは`DSTAT_MYSQL_USER`みたいな環境変数で渡すのがお作法のようです
    * オプションは`check`で検証して、間違っていたら例外を投げます
最近使っているAndroid Studio Plugin


[Android Studioおすすめプラグイン5選](http://rejasupotaro.github.io/2014/05/07/46.html)に触発されて､最近使っているAndroid Studio Pluginを挙げてみます｡

Andorid Studio(IntelliJ)は基本的に高機能なので､vimとかみたいにガシガシPluginを追加していくイメージはないですが､いくつかは入れると便利です｡Setting→Plugins→Browse Repositoriesから検索･インストールできます｡

### IdeaVim

https://github.com/JetBrains/ideavim

まずはこれを入れないと始まりません｡`~/.ideavimrc`に`.vimrc`相当の設定を記述する事ができます｡

### ADB Idea

https://github.com/pbreault/adb-idea

adbコマンドをAndroid Studio上から実施できます｡

### Genymotion

http://plugins.jetbrains.com/plugin/7269?pr=idea

Genymotionのエミュレータ起動をAndroid Studio上から実施できます｡

### Crashlytics

http://try.crashlytics.com/sdk-android/

crashlyticsというクラッシュログの収集サービスを利用する場合には､Android StudioのPluginを入れる必要があります｡

### Eclipse Code Formatter

https://github.com/krasa/EclipseCodeFormatter

Android Studioは基本的に便利サイコーですが､たまにバグを踏む事もあるし､大勢で開発している場合にはEclipseとの併存をせざるを得ない場合もあります｡そういう時にformatterとかは共通のものを利用したいので､このプラグインを使えばEclipseのフォーマッタをAndroid Studio上で利用する事ができます｡

### Markdown

http://plugins.jetbrains.com/plugin/5970?pr=phpStorm

README等markdownでドキュメントを記述する際に､シンタックスとpreview機能を利用できるようになります｡

### Android Holo Colors Generator
https://github.com/jeromevdl/android-holo-colors-idea-plugin

![](https://camo.githubusercontent.com/c8b23e6a546e50717b079991ce2cad42171c97a6/68747470733a2f2f7261772e6769746875622e636f6d2f6a65726f6d6576646c2f616e64726f69642d686f6c6f2d636f6c6f72732d696465612d706c7567696e2f6d61737465722f6f746865722f686f6c6f636f6c6f7273696465612e706e67)
Holo Styleを自動生成してくれます｡便利｡

### android-parcelable-intellij-plugin

https://github.com/mcharmas/android-parcelable-intellij-plugin

Parcelableを自動生成してくれます｡便利｡

![](https://github.com/mcharmas/android-parcelable-intellij-plugin/raw/master/screenshot.png)

### ButterKnifeZelezny

レイアウトファイルからメンバ変数とアノテーションを自動生成してくれれっぽいです｡
![](https://github.com/inmite/android-butterknife-zelezny/raw/master/img/zelezny_animated.gif)

### otto-intellij-plugin

https://github.com/square/otto-intellij-plugin

イベントバスのottoを利用している時に､イベントオブジェクトとレシーバ間を行き来できるようになります｡

![](https://github.com/square/otto-intellij-plugin/raw/master/images/produce-to-subscribe.gif)


### dagger-intellij-plugin

https://github.com/square/dagger-intellij-plugin

これは使った事ないのですが､軽量DIで有名なDaggerのプラグインで`@Inject`と`@Provides@`間を行き来できるようです｡Dagger利用者の方は利用してみてはいかがでしょうか｡

![](https://github.com/square/dagger-intellij-plugin/raw/master/images/inject-to-provide.gif)

以上です｡
Android StudioはジャバでPluginを開発できますが､特にドキュメントとかはなくて勝手にIntelliJ CEのコード読んで作れみたいな感じで厳しいので､上記のコードを読む事であなたもプラグインを書けるようになるかもしれません｡
Vimで括弧の補完→改行してインデント


Vimで閉じ括弧補完といえば `inoremap { {}<Left>` のようにやると思うけど、

<span style="font-size: 22px; font-weight:bold;">俺は *某崇高なテキストエディタ* のような括弧補完がやりたいんだ！</span>

というわけで、以下を `.vimrc` に書けばOK

```vim:.vimrc
inoremap {<Enter> {}<Left><CR><ESC><S-o>
inoremap [<Enter> []<Left><CR><ESC><S-o>
inoremap (<Enter> ()<Left><CR><ESC><S-o>
```

これで、

```php
<?php
function test() <カーソル>
```

<カーソル>位置で `{ + Enter` を押せば

```php
<?php
function test() {
	<カーソル位置>
}
```
となる。
1年ほどSublimeに浮気して戻って来たけどやっぱVimたんかあいいよ（最低）
Flashからcocos2d-xに変換するツールをつくた

#前置き
UIを作れて、
アニメーションも作れて、
Mac , Winどっちでも実行可能で、
iOSもAndroidも対応出来るcocos2d-xの良さを活かして、
コマンドラインやプログラム分からない人でも実行出来るようにしたいと思ってGUI作って、
割とスタンダードなAdobe Flashで出来れば外注だって行ける…と思って…。
(正直この辺詳しくないですけど）

そんな感じでなんとなーく作っていた
Flashからcocos2d-xに変換するツールをgithubに公開しました。

[Cocos2dxFromFlash](https://github.com/jake1256/Cocos2dxFromFlash)

詳しくはgithubをご確認ください。まだちゃんとまとまっていないんですが。
これを作っていた時に感じた事でも投稿しようかと思います。

#はじめてのFlash
業務上Flashを触ることはあっても、
自分でアニメーション作ったり、レイアウト作ったりすることはありませんでした。
なので、まずFlashをなんとなーく習得する所から初めました。

### Flashオブジェクトについて
Flashオブジェクトとか勝手に言ってますが、Flashでは"シンボル"と呼ばれるものですね。
・グラフィック
・ムービークリップ
・ビットマップ（画像）
・その他（テキストなど）
にざっと分けられるようです。

### アニメーション作ったのに上手く動かないんだけど？
画像を適当に配置して、透過したい！ってだけなのにプロパティにアルファが無い…。
回転するアニメーション作ったのに付いてこない…。
という現象に困りましたが、どうやらFlashは画像を取り込んだ後、一旦グラフィックシンボルか、ムービークリップシンボルに変換してあげないと
透過プロパティが無かったり、アニメーションが思ったように動いてくれませんでした。

### xflについて
このツールでは、Flashのxflファイルからcocos2d-xに変換をかけています。
xflファイルという名前は耳慣れないですが、非圧縮型flashファイルの拡張子です。
これで保存すると、Flashファイルに作成した各種情報が
全て読み取れるようになります。

# 変換するにあたって、注意した事

### Flashは絶対値管理
Flashは１フレーム毎の情報を絶対値で管理しています。
そのため、無駄な計算を省いて高速かつ低負荷のアニメーションを実現しているようです。
が、実際のゲームではそこで作ったものをプレイヤーが操作したり、
状況によって表示を切り替えたりすることが必要だと判断して、相対値に変換しています。

### FlashのMatrixについて
Flashでは、"拡大・縮小・変形・回転"をMatrixで管理しています。
これをcocos2d-xで使えるように、回転率やスケール値に変換する必要があります。

### Flashの座標
Flashの座標の原点は左上が(0,0)になります。
cocos2d-xは左下が(0,0)になるため、変換をします。
(cocos2d-xの原点自体を変える事も可能ですが、他に影響大なので、やりません)

# cocos2d-x側の話は？
v2.x系とv3.x系で大分違うので
その切り分けがとにかく面倒くさいってところでしょうか。

Animationを切り分けて出力しているのは、
・画像だけ差し替えて同じアニメーションを使いまわせるように
・movieclipのようにNode化して、大量に配置することが出来るように
など。

#まだまだ開発中
Flashは高機能なので、出来る事が本当に多いです。
その内の5%にも満たない部分だけしかこのツールでは使うことが出来ていないのですが、
時間を見つけては機能をpushしていきます。
AnimationSetにSetDurationすると一部機種で動かないときがある

AlphaAnimationをaddしたAnimationSetにsetDurationすると一部機種でAnimationが動作しないことがありました。

「一部機種」とは手持ちで確認したXperia acro SO-02C(OS 2.3.4)とDIGNO ISW 11K(OS 2.3.5)の2機種です。2系全般かもしれません。

## 1.AnimationSetに対してsetDurationして動かない例

TranslateAnimationとAlphaAnimationをaddしたAnimationSetにsetDurationすると一部機種でアニメーションが表示されません。

```java
TranslateAnimation move = new TranslateAnimation(0, 100, 0, 0);
AlphaAnimation alpha = new AlphaAnimation(0.f, 1.f);
AnimationSet set = new AnimationSet(false);
set.setDuration(1000);
set.addAnimation(move);
set.addAnimation(alpha);
view.startAnimation(set);
```

## 2.AnimationSetに対してsetDurationして動く例

TranslateAnimationとScaleAnimationをaddしたAnimationSetに対してsetDurationすると一部機種でもアニメーションが表示されます。
なのでAlphaAnimationをaddするのがアニメーションが表示されない原因の1つのようです。

```java
TranslateAnimation move = new TranslateAnimation(0, 100, 0, 0);
ScaleAnimation scale = new ScaleAnimation(0.f, 1.f, 0.f, 1.f);
AnimationSet set = new AnimationSet(false);
set.setDuration(1000);
set.addAnimation(move);
set.addAnimation(scale);
view.startAnimation(set);
```



## 3.AnimationSetにAlphaAnimationをaddしても動く例

AlphaAnimationをaddした場合でも、AnimationSetではなく各Animationに対してsetDurationすれば一部機種でも正常に動きます。

```java
TranslateAnimation move = new TranslateAnimation(0, 100, 0, 0);
move.setDuration(1000);
AlphaAnimation alpha = new AlphaAnimation(0.f, 1.f);
alpha.setDuration(1000);
AnimationSet set = new AnimationSet(false);
set.addAnimation(move);
set.addAnimation(alpha);
view.startAnimation(set);
```

## 考察

AnimationSetを使う場合は、AnimationSetではなく、addする各Animationに対してsetDurationすれば間違いなさそうです。
一部機種で動かないなんだこれ -> 直したら動いた -> 他の手持ち機種でも問題ないー、というレベルの結論を書き留めてみましたメモ。
sync.RWMutexを使おう


昨日GoCon2014がありまして、発表の機会を頂いたのですが発表後に @rui314さんから[指摘](https://docs.google.com/document/d/1mpXOiD40rfNLb1YLIlkMnsoNebyGLHwOJOjtT-J-lJg/edit)のあったグローバル変数への読み込み・書き込みの競合の問題、これに関してはsync.RWMutexを使うのがいいので、使ってみました。

## RLockとLock
通常の`sync.Mutex`はLockのみしか提供しない。これをRead, Write双方で使ってみると非常に効率が悪くなります。そこで`sync.RWMutex`はRLockというもう一つのLockを提供しています。
この２つの違いは、

- RLock: Read向けのLock。RLock同士はブロックせず、Lockのみがブロックされる。解除時はUnlockではなくRUnlockする。
- Lock: いわゆる普通のLock。RLock, Lock双方をブロックする。

上記を使い分けることで効率よくLockを行えるようです。

## 使ってみる
実際にどう動くのか見るのが分かりやすいと思います。
play.golang.org便利なので貼っときます。
http://play.golang.org/p/JJH3Tm8Sl7


```go:rwmutex.go
package main

import (
	"sync"
	"time"
)

var mu sync.RWMutex
var data map[string]string

func main() {
	data = map[string]string{"hoge": "fuga"}
	mu = sync.RWMutex{}
	go read()
	go read()
	go write()
	go read()
	time.Sleep(5 * time.Second)
}

func read() {
	println("read_start")
	mu.RLock()
	defer mu.RUnlock()
	time.Sleep(1*time.Second)
	println("read_complete", data["hoge"])
}

func write() {
	println("write_start")
	mu.Lock()
	defer mu.Unlock()
	time.Sleep(2 * time.Second)
	data["hoge"] = "piyo"
	println("write_complete")
}
```

```
$ go run rwmutex.go
read_start
read_start
write_start
read_start
read_complete fuga
read_complete fuga
write_complete
read_complete piyo
```

最初の`read_complete fuga`の部分に関しては、RLockしているので、ほぼ同時に表示されます。
その後write->最後のreadの順にロックが解除されていって実行されています。
上記コードのRLockを全てLock, RUnlockをUnlockに書き換えると挙動の違いが見て分かりやすいかと思います。
http://play.golang.org/p/-w_V4l5K2e
MySQL/MariaDB timezone conversion

# Timezone Conversion

- [Converting Timezone-Specific Times in MySQL](https://blog.mozilla.org/it/2012/11/16/converting-timezone-specific-times-in-mysql/)

## use text values

use this command first to generate the table for timezone information in MySQL/MariaDB's **mysql** table

`mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u USER_NAME mysql`

then we can use the SQL like this to convert the timezone :

`CONVERT_TZ(NOW(),'US/Pacific','UTC')`
出来損ない言語を使う君たちへ　

出来損ない言語を使う君たちへ　
http://builder.japan.zdnet.com/extra/iot2014/35045066/
この記事を読んでいただきたい。RubyOnRailsなんてやっていてもコードの保守に一生追われるだけで終わってしまう。 いつまでの手直しに時間がかかり、他のやりたいことができなくなる。アプリストアがあるわけでもない　課金プラットフォームがあるわけでもない　脆弱性は出し続ける　コンパイルはできない デバッグはたいへん　導入もたいへん　WEBだけしか使えない　動的　なぜこんな無駄に苦労する言語を高学歴はやるのだろか？受験勉強しすぎで無駄でも我慢してやり続ける事が正しい事と勘違いしているのではないか？無駄なものはいくらやっても無駄なのだ　無駄なものはやめて　有用な言語をやるべきだ

Amazonの倉庫ロボット自動システム
http://gigazine.net/news/20121231-kiva-system/
それを開発している会社の採用情報　採用言語はC++ C# Java
http://www.kivasystems.com/careers-at-kiva/

PHP RoR JS Rubyなんてどこにも書いていない　数年もすれば仕様が変りバグや脆弱性を出す危ない言語だとわかっているのだろう　こんな危ない言語は使ってはいけない

http://www.saturn.dti.ne.jp/npaka/robotics/index.html
https://www.microsoft.com/en-us/download/details.aspx?id=29081

引用元
http://apps.wiki.fc2.com/edit/%E6%8A%80%E8%A1%93%E7%9A%84%E8%B2%A0%E5%82%B5%E3%82%92%E3%81%AA%E3%81%8F%E3%81%99%E3%81%AB%E3%81%AF/
SVNとイラレとRedMineの連携

SVNとイラレとRedMineの連携 自動化のすすめ
http://apps.wiki.fc2.com/wiki/SVN%E3%81%A8%E3%82%A4%E3%83%A9%E3%83%AC%E3%81%A8RedMine%E3%81%AE%E9%80%A3%E6%90%BA%20%E8%87%AA%E5%8B%95%E5%8C%96%E3%81%AE%E3%81%99%E3%81%99%E3%82%81

ストリーボードファイルやxibファイルはSVNで共有して使う。デザイナーと共同作業ができる(要 デザイナーにXCodeの操作を覚えさせる)
XCodeは無料 SVNが使えるレンタルサーバーを借りる もしくは自分でサーバーを立てる

連携の仕方

 修正する側
  ストリーボードと空のXIBファイルを用意する。 ストリーボードから修正したViewConを空のXIBにコピーし修正してcommitする。
 受け取る側
  更新から XIBファイル取得。 ViewConをコピー、ストリーボードの同じViewConに差し替える

イラストレーターはSVNでコミュニケーションツールに変わる　

　デザイン、画面遷移図、メモ帳、伝言、ラフスケッチ、アイディアメモ、共有ノートとして使える　レイヤーごとに書き込んでSVNで更新していく

　人との打ち合わせが会話ベースからスケッチブックベースに変われる 話のまとめ役(デイレクター 、営業)がいなくてもデザイナーとエンジニアだけで作業ができる。
　話すのが苦手な人同士でも、絵を中心に作業が進められる 
　イラストレーターCS2は無料でダウンロードできる

C#とイラストレーターの連携

　イラストレーターのAPIをC#から実行する
　イラレAPIをチェックしてみると(サンプルスクリプト、リファレンスPDFなどで)　いろいろな事が自動化できることがわかる

　C#からの画像の書き出したり(レイヤーをすべて非表示にし一つだけ表示して書き出すことができる)
　C#のデーターグリッドでイラストレーターのオブジェクトを管理
　翻訳APIと連携し英語の素材画像を書き出したり
　Nibをいじったり　

スカイプの利用

  相手のデスクトップ画面を確認するデスクトップ画面共有機能があり　画像を確認しながら通話が出来る　

  指示、報告、進捗管理　redMine SVN イラレ
  体力のいる　デザインワーク  C#(WinForms) とイラレ
  雑用　ルーテインワーク　C＃(WinForms) VBA マクロ

AppStore ← 発注会社→請負会社　プロデューサー　デイレクター  営業　エンジニア  デザイナー  単純オペレーター　雑用全般SE
　↓
AppStore ← エンジニア  デザイナー  雑用オペBot  デザインオペBot  翻訳オペBot


これからアプリを作る方はまずは支援ツールや自動化する環境を作る事をお勧めします。少数ですべてやるのは大変なので

RedMine(PHP版）
https://github.com/yandod/candycane

MacのSVNソフト
Xcode Eclipse DreamWeaverに付属SVNソフトあり cornerstone Versions

adobeの主要製品はCom登録でWinForm(C#)から操作ができる
詳しくはadobe主要製品インストール時にExtendsToolKitをインストールし、一緒にインストールされるスクリプト解説のPDF,サンプルスクリプト,C#のインテリセンスを参考にする

イラストレータースクリプト gitHub
https://github.com/search?q=illustrator&ref=cmdform

スライスごとに画像を一括書き出すスクリプト
ttp://cocopon.me/blog/?p=3687

レイヤーごとに画像を一括書き出すスクリプト
ttp://d.hatena.ne.jp/ROCO/20080918/1221697110

PhotoShop 

レイヤーごとに画像を書き出すスクリプト
ttp://tech.kihon.jp/photoshop/3935

http://gigazine.net/news/20080922_illustrator_script/

http://www.amazon.co.jp/Adobe-JavaScriptリファレンス-NextPublishing-古籏-一浩-ebook/dp/B00FZEK6J6

イラストレーター iOS用 モック用素材
ttp://photoshopvip.net/archives/18776
ttp://photoshopvip.net/archives/56794
ttp://applision.com/【デザイン】ios7のuiデザインを完全網羅！アプリ制/

スマホのアプリアイコンを簡単に書き出せるWebサービス「Makeappicon」
http://makeappicon.com/
ttp://review4.cc/archives/2197/

Illustrator C#
ttp://nryk-okmt.cocolog-nifty.com/blog/2012/07/cillustrator-c0.html
AfterEffect C#
http://www.adobe.com/devnet/aftereffects.html
premiere C#
http://forums.adobe.com/community/premiere/sdk
Maya C#
http://area.autodesk.com/blogs/stevenr/maya-2013-extension2-maya-net-api
connect to ESXi server with vmplayer on Linux

There is no vSphere Client on Linux now,
but VMware Player (which has Linux Version) can open vm, connect to vm console which is in the remote esxi server.

use this command :

`​vmplayer -h`

It will prompt out a window asking your Host Name、User、Password，
then it will list the vm in the esxi server，
now you can open the vm or connect to the console.
PHPからC#に移ったほういい理由

http://apps.wiki.fc2.com/wiki/PHP%E3%82%92%E6%8D%A8%E3%81%A6%E3%81%9F%E3%81%BB%E3%81%86%E3%81%84%E3%81%84%E7%90%86%E7%94%B1

C#の強み、或いは何故PHPから乗り換えるのか
http://www.slideshare.net/slideshow/embed_code/22979400

.NET最先端技術によるハイパフォーマンスウェブアプリケーション
http://www.slideshare.net/slideshow/embed_code/22662425

C#や.NET Frameworkがやっていること
http://www.slideshare.net/slideshow/embed_code/31797909

http://gihyo.jp/dev/serial/01/grani/0001

Mono×LinuxでASP.NET MVCを動かす
http://www.atmarkit.co.jp/ait/articles/1303/15/news069.html
RubyOnRails CakePHPを止めたほうがいい理由

このサンプルを作ってみればわかる

http://apps.wiki.fc2.com/wiki/Ruby%20on%20Rails%20Cake%20PHP%E3%81%AF%E3%82%84%E3%82%81%E3%81%A8%E3%81%91

C# ADO.net Asp.netの優れている点

　意識が高くなくても使える

　GUIで操作

　動的言語にくらべて保守作業がしやすい

C# 
　静的言語
　コンパイルによるコードエラーの検出
　下位互換がある
　脆弱性が少ない 
 
サーバー　インフラ 
　Windows Server　GUIで操作が楽　
　IIS GUIで操作が楽
　SqlServer Compactの堅守な作り
	
Visual Studio
　優れた開発環境
　コンパイル時のエラー検出
　ブレイクポイント
　コントローラーはGUIでドラッグして配置するだけ（自動生成スクリプトなんて書かない）
 
ADO.net
　2003年頃からあった　 非常に使いやすい DB周りはこれで足りる
　デスクトップアプリ　ウェブアプリ　 SilverLight(オープンソースとしてある) WindowsPhone　xamarin で使える
　Asp.net MVC でも使える
　データーデザイナー　GUIで操作が楽
　SQL文の自動生成
　バインディング機能(データーグリッド、テキストボックスなどに　変更したものが自動更新される)
　iOSにもSOAPクライアントあり（オープン）
　ADO.NET Entity Frameworkとは別物 こっちは意識の高い人用

ASP.net　Webサービス
　使いやすい　面倒な設定不要
　Xmlを表示
	
2011年に出たAdo.netについて書かれた本　サンプルファイルあり
Visual C#データベースプログラミング入門 [単行本]

http://www.amazon.co.jp/Visual-C-%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E5%85%A5%E9%96%80-%E6%97%A5%E5%90%91-%E4%BF%8A%E4%BA%8C/dp/4877832637/ref=dp_return_1?ie=UTF8&n=465392&s=books

Ado.netについて詳しく書いてある

C#徹底入門 Windows7/8.1&VS2013対応
http://www.amazon.co.jp/徹底入門-Windows7-8-1-VS2013対応-日経BPパソコンベストムック/dp/4822277127/ref=sr_1_2?s=books&ie=UTF8

Visual C# 2013 パーフェクトマスター
http://www.amazon.co.jp/Visual-パーフェクトマスター―Microsoft-Studio-Windows-Perfect/dp/4798040193/ref=sr_1_9?s=books&ie=UTF8

SilverLight用DataSet Ado.net

Http://c1.grapecity.com/SuperProducts/DataSilverlight/
ttp://d.hatena.ne.jp/Yamaki/20100127/1264585173
C1.Silverlight.Data.dll がサンプルファイルに含まれている(DataSetが使える)

LinuxでAsp.netを動かす
Mono×LinuxでASP.NET MVCを動かすまで
http://www.atmarkit.co.jp/ait/articles/1303/15/news069.html

C# デスクトップアプリ用AD　winFormに広告を載せられる
http://code.msdn.microsoft.com/bing/BingAdsNET-Class-Library-4c52ccda
http://www.codeproject.com/Articles/38249/Bing-API-in-Action-C

Xamarin
C# と.NETで開発して、iOS Android どちらの開発も可能
http://www.wisdomsoft.jp/615.html
Visual StudioでiOS／Androidアプリが書けるXamarinを試してみた（iOS編） 
http://www.buildinsider.net/mobile/xamarinvisualstudio/01
http://qiita.com/amay077/items/716742474bce343c5729

Objective-c to C# ８千円くらい
http://blog.ch3cooh.jp/entry/20140311/1394464452

初心者でも作れるC# Webデーターベースアプリのサンプル

データーベースからデータを読み込み 表示　挿入　更新　削除  XML出力ができる簡単なアプリ例
Unityのすすめ

Unityのすすめ
http://apps.wiki.fc2.com/wiki/SVN%E3%81%A8%E3%82%A4%E3%83%A9%E3%83%AC%E3%81%A8RedMine%E3%81%AE%E9%80%A3%E6%90%BA%20%E8%87%AA%E5%8B%95%E5%8C%96%E3%81%AE%E3%81%99%E3%81%99%E3%82%81

Unity アセットストア　
https://www.assetstore.unity3d.com/
ゲーム作成支援ツールがたくさんあり安く購入できる

マルチプラットフォームで書き出せる

Unity4.3から2Dに対応

VisualStudioで開発ができる
https://www.google.co.jp/search?q=unity+visual+studio

言語はC#

ゲーム以外のアプリも開発できる　他のプラットフォーム展開できる
http://www.slideshare.net/MakotoItoh/unityiphone?v=qf2&b=&from_search=13

Unity製 Twitterクライアント
http://www.youtube.com/watch?v=CMeHX-h9NHs&feature=youtu.be

Unityを使った個人開発者の事例

http://app.famitsu.com/20130416_154388/
http://www.inside-games.jp/article/2013/05/01/66149.html
ttp://tokyo1minute.tumblr.com/post/27131241854/unity-1

Unity入門講座 ドットインストール(26回)
http://dotinstall.com/lessons/basic_unity

Unity Student 講座 サンプルファイル
http://www.unity3dstudent.com/

iPhoneゲームを20分間で作る【メダルプッシャー編】
http://www.nicovideo.jp/watch/sm12948504

http://www.nicovideo.jp/tag/ゲーム製作?ref=tagconcerned

Unity Learn Tutorial
http://unity3d.com/learn/tutorials/modules

Unity公式のチュートリアル動画。
内容は英語だが、Youtube翻訳で日本語字幕が付けられる。
2Dゲーム開発チュートリアル等の一部の動画は手動で翻訳されてる。
ttp://terasur.blog.fc2.com/blog-entry-712.html

live2d for Unity  C#でlive2dが開発できる
http://www.live2d.com/news/unity_full_release

Xbox One 向け個人開発者出版プログラム  Unityで開発できる
http://www.xbox.com/ja-JP/developers/id

PS Vita  Unityで開発できる
https://psm.playstation.net/portal/ja/#register
http://www.inside-games.jp/article/2014/01/16/73558.html

他にもWill U PS4 iPhone Androido Windows Phone xbox360 

Unityでオンラインゲーム開発 PhotonCloud
http://photoncloud.jp/
http://www.slideshare.net/GMOCloudJP/unity-photoncloud

signal Rを使ったオンラインシューティングゲーム
http://shootr.signalr.net/#
ソース
https://github.com/ntaylormullen/shootr
posh-gvmでWindowsにSpringBootをインストールして試してみたら楽ちんすぎて #yokohamagroovy

# posh-gvm https://github.com/flofreud/posh-gvm

まずはposh-gvmからSpringBootをインストール。

```
> gvm install springboot

Downloading: springboot 1.0.2.RELEASE

Downloaded 8135K of 8135K
Installing: springboot 1.0.2.RELEASE
Done installing!
Do you want springboot 1.0.2.RELEASE to be set as default? (Y/n): Y
Setting springboot 1.0.2.RELEASE as default.
>
```

SpringBootで使うコマンドは `spring` です。バージョンの確認をしてみる。

```ps1
> spring --version

Spring CLI v1.0.2.RELEASE
```

# spring-boot http://projects.spring.io/spring-boot/

リファレンスは[ここ](http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/html/)。[ePub版](http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/epub/spring-boot-reference.epub)や[pdf版](http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/pdf/spring-boot-reference.pdf)も用意されてるようですよ！

まずはこんなスクリプトを用意してみましょう。

```groovy:MyHelloWorldApp.groovy
@RestController
class MyHelloWorldApp {

    @RequestMapping("/")
    String home() {
        "Hello World!"
    }

}
```

そんで、こんなコマンドを打ってみましょう。

```
> spring run MyHelloWorldApp.groovy

Resolving dependencies.........................

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v1.0.2.RELEASE)

2014-06-01 16:27:28.478  INFO 10496 --- [       runner-0] o.s.boot.SpringApplication               : Starting applicatio
n on PC with PID 10496 (\.m2\repository\org\springframework\boot\spring-boot\1.0.2.RELEASE\spring-boot
-1.0.2.RELEASE.jar started by USER in \workspace)
(中略)
2014-06-01 16:27:32.229  INFO 10496 --- [       runner-0] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on p
ort(s): 8080/http
2014-06-01 16:27:32.232  INFO 10496 --- [       runner-0] o.s.boot.SpringApplication               : Started application
 in 4.136 seconds (JVM running for 6.931)
```

ほほう。では http://localhost:8080/ にアクセスしてみましょう。

![hello-springboot.png](https://qiita-image-store.s3.amazonaws.com/0/24453/023c8185-c214-b62b-1cef-b390be7c299f.png)

えっ…
**ア工ｴｴｪｪ(´д｀)ｪｪｴｴ工ッ!?**

**マジでっ!!?** これはびっくりするほど楽ちん！！
背後ではMavenによる依存性解決からTomcat Embeddedによるサーブレットコンテナの始動まで動いてますね。[@RestControllerアノテーションを検出して暗黙にSpring MVC+Tomcat Embeddedの依存性を解決する](http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#cli-deduced-grab-annotations)ようです。
もう軽量なWebアプリちょこっと書くならSpringBootでいいじゃん！

終了はCtrl+Cで。プロンプトに戻ります。

```
バッチ ジョブを終了しますか (Y/N)? Y
>
```

なお、リファレンスに[Spring Boot does not require any specific code layout to work](http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#using-boot-structuring-your-code)とあるように、特定のプロジェクト構造を要求するフレームワークではありませんが、[GradleとMaven](http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#using-boot-build-systems)でのビルドに対応しているので、ソースコードが複数になるなら構造化してあげましょうね。
CSS入門


## URL
[CSS入門 (全18回) - プログラミングならドットインストール](http://dotinstall.com/lessons/basic_css_v2)

* わかってるつもりで分かってないことが多いのでメモ

## 内容

### 04 セレクタを使ってみよう
* * 全てのセレクタ
* , ~と~
* 半角スペース それぞれの子要素を指定する
* > 子要素だけ
* + 直後の


### 05 スタイル指定の優先度を理解しよう 
- あとから描いたほうが優先
- インラインで描いたほうが優先(style)
- 詳細度の高いほうが優先
	* 詳細度
		* #(100point)
		* .(10point)
		* 要素(1point)
		* 例)#id.class { } → 110point
- !importantが優先


### 06 色を指定してみよう 
* red, bulue, yellow ....
* rgb(rrr, ggg, bbb)
* 16進数(#001122)


### 07 テキストのスタイルを指定しよう 
* color: red;
* font-weight: bold;
* font-size: 14px;// 上、下に14pxの余白が出来ます
* text-align: center;
* text-decoration: line-through; //打ち消し
* font-family: Impact;
* lign-height: 20px;(行の高さ)

### 08 backgroundを使ってみよう 
* background-color: red;
* background-image: url(filename)
* background-repeat: norepeat, repeat-x, repeat-y
* background-position: 10px 10px;
* background-atachment: scroll; // スクロールで流れる
* background-atachment: fixed; // スクロールで流れない

これらは全て
* background:だけで指定できる
* background: red, url(filename), ....


### 09 ボックスモデルを理解しよう 
<div>box</div>
box height, width
widht:は%が使えるが、heightは使えない。
heightで%を使うには、それの親要素にheight: 100%;を設定しないといけない。

### 10 borderを使ってみよう 
border: 

### 11 padding､marginを使ってみよう 
padding

top left&right bottom
top right bottom left


### 12 display､overflowを使ってみよう 
* display
 * block 前後に改行
 * inline 前後に改行はいらない(高さと幅の設定が無効)
 * inline-block 前後に改行が入らない(高さと幅の設定が有効)
 * none 非表示

divはデフォでblock
* overflow
 * visible
 * hidden
 * scroll

要素の中身がはみ出した時、そのはみ出したのをどう表示するか


### 13 positionを使ってみよう 
position

 * static (初期値)
 * relative (相対的)
 * absolute (絶対的)
 * fixed(スクロールしても同じ位置にあるようにする)

親要素にrelativeを指定
子要素にabsoluteを指定

-6pxとかやるとはみ出す。


### 14 z-indexを使ってみよう 
要素の重なり
同じ階層でかつposition: fixedは使えない
z-indexが大きいほうが上に来る。


### 15 float､clearを使ってみよう 
要素を回りこませるためのfloat, それを解除するためのclear

float: left; /* right, both */

とすると、回りこむ。

clear: left;
とすると、回りこみを解除する。

### 16 list-styleを使ってみよう 

* list-style-type: マーカの種類 circle square katakana
* list-style-position: マーカの位置 outside inside
* list-style-image: url(~)(最優先)

これは

list-style: circle, outside

で一気に指定できる。

### 17 cursorをつかってみよう！
カーソルの形状を変えるやつ

.change {
	cursor: move, help(?), wait(砂時計), pointer
}


###18 擬似クラスを使ってみよう
* :link
* :visited
* :hover
* :active
* :focus

未訪問のリンクに対しては
a:link {color: blue;}
a:visited {color: gray;}
a:hover {font-weight: bold;}
a:active {background: red;} クリックして、離すまでのcss指定

hoverはaタグ要素だけでなく、他の要素にも指定できるよ

順番が重要。

forcus: textboxとか、フォーカス当てられるinput要素に対してcss指定
vim with vundle (vim plugin manager)

a little code that I saw long time ago

put it in your .vimrc

then vundle (vim plugin manager) will automatic install if you have git

then your can happly use vundle to mange your vim plugin :)

vundle support three source : 

- vim-scripts repos
- original repos on github
- non github repos

```vim
let iCanHazVundle=1
let vundle_readme=expand('~/.vim/bundle/vundle/README.md')
if !filereadable(vundle_readme)
    echo "Installing Vundle.."
    echo ""
    silent !mkdir -p ~/.vim/bundle
    silent !git clone https://github.com/gmarik/vundle ~/.vim/bundle/vundle
    let iCanHazVundle=0
endif

set rtp+=~/.vim/bundle/vundle/
call vundle#rc()

" let Vundle manage Vundle
Bundle 'gmarik/vundle'
```
JpaRepository と CrudRepository の違いって何？

SpringDataJPAの勉強中の疑問のをメモっておきます。

JpaRepositoryをextendsしている場合とCrudRepositoryをextendsしている場合がある。
公式のサンプルではCrudRepositoryを使っている。
どっち使えばいいのさ。


<h1>調べました！</h1>

両者の違い
JpaRepositoryはPagingAndSortingRepositoryをextendsしているため、PagingとSortingの機能を持っているようだ。
実際にJpaRepositoryクラスを見てみるとPagingAndSortingRepositoryをextendsし、PagingAndSortingRepositoryはCrudRepositoryをextendsしていた。

つまり、ページングもソートもしたい場合はJpaRepositoryを使えばいいってことですね。


参考↓
http://stackoverflow.com/questions/14014086/what-is-difference-between-crudrepository-and-jparepository-interfaces-in-spring
OS起動時にNginxを自動起動するようにする

```shell-session:command
# chkconfig --add nginx
# chkconfig nginx on
```

AWSで作っておいたイメージを起動した時などこれを設定しておくといちいちコマンド打つ必要がなくて便利

ついでにphp-fpmも自動起動するように設定しよう

```shell-session:command
# chkconfig php-fpm on
```
【C言語】_popenでdirコマンドを実行する win7 32bit


```c:C言語
#include <stdio.h>

int main (){

	FILE *fp=NULL;
	char *cmdline="cd C:\\2014 & dir";

	fp=_popen(cmdline,"w");

    if(NULL == fp)
	{
	 //_pclose(fp);←ここにpcloseを書くとダメ、書くとバグ扱いになる
	 printf("file open error ! \n");
	 return 1;
	}

	_pclose(fp);

 	return 0;
}
```

##環境
OS:windows7 32bit (自作機)
コンパイラ:Borland C++ 5.5.1 for Win32

##解説
_popenでdirコマンドを実行する。
_popenと_pcloseなのは、popenとpcloseではエラーが出るからである。

```
Error: 外部シンボル '_popen' が未解決（C:\2014\0601\003.OBJ が参照）
Error: 外部シンボル '_pclose' が未解決（C:\2014\0601\003.OBJ が参照）
```


##コンパイルと実行結果
上記ソースをC:\2014\0601\003.cとしてコンパイルして実行する。

```
C:\2014\0601>bcc32 003.c
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
003.c:
警告 W8004 003.c 13: 'fp' に代入した値は使われていない(関数 main )
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland

C:\2014\0601>003.exe
 ドライブ C のボリューム ラベルがありません。
 ボリューム シリアル番号は XXXXXXXXXXXXXXXX です

 C:\2014 のディレクトリ

2014/06/01  12:39    <DIR>          .
2014/06/01  12:39    <DIR>          ..
2014/05/15  22:29    <DIR>          0425
2014/05/14  07:09    <DIR>          0514
2014/05/16  07:22    <DIR>          0515
2014/06/01  16:00    <DIR>          0601
2014/05/14  07:09    <DIR>          java
               0 個のファイル                   0 バイト
               7 個のディレクトリ  20,048,269,312 バイトの空き領域

C:\2014\0601>
```

##参考文献
C言語 popen()でコマンドの入力に書き込む
http://kaworu.jpn.org/kaworu/2008-05-04-1.php
【Yeoman】generator-angular-fullstack を使って heroku にデプロイする方法


https://github.com/DaftMonk/generator-angular-fullstack

上記に載っているままですが、うまく動いたのでメモ公開。

ローカルでなにかしらアプリケーションができている前提。
できてなければ

```
yo angular-fullstack
```

でサンプルページができます。


## 初回

### プロジェクトフォルダでコマンド実行


```
yo angular-fullstack:heroku
```

herokuのリポジトリ初期化。
アプリケーションの名前を決める。

```
[?] Name to deploy as: [アプリケーションの名前を入れる]
```


### 勝手にいろいろやってくれる

プロジェクトフォルダに ```dist``` フォルダが生成され、中に minify されたファイルを作ってくれたりデプロイしてくれたり。

### ブラウザで確認

```
heroku open
```


**mongodbを使ってる場合**

```dist``` フォルダで下記コマンド

```
heroku addons:add mongohq
```

クレジットカード登録してないと怒られる

```
 !    Please verify your account to install this add-on plan
 !    For more information, see http://devcenter.heroku.com/categories/billing
 !    Verify now at https://heroku.com/verify
```

```https://heroku.com/verify``` でカード登録したらちゃんと見られた


## 二回目以降

### プロダクションコード生成

```
grunt build
```

プロジェクトフォルダでも ```dist``` フォルダでもok



### gitコマンド

```dist``` フォルダで実行

```
git add .
git commit -am "describe your changes here"
```

### pushする

```
git push heroku master
```

### ブラウザで確認

```
heroku open
```
動的にVideoタグを生成する


## 背景

Chromeでは内部的にWebP形式を扱えたりするみたいで、比較的容易にWebMの生成が動的の行える。

また、Emscriptenでffmpegや、libvpxのjs化が行われているので、Firefoxでも動的にWebMの生成が用意に行えるようになった。

## 単純にVideoタグを生成するだけだとダメ

videoタグにcontrols属性をsetAttributeで追加すると
コントロールが有効になり、フツーに扱える。

```
var video = document.createElement("video");
video.src=hogeUrl; // 動的に生成した動画のURL
video.setAttribute("controls","");

document.body.appendChild(video);
```

## 注意

どうも、動的に生成したWebMの中には、1度限りしか、この
方法で再生出来ないファイルもある模様。

生成されたファイル単独ではフツーにブラウザで開くと、
何度でも再生出来るのの、この方法で動的に生成した
videoタグでは1度再生すると以降、うまく再生出来ない
こともある


# Link

- [videoconverter.js - Convert Videos In Your Web Browser](http://bgrins.github.io/videoconverter.js/)
- [https://bitbucket.org/desmaj/libvpx.js](https://bitbucket.org/desmaj/libvpx.js)
- [RecordRTC](https://www.webrtc-experiment.com/RecordRTC/)
- [kjunichi/asDeskCap](https://github.com/kjunichi/asDeskCap)
- [libvpx.jsで動的にWebMを生成する](http://jsdo.it/kjunichi/yRWn)

# 関連記事

- [iOS11でWebRTCがiPhoneのSafariで使えるのか試した](http://abrakatabura.hatenablog.com/entry/2017/09/23/092127)
TitaniumでBase64エンコードされたバイナリデータをファイルに書き込む


こんなんで書けます。

```javascript:write_base64_data_to_file.js
var base64encoded_data = "…";
var blob = Ti.Utils.base64decode(base64encoded_data);
var fooFile = Ti.Filesystem.getFile("foo.jpg");
fooFile.write(blob);
```
gulp 3.7 リリース: CoffeeScriptネイティブに


今回のアップデートの目玉は、やはりCoffeeScriptなどのaltJSをデフォルトでサポートするようになった点です。その他、`--tasks-simple`オプションが用意されたのは、gulpと連携したアプリを作ろうとしていた人には朗報です。(実際、経緯としては[gulp-app](https://github.com/sindresorhus/gulp-app)からのニーズで追加されました)

合わせて、[gulpコマンドの自動補完](https://github.com/gulpjs/gulp/tree/master/completion)が改善されています。今までのバージョンで自動補完を使っていない場合は、ぜひ。Bash, Zsh, Powershell対応です。

![gulp](https://raw.githubusercontent.com/gulpjs/artwork/master/gulp.png)

以下、[リリース文](https://github.com/gulpjs/gulp/releases)を転載しておきます。

- *update* vinyl-fs to remove BOM from UTF8 files
- *add* `--tasks-simple` flag for plaintext task listings
- *updated* autocomplete scripts to be simpler and use new `--tasks-simple` flag
- *added* support for transpilers via `liftoff` 0.11 and `interpret`
	- just `npm install` your compiler (coffee-script for example) and it will work out of the box


## altJSを使うには?

CoffeeScriptを使う場合、package.jsonの`devDependencies`に`coffee-script`を追加します。

```json
{
  <略>
  "devDependencies": {
    "coffee-script": "*",
  }
}
```

設定ファイルとして、gulpfile.js の代わりに、gulpfile.coffee を置きます。例としてはこんな感じでしょうか。ほとんど括弧なしで書けますね。

```coffeescript
gulp         = require 'gulp'
autoprefixer = require 'gulp-autoprefixer'
minifyCss    = require 'gulp-minify-css'
rename       = require 'gulp-rename'

gulp.task 'css', ->
  gulp.src            './css/styles.css'
  .pipe autoprefixer  'last 2 versions'
  .pipe minifyCss     keepSpecialComments: 0
  .pipe rename        extname: '.min.css'
  .pipe gulp.dest     './css/'
```

CoffeeScript以外のaltJSでも、同様に`devDependencies`に追加して、gulpfileの拡張子を設定すれば、それだけでOKです。


## 利用可能なaltJS

gulp.jsは、liftoff経由でスクリプトをロードします。現状で対応しているのは、jsを含めて下記の6つです。

![listoff](https://github.com/tkellen/node-liftoff/raw/master/artwork/liftoff.png)

```javascript
{
  '.co': 'coco',
  '.coffee': 'coffee-script/register',
  '.iced': 'iced-coffee-script/register',
  '.js': null,
  '.litcoffee': 'coffee-script/register',
  '.ls': 'livescript'
}
```

この定義は、liftoff内ではなくて、interpretを読みに行っています。別のaltJSを使いたい場合は、こちらにコミットすると良いかもしれません。

- [liftoff](https://github.com/tkellen/node-liftoff) : Launch your command line tool with ease
- [interpret](https://github.com/tkellen/node-interpret) : A dictionary of file extensions and associated module loaders
不正論文を減らす仕組みがここにある。iPython Notebookで作るデータ資料。

![figure_1.jpg](https://qiita-image-store.s3.amazonaws.com/0/38787/663219e6-ebab-e023-9ede-a657346682a7.jpeg)


#不正論文を減らす仕組みが必要。
最近、不正論文問題がマスメディアで騒がれました。
アカデミアの世界に限らず、
入力データ -> 統計処理 -> 出力結果の一貫性を確保した資料を作る事は大切です。
しかし、人間である以上は間違える事もあります。
ただ、その間違いを減らす仕組みがあります。それこそが、iPython Notebookです。

#iPython Notebookは、コード実行結果付き文書を作るツール。
データサイエンス分野で主流のプログラミング言語「Python」には、
「iPython Notebook」というツールがあります。
iPython Notebookは、ブラウザ向けの文書をMarkdown記法で書くツールです。
ただし、他とは違い、書いた文書の中にPythonコード（又はRコード）とその結果を埋め込む事ができます。

実際にiPython Notebookで作られた文書をお見せします。
データサイエンスの勉強会の発表用に作ったものです。
最初のページの「In [1]:」や「In [42]:」で書かれているのがコードで、
その下にあるネットワーク図がその出力結果です。

[ -> 参考資料：ドキュメントのWebを泳ぐ。Rで始めるBADデータ・ダイビング！](http://nbviewer.ipython.org/gist/nezuQ/3185c698ac82067d9257)
　※[元ソース](https://gist.github.com/nezuQ/3185c698ac82067d9257)はこちら。

この文書にあるネットワーク図は、
コードを書いて実行ボタンを押した結果、自動で埋めこまれたものです。
今回のコードはグラフを出力するものでしたが、
数値や文字を出力するものでも、同様に自動で結果が埋め込まれます。

#結果の自動埋め込みは、改ざんや貼付けミスをなくす。
コードの実行結果が自動で埋め込まれるという事は、
コード処理(統計処理)の結果を人為的に変える事ができなくなるという事です。
悪意のある改ざんも、うっかりによる貼り付けミスも、これで防げます。

#作ってみよう！
iPython Notebookを使う方法は、下記の方々の記事を参考にさせて貰いました。
ありがとうございます。

[ -> 参考記事：IPython Notebookでかっこいいグラフを書く ー MemoBlog](http://yymm.bitbucket.org/blog/html/2013/10/03/ipython_entrance.html)
[ -> 参考記事：ipython notebook を用いた、データ解析の方法](http://life.ess.sci.osaka-u.ac.jp/katsura/ipython_notebook/intro_data_analysis.htm)

#公開してみよう！
iPython NotebookをWebで公開する方法としては、「[nbviewer](http://nbviewer.ipython.org/)」があります。
これはオンラインのiPython Notebook解釈ツールで、
[Gists](https://gist.github.com/)にアップロードしたiPython Notebookのデータから、Webページを作ります。
作られたWebページのURLを伝える事で、他の方にも見て貰う事ができます。

#まとめ
iPython Notebookは、Pythonのコード実行結果付き文書を作るツールで、
結果の改ざんや貼付けミスをなくします。
作った資料は「[nbviewer](http://nbviewer.ipython.org/)」で公開できるので、試してみましょう。