OmniAICreator/Qiita-1.07M huggingface dataset:
DockerのImageからDockerfileを取り出せるか？


取り出せないようだが `history` コマンドで操作履歴を読み出すことでほぼほぼ同じことができそう。 `--no-trunc` オプションをつければ全文読むことができる。

これで docker run したとき、どういうコマンドが実行されているのかもわかって良い。

・・・むしろ他に方法があればぜひ教えていただきたいです >_<

```
[pharaohkj]$ docker history ping
IMAGE               CREATED             CREATED BY                                      SIZE
fccfda7de5ee        3 weeks ago         /bin/sh -c #(nop) CMD [/bin/sh -c ruby /root/   0 B
9ebfa82ca561        3 weeks ago         /bin/sh -c #(nop) ADD file:455a5361174c30b69a   414 B
9ef43ea1950d        3 weeks ago         /bin/sh -c ip a                                 0 B
4a8bc893d8ce        3 weeks ago         /bin/sh -c gem install --no-ri --no-rdoc etcd   2.588 MB
011ec0bedc3a        4 months ago        /bin/sh -c cd /root/                            0 B
a21d40582067        4 months ago        /bin/sh -c apt-get install ruby ruby-dev make   104.9 MB
fb7ee3b98e7c        4 months ago        /bin/sh -c apt-get update                       4.69 MB
cf9d9b748ef3        4 months ago        /bin/sh -c #(nop) MAINTAINER MASAYUKI KATOH k   0 B
e54ca5efa2e9        5 months ago        /bin/sh -c apt-get update && apt-get install    178.4 kB
6c37f792ddac        5 months ago        /bin/sh -c apt-get update && apt-get install    83.61 MB
83ff768040a0        5 months ago        /bin/sh -c sed -i 's/^#\s*\(deb.*universe\)$/   1.903 kB
2f4b4d6a4a06        5 months ago        /bin/sh -c echo '#!/bin/sh' > /usr/sbin/polic   194.5 kB
d7ac5e4f1812        5 months ago        /bin/sh -c #(nop) ADD file:adc47d03da6bb2418e   192.5 MB
511136ea3c5a        17 months ago                                                       0 B
```
Elixir coverexでcoverageテスト

mix.exsファイルのprojectとdeps部分は下のように追加

```
def project do
  [...
    elixir: "~> 1.1-dev",
    test_coverage: [tool: Coverex.Task],
   ...]
end

defp deps do
  [
    {:coverex, "~> 1.0.0" ]
  ]
end
```

これでテストを実行するときにhtmlのレポートを実行してくれる

    $ mix test --cover

生成したレポートはcover/下にある. これに基づいて，実行されていないところが分かってくる．テストパターンの設計に役に立ちます．
Rebuild.fm (http://rebuild.fm/) のススメ #rebuildfm

# Rebuild.fm のススメ #rebuildfm
## 概要
[Rebuild.fm]((http://rebuild.fm/)) について
## Rebuild.fm って？
宮川達彦さん（[詳しくはこちら](http://d.hatena.ne.jp/keyword/%B5%DC%C0%EE%C3%A3%C9%A7)）の Podcast 。
システム開発に関わる様々なトピックを扱っている。
## Rebuild.fm イメージ
下記ページに分かりやすい図があります。
[Rebuild.fmクライアント(非公式)をリリースしました](http://rejasupotaro.github.io/2014/02/17/37.html)
## リスナーになると何を得ることができるか
* 最新の技術情報
* 旬の話題を知ることができる
* 分かりやすい技術の解説を聞くことができる
* 各技術の有力な情報源を知ることができる
* ドレイファスモデルで言うところの「達人」の思考を知ることができる
* 現場の話を聞ける
    * 技術選定基準
    * ノウハウ
    * 利用ライブラリ

※ドレイファスモデルについて詳しく知りたい場合は下記書籍を推奨  
リファクタリング・ウェットウェア
アプレンティスシップ・パターン
## 話題
* プログラム言語
* ツール
* 手法
* 採用
* ガジェット
* セキュリティ
* インフラ
* Apple 関連
* デベロッパープロダクティビティ
* Microservices
* 現場のノウハウ
    * 某クックパッド社
    * 某はてな社
* 英語
* 雑談
    * ゲーム
    * 生活

## 常連ゲスト
* Naoya Ito さん（ FC：[天地を喰らう](http://ja.wikipedia.org/wiki/%E5%A4%A9%E5%9C%B0%E3%82%92%E5%96%B0%E3%82%89%E3%81%86_%28%E3%83%95%E3%82%A1%E3%83%9F%E3%83%AA%E3%83%BC%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%29) レベルのエンカウント率）
* Kazuho Okui さん
* Kenn Ejima さん
* Hakuro Matsuda さん

## Twitter Hash Tag \#rebuildfm

[twitter search #rebuildfm](https://twitter.com/search?f=realtime&q=%23rebuildfm&src=typd)

## 関連
[rebuild.fm 公式サイト](http://rebuild.fm/)
[Rebuild.fmクライアント(非公式)をリリースしました](http://rejasupotaro.github.io/2014/02/17/37.html)
Swiftのenumで、再帰的なデータ型は無理だった話し

さてさて、久し振りに投稿しまつ。@nobkzでつ。

# 再帰的データ型とは?

再帰的なデータ型でし!(説明になってない) 例を上げれば分かるでし!

## リスト

たとえば、再帰的データ型としてリストがあるよ!

Haskellだと...

```hs
-- 定義
data ConsList a = Nil | Cons a (ConsList a)

-- リストを作ってみる。
let list = Cons 1 (Cons 2 (Cons 3 Nil))
```

Haxeのenumでもできる。

```hx
// 定義
enum ConsList<T>{
    Nil;
    Cons(head:T,rest:ConsList<T>);
}

// リスト作ってみる
var list = Cons(1,Cons(2,Cons(3,Nil)))
```

Rustだと、苦しいけどできる

```rust
// 定義
enum ConsList<T>{
    Nil,
    Cons(T,Box<ConsList<T>>),
}

// リストを作ってみる
let x : ConsList<int> = Cons(1,box Cons(2,box Nil));
```

という感じのヤツ。

# Swiftの残念なenum

残念でし!

```swift
// この定義は不可。コンパイルエラーになるぽよ。
enum ConsList<T>{ // Recursive value type ConsList<T> is not allowed
    case Nil
    case Con(T,ConsList<T>)
}
```

![スクリーンショット 2014-11-24 3.50.35.png](https://qiita-image-store.s3.amazonaws.com/0/31381/5a992e6e-e8c8-fb23-0f1d-655b5d52ae8f.png)
HTML5でドット絵を拡大する

##ぼやけない１ピクセルを実現するために
<img src="https://qiita-image-store.s3.amazonaws.com/0/28576/3700696b-27d6-3593-e341-d16a96230b81.png" width="100%" title="拡大したimg要素内のジャギーが「劣化」する。ブラウザ標準の拡大の場合">

関心が高い方なら、2013年6月9日に投稿された[WEB上でドット絵を拡大表示する - @wizforest](http://www.wizforest.com/tech/bigdot/)を、既に試されたと思う。この記事の結論はこうだ。**canvas要素にJavaScriptで描写すれば可能である。**その方法は、[この記事内のスクリプト](http://www.wizforest.com/tech/bigdot/index.html;p1#javascript)か、[筆者の拙作](http://jsdo.it/59naga/lHZC)を参考にして欲しい。

##新しい問題
canvas要素は、style属性やcssのwidthプロパティなどで更に拡大できるが、上記の画像のように**拡大時はジャギーが劣化する。**ドット絵がドット絵たるアイデンティティを失ってしまうのだ。これは恐ろしい。

##ジャギーを殺さない方法
![vectorized](http://static.edgy.black/images/jaggy.example.svg)
[ピクセルをpath要素に変換してsvgで保存する](http://jsdo.it/59naga/vectorizer)ことで、**ピクセルは色を持つ正方形として、形を維持して拡大する。**[path要素に変換するには、d属性を使う。](http://www.h2.dion.ne.jp/~defghi/svgMemo/svgMemo_03.htm)例えば、黒の1pixelの画像ファイルは、以下のように表現できる。

```html
<svg viewBox="0 0 1 1" shape-rendering="crispEdges">
  <path d="M0,0h1v1h-1Z" fill="rgba(0,0,0,1.00)"></path>
</svg>
```
以上のコードをhtmlファイルとして保存すれば、ブラウザで開くと画面の幅いっぱいに、黒い正方形が表示される。

style属性か、cssでwidthプロパティを指定すれば、アスペクト比を維持したまま拡大・縮小できる。

##ライブラリ化
以上を手作業でやると骨が折れて複雑骨折するので、[jaggy.jsをgitにアップロードした。](https://github.com/59naga/jaggy)
楽しいドット絵ライフを。
Pepperめも ～障害物よけ移動～

#ペッパー君に障害物よけさて移動させてみたい
##なぜ？
- 早期レンタルでおうちにペッパー君がいる。
- でも、うちは、そこまで狭くはないけど、ペッパー君は慎重なので、たぶん半径0.7mくらいの範囲に障害物があるとそれ以上そっちには移動したがらないみたい。
- 日本の住宅事情的に結構それじゃあ自由に動けない！

##ということで…
- ひとまず一番手っ取り早いところから、お試しがてら障害物を判断したうえで移動させてみることに。
- ペッパー君には、３つのレーザーセンサーが付いている。
- NaoQiドキュメントに乗ってるレーザーセンサーではないようなので注意(説明はそれを理解した上じゃないと意味なさそう）Nao用レーザーセンサヘッドのセンサはググると１５万円する奴で、たぶん性能はペッパー君のほうが性能控えめっぽい。
- という事で、まるでカルネージハートで遊んでた時のような感覚で、すごくショボイプログラムをさくっと（と言っても範囲手さぐりなので時間かかったけど）書いてみた。

## コード
- ipython用です
 - ipythonは、windowsでも、公式のインストーラーで放り込んで、naoqiのパッケージもwindows用のを放り込んで、あとはpipというのを入れてpip install XXX とやったりするだけでさくっと導入できたのでなかなかお手軽。

```py
%matplotlib inline
from naoqi import ALProxy
from pprint import pprint
import time, math
import pylab as pl
from IPython import display

IP = "192.168.11.7"
PORT = 9559

laser = ALProxy("ALLaser", IP, PORT)
memory = ALProxy("ALMemory", IP, PORT)
motion = ALProxy("ALMotion", IP, PORT)
laser.laserON()

baseName = "Device/SubDeviceList/Platform/LaserSensor/"
devNames = ["Front/","Left/","Right/"] 
rad = 0
moveRad = 0.125/2
#motion.post.moveTo(0, 0, 8)
for loopNow in range(100):
    #pl.cla()
    pl.xlim(-1,+1)
    pl.ylim(-1,+1)
    for jj in range(0,4):
        baseRot = 0
        for devName in devNames:
            for i in range(1,16):
                x = memory.getData(baseName+devName+"Horizontal/Seg%02d/X/Sensor/Value"%i)
                y = memory.getData(baseName+devName+"Horizontal/Seg%02d/Y/Sensor/Value"%i)
                #pprint(devName+"Horizontal/Seg%02d"%i+str((x,y)))
                #pl.plot(x,y,'o')
                r = rad + baseRot
                rx = x * math.cos(r) - y * math.sin(r) 
                ry = x * math.sin(r) + y * math.cos(r)
                pl.plot(rx,ry,'o')
            baseRot = baseRot + 2*math.pi/3
    motion.moveTo(0, 0, 2*math.pi*moveRad)
    rad += 2*math.pi* moveRad
    display.clear_output(wait=True)
    display.display(pl.gcf())
```

## なにやってるの？
- レーザーセンサの値をとってきて、最短っぽいところを適当に左右の範囲を制限しつつ、調べて、0.7m以内だったら回転…ついでに左右に動けるようなら動いてみる、みたいなことをやってるだけ。
- あとはレーザーセンサーの値をグラフに表示してみたりしてるだけ。

## 今後の展開
- 意外にこれだけでもなかなか面白かった。カルネージハート的な面白さ。
- レーザーセンサ最短距離調べるブロックとか作ればコレグラフでも遊べるものになりそう。
- 今はかなり遅いので、そこを何とかしてみたい。モーション終わった後、再度動き出すまでに時間がかかるのは何とかできるかなぁ
- メモリの値をとってくるところも妙に遅いので纏めてとってくる方法とか調べよう。
- ペッパー君のセンサーには、超音波距離センサ（だと思う）などもあるので活用してみたい。
- 一番使いたいのは、デプスセンサ(Kinectと同じ)と２つのカメラ。これの画像処理できれば、2Dカメラの視差とデプスセンサで地面と障害物を見分けて、通れる道をスキャンしてからパスを作って移動とか出来そう。カルネージハート的感覚では物凄く燃える展開な予感。
- カルネージハートでは最強のプログラム（アルゴリズム）作って、いろんな環境でうまく動くのやら特化したのやらを競って遊んでたけど、あんな感じのオモチャになりそうと考えたらすごく楽しそうに思えてきた。
 - …限られた性能の中でやる雰囲気がまさに。Pepper君、処理能力的な部分では結構リーズナブル。サーボとか筐体とかがきっとバカ
高いのだろう。この形のボディだけでも相当するんだろうなぁ

## なう

- 今は、画像処理やるなら噂に聞くROSを使ってみたいと試行錯誤中。Naoqiをラップしてノードにするものがあったので、ROSさえ動くようになれば色々出来そうで楽しみ。
Xcode 6.1 に iOS Simulator 8.0 を移植する

Xcode 6.1 にアップデートを行うと iOS 8.0 Simulator が無くなり、追加でダウンロードも行えない状況なので Xcode 6.0 に含まれているシミュレータを移植してみました。

一応起動ぐらいは確認できていますが、当然ながら動作の保証を行えるものではありません。

## 環境
今回は下記の環境で試しました。

- OS X 10.10 ( Yosemite )
- Xcode 6.1 インストール済み

## 必要なもの
- Xcode 6.0 


## 手順
デスクトップに Xcode 6.0 のディスクイメージを展開したものを置いて作業してます。

### 1. iPhoneSimulator sdk のコピー
```bash
sudo cp -a ~/Desktop/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator8.0.sdk
```

### 2. iOS simruntime のコピー
```bash
sudo cp -a ~/Desktop/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Library/CoreSimulator/Profiles/Runtimes/iOS\ 8.0.simruntime /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Library/CoreSimulator/Profiles/Runtimes/
```

### 3. iOS simruntime の設定変更
```bash
plutil -replace 'runtimeDir' -string 'iPhoneSimulator8.0.sdk' /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Library/CoreSimulator/Profiles/Runtimes/iOS\ 8.0.simruntime/Contents/Resources/profile.plist
```

### 4. OS X の再起動
Xcode の再起動では反映されない模様。
jsfiddleでファイル名が `.js`で終わらない外部ライブラリを使う

JSfiddleは末尾が`.js`で終わらない外部ライブラリをロードしようとするとエラーになるバグがあります。

例えばGoogleChartsを使おうと思って `https://www.google.com/jsapi` を loadすると動きません。ふぁっく。

### 対策

`https://www.google.com/jsapi&fake=.js` と誤魔化しましょう。

### 参照

javascript - Can't convert jsbin demo into fiddle - Stack Overflow http://stackoverflow.com/questions/19892945/cant-convert-jsbin-demo-into-fiddle
ターミナルが「not a valid identifier」というエラーを吐くときの対処法


#どういう時に出るエラーか
間違ったpathを通すような設定を.bash_profileに書いてしまったことが原因で起こりました。

一度やってしまうと、ほとんどのコマンドを受け付けなくなってしまう為、もう一度.bash_profileを編集することもできず困っていましたがGUIで解決する方法がありましたので、共有させていただきます。
（当方、あまりUNIXの知識はありませんので、この方法に問題がある場合にはコメントをいただけると幸いです。）

#解決法
##流れ
ともかく、原因になってしまっている.bash_profileの間違った記述を消すか.bash_profile自体存在しなくても問題のないファイルですので、丸々消してしまえば解決するはず。
ただし、MacのFinderでは隠しファイルは表示されません。
そこで **Funter** というアプリを使って隠しファイルを表示させてFinder上で消去します。
##手順
①以下からFunterをダウンロード・インストール
http://nektony.com/products/funter

②起動したらステータスバーから	「Show Hidden Files」を選択

③FinderでUsers/(ユーザー名)を開き、.bash_profileを削除又は編集
PrestoにはrownumもOFFSETも無い

#OFFSETがありません
PostgreSQLでは、非常に便利なOFFETという物が有ります。使い方としては、ORDER BYでソート基準を定義し、LIMITで取得行数の上限を規定し、OFFSETで読み飛ばす行数を指定します。１ページに100行分のデータを出力したい場合、2ページ目ではOFFSET 100 と書くだけで、先頭から101行から取得が可能です。

RDBでもPostgreSQLのみの実装なので違和感を覚えない人もいるかと思います。

一方で、oracleでは行番号を取得するrownumがあります。rownumはネストせずにWHERE句に記述可能でこちらも非常に便利です

#WINDOW関数を用いた出力開始行数を指定する
Oracleのrownumのように行番号を直接取得するような便利な物は無さそうでしたので、Window関数で行番号を採番し、上位階層で行番号を用いて読み飛ばす行数を指定します。

PostgreSQLでOFFSET句を用いた場合

```sql
SELECT id , user_name , age 
FROM table1
ORDER BY id
LIMIT 100 OFFSET 100 
```
Oracleのrownumを用いた場合

```SQL
SELECT id , user_name , age 
FROM table1
WHERE 
 rownum > 100
ORDER BY id
LIMIT 100
```

PrestoでWindow関数を用いた例

```SQL
SELECT 
 *
FROM
 (
  SELECT 
   row_number()OVER( ORDER BY id ) AS rownum 
   , id , user_name , age 
  FROM table1
  ) AS base 
WHERE
 rownum > 100
LIMIT 100
```
どちらもid列でソートしています。

Window関数のrow_number()による行番号の採番と、Where句で行番号を用いて取得行をフィルタリングしています。また、WINDOW関数はWHERE句に直接記述することが出来ないので、1度ネストする必要が有ります。
PMS (Playstation3 Media Server) のアイコンの変更


DLNA 経由での Playstation3 での動画再生に [PS3 Media Server](http://www.ps3mediaserver.org/) を重宝しているのですが、いかんせんアイコンが妙です。PS3 の画面上には各サーバが並ぶのですからサーバを象徴するアイコンが出てしかるべきなのに、なぜかクライアントである PS3 のアイコンが出ています。設定ファイルでは指定できなさそうです。

Ubuntu のアイコンにしてみました。 ∥ [無償のイラストレーション: のUbuntu ロゴ, Ubuntuの, ロゴ, Linuxの - Pixabayの無料画像 - 8647](http://pixabay.com/ja/%E3%81%AEubuntu-%E3%83%AD%E3%82%B4-ubuntu%E3%81%AE-%E3%83%AD%E3%82%B4-linux%E3%81%AE-8647/)

pms.jar を展開し、resources/images/ 以下を覗きます。

~~~bash:-
$ cd work/
$ unzip ../pms.jar
~~~~

logo.png と、あと、使っているか分かりませんが icon-*.png を用意します。

~~~~bash:-
$ pushd /tmp/
$ convert -scale 16 logo.png icon-16.png
$ convert -scale 22 logo.png icon-22.png
$ convert -scale 32 logo.png icon-32.png
$ convert -scale 256 logo.png icon-256.png
$ popd
~~~~

置換して、zip しなおします。

~~~bash:-
$ cp /tmp/*.png resources/images/
$ ls -l resources/images/{logo.png,icon-*.png}
-rw-r--r-- 1 knaka knaka  1135 11月 23 23:32 resources/images/icon-16.png
-rw-r--r-- 1 knaka knaka  1570 11月 23 23:32 resources/images/icon-22.png
-rw-r--r-- 1 knaka knaka 25251 11月 23 23:32 resources/images/icon-256.png
-rw-r--r-- 1 knaka knaka  2193 11月 23 23:32 resources/images/icon-32.png
-rw-r--r-- 1 knaka knaka 86029 11月 23 23:32 resources/images/logo.png
$ zip -r /tmp/pms.jar *
~~~

よしよし。

![ss.jpg](https://qiita-image-store.s3.amazonaws.com/0/30059/2b087f48-872c-0c22-8e71-6e2c8853a79c.jpeg "ss.jpg")
Elixir | EEx でテンプレート文字列操作 #elixir

# Elixir | EEx でテンプレート文字列操作
## 概要
Elixir の EEx でテンプレート文字列操作をします。
Java で言う JSP。 Ruby で言う ERB。
## サンプル
### テンプレートファイル
~~~
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title><%=title%></title>
</head>
<body>
	<table>
		<tr>
			<th>Name</th>
			<th>Age</th>
			<th>Nationality</th>
		</tr>
		<tr>
			<td><%=name1%></td>
			<td><%=age1%></td>
			<td><%=nationality1%></td>
		</tr>
		<tr>
		<%# comments %>
			<td><%=name2%></td>
			<td><%=age2%></td>
			<td><%=nationality2%></td>
		</tr>
	</table>
</body>
</html>
~~~

### サンプルコード

~~~
IO.puts EEx.eval_file("index.ex", [
	title: "SomeTitle",
	name1: "Name1", age1: 23, nationality1: "Ja",
	name2: "Name2", age2: 23, nationality2: "US"
])
IO.puts EEx.eval_string("<%=hoge%>, <%=hige%>, <%=hage%>", [hoge: "ほげ", hige: "ひげ", hage: "はげ"])
~~~

### 出力
~~~
<!DOCTYPE html>
<html lang="en">
<head>
        <meta charset="UTF-8">
        <title>SomeTitle</title>
</head>
<body>
        <table>
                <tr>
                        <th>Name</th>
                        <th>Age</th>
                        <th>Nationality</th>
                </tr>
                <tr>
                        <td>Name1</td>
                        <td>23</td>
                        <td>Ja</td>
                </tr>
                <tr>

                        <td>Name2</td>
                        <td>23</td>
                        <td>US</td>
                </tr>
        </table>
</body>
</html>

ほげ, ひげ, はげ
~~~

## 参照
[EEx](http://elixir-lang.org/docs/stable/eex/)
Go言語による、おれおれ unzip.exe を試しに書いてみた

Linux 上で圧縮したZIPファイルを、Windowsで展開した時、UTF-8 ファイル名が化けてしまうので、Go言語でさくっと「おれおれ unzip」を書いてみました。いやぁ、きょうびの言語は、さくっと１時間程度で書けるくらい、ライブラリが充実しているもんですね。まぁ、明らかに車輪の再発明ですが、勉強にはいいものです。

ちなみに、巷には UTF-8 → SJIS でファイル名を変換するアーカイバもあると思うんですが、そうすると３か国語の文字が混ざるとアウトなので、UTF-8 → UTF-16 経由で変換する方式でないとまずいんですが、Go言語はそういうのをライブラリで吸収してくれるので、楽でいいですね！（Javaとか.NETとかでも大丈夫でしょうけども）

```ungop.go
package main

import "archive/zip"
import "fmt"
import "io"
import "os"

func main() {
	if len(os.Args) < 2 {
		return
	}
	reader, readerErr := os.Open(os.Args[1])
	if readerErr != nil {
		fmt.Fprintf(os.Stderr, "%s: %s\n", os.Args[1], readerErr.Error())
		return
	}
	defer reader.Close()
	finfo, finfoErr := reader.Stat()
	if finfoErr != nil {
		fmt.Fprintf(os.Stderr, "%s: %s\n", os.Args[1], finfoErr.Error())
		return
	}
	zipReader, zipReaderErr := zip.NewReader(reader, finfo.Size())
	if zipReaderErr != nil {
		fmt.Fprintf(os.Stderr, "%s: %s\n", os.Args[1], zipReaderErr.Error())
		return
	}
	for _, f := range zipReader.File {
		zipFileReader, zipFileReaderErr := f.Open()
		if zipFileReaderErr != nil {
			fmt.Fprintf(os.Stderr, "%s: %s: %s\n",
				os.Args[1],
				f.Name,
				zipFileReaderErr.Error())
			continue
		}
		unzipWriter, unzipWriterErr := os.Create(f.Name)
		if unzipWriterErr != nil {
			fmt.Fprintf(os.Stderr, "%s: %s: %s\n",
				os.Args[1],
				f.Name,
				unzipWriterErr.Error())
		} else {
			_, err := io.Copy(unzipWriter, zipFileReader)
			if err != nil {
				fmt.Fprintf(os.Stderr, "%s: %s: %s\n",
					os.Args[1],
					f.Name,
					err.Error())
			} else {
				fmt.Println(f.Name)
			}
			unzipWriter.Close()
		}
		zipFileReader.Close()
	}
}
```

あんまり真剣にテストしてないので、不具合あったら、ごめんなさい。つーか、多分、逆にSJISのファイル名だったりすると、即アウトでしょう、きっと。
YosemiteでCommand Line Toolsをアンインストールする方法

###経緯 

macにoctaveを導入しようとした時に、gccを更新する必要があり、
command line toolsをアンインストール

###方法
/var/db/receipts下にあるcom.apple.pkgの
CLTools_Executables.bom
ってのを一回アンインストールしたらいけました。

コマンドは、
`
$ cd /
$ sudo lsbom /var/db/receipts/com.apple.pkg.DeveloperToolsCLI.bom | awk -e '{print $1}'|xargs -s 2048 sudo rm
`

参考
http://qiita.com/k-oshima@github/items/61ae067984f0099cbdaf
Yii 2.0.0 で独自のアセットクラスを作成するときの注意点

Yii 2.0.0 限定ですが、独自のアセットクラスを作成するときにクロージャを使っているとデバッグモジュールが動作しないバグが発生します。issues にもあがっていますが ([Debug toolbar doesn't load #5402](https://github.com/yiisoft/yii2/issues/5402)) 、どういう場合に発生するか、またどう対処すればいいのかを簡単にですが書いていきます。

(2014/12/07 に 2.0.1 がリリースされました)


## バグの再現例

例えば jquery-placeholder を使いたい場合、まず composer.json の require に追加して、`composer update` を実行。

```composer.json
{
    "require": {
        "php": ">=5.4.0",
        "yiisoft/yii2": "*",
        ...
        "bower-asset/jquery-placeholder": "*"
    },
}
```

で、jquery-placeholder 用のアセットクラスを実装します。

```php:JqueryPlaceholderAsset.php
<?php

namespace app\assets;

use yii\web\AssetBundle;

class JqueryPlaceholderAsset extends AssetBundle
{
    public $sourcePath = '@bower/jquery-placeholder';

    public $js = [
        'jquery.placeholder.js',
    ];

    public $depends = [
        'yii\web\JqueryAsset',
    ];

    public function init()
    {
        parent::init();

        $this->publishOptions['beforeCopy'] = function ($from, $to) {
            return basename($from) === 'jquery.placeholder.js';
        };
    }
}
```

sourcePath と js プロパティのみだと、発行されたアセットに必要のないものまで配置されちゃうので、init() メソッド内で発行する前のアセットから特定のファイルだけ抽出して配置させるようにしています (ここでクロージャを使用) 。上記の場合は 'jquery.placeholder.js' というファイルのみ配置されます。

とりあえず、jquery-placeholder 用のアセットが上手く発行されているのかを確かめるために assets/AppAsset の depends プロパティに JqueryPlaceholderAsset を追加。

```php:AppAsset.php
<?php

namespace app\assets;

use yii\web\AssetBundle;

class AppAsset extends AssetBundle
{
    ...
    public $depends = [
        'yii\web\YiiAsset',
        'yii\bootstrap\BootstrapAsset',
        'app\assets\JqueryPlaceholderAsset', // 追加
    ];
}
```

この状態で、ブラウザでページをロードすると読み込みが遅く、フッター辺りにあったデバッグモジュールもなくなっています。runtime/log/app.log を確認したところ yii\debug\LogTarget で warning が発生しています。

```console
[warning][yii\log\Dispatcher::dispatch] Unable to send log via yii\debug\LogTarget: Exception 'Exception' with message 'Serialization of 'Closure' is not allowed'
```

## 対処

デバッグモジュールを使わなければ問題なさそうですが、そうもいかないので。

- yiisoft/yii2-debug を dev-master にしてインストールする
- 2.0.1 で修正済なのでそれを待つ (2014/12/07 に 2.0.1 がリリースされました)
PostgreSQLで正しく文字列ソート出来ない時の解決方法

## はじめに
PostgreSQLで文字列カラム (character varying a.k.a. varchar) にてORDER BYを使いソートすると、並び順がむちゃくちゃ。けれど、ローカルでは問題無かったはず……。そんな時の解決方法です。
私はHeroku Postgresを使用していて遭遇しました。ここではこちらを例に挙げてご説明します。

## 原因
文字の並び順の設定（文字の照合順序）が正しく指定されていないことが原因と考えられます。

（Herokuの場合は以下のコマンドで直接DBに接続出来ます）

```bash
$ heroku pg:psql
```

psqlでデータベースに接続し、照合順序を見てみると……なるほどね。

```postgres
=> SHOW LC_COLLATE;
 lc_collate
-------------
 en_US.UTF-8
(1 行)
```

## 前準備
インストールされている照合順序の中から、お好みのものを選びましょう。

```postgres
=> SELECT * FROM pg_collation;
```

## 解決方法
ここでは items テーブルの title カラム (character varying) で降順ソートしたい場合を例とし、解決方法を説明します。

### 1. ソート時に照合順序を指定
ALTERをかける必要も無く楽です。クエリのORDER BYにて照合順序を指定します。

```postgres
ORDER BY title DESC
```

となっているのを、

```postgres
ORDER BY title COLLATE "ja_JP.utf8" DESC
```

と変更

### 2. スキーマを変更し特定カラムの照合順序を変更
逆にこちらはクエリに手を入れる必要が無く楽です。

```postgres
=> ALTER TABLE items ALTER COLUMN title TYPE VARCHAR COLLATE "ja_JP.utf8";
```

これで大丈夫。確認です。

```postgres
=> \d items
```

出来ましたね。

```postgres
title           | character varying           | 照合順序 ja_JP.utf8
```

## 余談
Heroku Postgresで \l すると共有スペース時代を思い出せます。

## 参考文献
- [Herokuのpostgresで日本語カラムのソートが正しくできない - QA@IT](http://qa.atmarkit.co.jp/q/2205)
- [Set locale on Heroku postgres](http://stackoverflow.com/questions/12334986/set-locale-on-heroku-postgres)
- [PostgreSQL: Documentation: 9.3: Collation Support](http://www.postgresql.org/docs/9.3/static/collation.html)
- [PostgreSQL 9.3.2文書: 照合サポート](https://www.postgresql.jp/document/9.3/html/collation.html)
Mac + Vagrant + Chefで開発環境を構築する下準備

ディレクトリを作成し、以下はそのディレクトリ内での作業になります。

# Gemfile作成

```rb:Gemfile
source 'http://rubygems.org'

gem 'chef'
gem 'knife-solo', '~> 0.3.0.pre3'
gem 'berkshelf'
```

# bundleでgemをインストール
```shell-session
$ bundle install
```

# Vagrantファイル作成

以下Vagrantfileを作成する。今回はCentOS6.5を採用。
複数のVMを立ち上げて、お互いに通信できるようdevelopを定義しています

```rb:Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :

# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  # 開発用
  config.vm.define "develop", primary: true do |dev|
    develop.vm.box = "centos_6.5_x64"
    develop.vm.box_url = "http://developer.nrel.gov/downloads/vagrant-boxes/CentOS-6.5-x86_64-v20140504.box"

    develop.vm.network "private_network", ip: "192.168.33.30"
    develop.vm.network :forwarded_port, id: "ssh", guest: 22, host: 2222

    # ここのディレクトリは任意で
    develop.vm.synced_folder "share/", "/vagrant",
      owner: "vagrant",
      group: "vagrant",
      mount_options: ["dmode=775,fmode=775"]
    develop.vm.provider "virtualbox" do |vb|
       vb.customize ["modifyvm", :id, "--memory", "1024"]
    end
  end 
end
```

vagrantを起動します。

```shell-session
$ vagrant up
```

※ 初回はイメージファイルをダウンロードするため少し時間がかかります。


# chefリポジトリ作成
```shell-session
$ bundle exec knife solo init .
```

※ chefの記述は別途書きます

# hosts変更（Mac)
```/etc/hosts
192.168.33.30	hogehoge.local
```

# VagrantにChefを適応する
```shell-session
$ vagrant ssh-config --host hogehoge.local >> ~/.ssh/config # ssh hogehoge.local
$ knife solo prepare hogehoge.local  # VagrantにChef等をインストール
$ knife solo cook hogehoge.local # Chefの実行
```

これでひと通りの開発環境構築する下準備ができました。
後はchefにnginxやmysqlのrecipeを追加して自分用にカスタマイズして下さい。
Vagrant setup for Mac memo


# 1. Vagrant install

http://www.vagrantup.com/

```
$ vagrant -v
```

# 2. VirtualBox install

https://www.virtualbox.org/

# 3. add box

http://www.vagrantbox.es/


```
# $ vagrant box add {title} {url}
$ vagrant box add centos65 https://github.com/2creatives/vagrant-centos/releases/download/v6.5.3/centos65-x86_64-20140116.box
```

# 4. init

```
$ mkdir -p ~/vagrant/centos65
$ cd ~/vagrant/centos65

# $ vagrant init {title}
$ vagrant init centos65
```

# 5. setting

```
$ vim Vagrantfile

# ポート設定 hostの8080アクセスをゲストの80に飛ばす
# config.vm.network "forwarded_port", guest: 80, host: 8080

# ip付与
# config.vm.network "private_network", ip: "192.168.33.10"

# config.vm.provider "virtualbox" do |vb|
#   # Don't boot with headless mode
#   # 仮想ウィンドウを表示する
#   vb.gui = true
#
#   # Use VBoxManage to customize the VM. For example to change memory:
#   # メモリーサイズを増やす
#   vb.customize ["modifyvm", :id, "--memory", "1024"]
# end

```



# 6. up

```
$ vagrant up
```

# 7. ssh

```
vagrant ssh
```

or

id: vagrant && pass: vagrant && ip: 192.168.33.10 && port: 22
spray-jsonでキー名をスネークケースにしたい


Scalaの命名規則的にcase classの属性はキャメルケースになる。spray-jsonがオブジェクトをJSONにシリアライズするとき、属性名をJSONオブジェクトのキー名にそのまま引き継ぐので、キー名はキャメルケースになる。RESTful APIで使うJSONはスネークケースのほうが好きなので、シリアライズするときに自動的に変換したい。

* キャメルケース: `productId`のようにアンダースコアを使わない書き方。
* スネークケース: `product_id`のようにアンダースコアを使う書き方。


```json:期待するJSONの書式
{"product_id": 1, "product_name": "...", ...}
```

```json:spray-jsonがデフォルトで書きだすJSONの書式
{"productId": 1, "productName": "...", ...}
```

spray-jsonでキャメルケースのキーをスネークケースに変換するためのスニペットが[Gistのagemooij / SnakifiedSprayJsonSupport.scala](https://gist.github.com/agemooij/7679130)で紹介されていたので、ここでも紹介したい。

```scala:SnakifiedSprayJsonSupport.scala
package com.scalapenos.spray
 
import spray.json._
 
/**
 * A custom version of the Spray DefaultJsonProtocol with a modified field naming strategy
 */
trait SnakifiedSprayJsonSupport extends DefaultJsonProtocol {
  import reflect._
 
  /**
   * This is the most important piece of code in this object!
   * It overrides the default naming scheme used by spray-json and replaces it with a scheme that turns camelcased
   * names into snakified names (i.e. using underscores as word separators).
   */
  override protected def extractFieldNames(classTag: ClassTag[_]) = {
    import java.util.Locale
 
    def snakify(name: String) = PASS2.replaceAllIn(PASS1.replaceAllIn(name, REPLACEMENT), REPLACEMENT).toLowerCase(Locale.US)
 
    super.extractFieldNames(classTag).map { snakify(_) }
  }
 
  private val PASS1 = """([A-Z]+)([A-Z][a-z])""".r
  private val PASS2 = """([a-z\d])([A-Z])""".r
  private val REPLACEMENT = "$1_$2"
}
 
object SnakifiedSprayJsonSupport extends SnakifiedSprayJsonSupport
```

使い方は、特に自前のJsonProtocolを定義していなければ、`SnakifiedSprayJsonSupport._`を`import`するだけでOKだ。
自前のJsonProtocolのオブジェクトを作っているなら、`with`で`SnakifiedSprayJsonSupport`トレイトをミックスインするだけで、スネークケースの変換処理が追加される。
Android初心者がAndroidStudioを５日間を使ってみた感想。


(^ｑ^)うわー超使いやすい！
(^ｑ^)なにこれ設定楽だわ
(^ｑ^；)でもなんだかすげー分かりにくいし、xcodeのほうが使いやす
()...おっと誰か来たようだ、ちょっといってくる。


閑話休題


Eclipseみたいにややこい設定があるのは面倒ですよね！

さくっと開発してしまいたいのでBeta版だからと気後れせずに使っていきましょう。

初心者が使ってみた感想なんて誰が見るの？とも思いますが、参考になれば幸いです。
以下、僕がとりあえず５日間ぽちぽち触って困った点、感動した点です。

##導入超簡単

eclipseの頃はSDKダウンロードしてそのパスを通して....

とかエンジニア初心者殺しが多かったですが、此方はとっても楽ちんでした。
最新版落として、インストして、SDKを落としたらほぼOKです！

![02.png](https://qiita-image-store.s3.amazonaws.com/0/42310/f55fe7a0-72c3-d2bc-3fcf-971fbddaed12.png "02.png")


ツールバーにあるこいつらが結構よくて

左から順に
GradleSync - 設定ファイルを変えた際に、全体的にその変更を反映させる。
ADV Manager - Androidシミュレイターの仮想デバイスの作成
SDK Manager - SDKダウンロードマネージャーの起動
Android Device Monitor - 実機テストした際に実機のモニタリングが出来る。

僕がまだAndroid慣れしてないのも相まって、
IDEでぽちぽちするだけですぐ出来るのは嬉しいですね。

##シミュレイターとか、xmlPreviewが早い！

流石に最適化されているのか、デバックの時凄く早くて助かります。
（まぁそれでも実機のほうがさくさくなのですが(^_^;)）


##なんでファイルの表示方法三種類もあるの？

![01.png](https://qiita-image-store.s3.amazonaws.com/0/42310/80c428df-163a-642a-6472-83b9e0000419.png "01.png")

xcode出身だと統一感がなくて辛いです。

* Project  - ディレクトリ構造そのまんまの常時
* Packages - パスが通っているもののでパッケージの中身が表示
* Android  - パスが通っているもの

って感じでしょうか。
表示を「Android」でやっている時にxcode感覚でファイルを小分けにしようとすると
「New」> 「Directory」
とやると何も表示されなくて、なんでや。

と思っていましたがFinderや「Project」で見るとしっかり作成されていました。
そこに新しいクラスファイルを作ると、ようやく「Android」でも見れるようになりました。
なんて面倒な....

##キーバインドがeclipseと違う、らしい。

今まであまりeclipseに触れ合ってこなかったので
僕の実感としては少ないですが、それでも少なからずちょっと使いにくさを感じてしまいます。

#小話

僕のイージーミスを紹介したいと思います。

##ライブラリってどう入れるのよこれ。

build.gradleのdependencies部分を書き換えると
色々パス通しとか面倒なことをやってくれるのが
gradleの良いところ。

NewProjectで

```
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:21.0.0'
}
```

と既に記述してありましたので、
「じゃあv13のAndroidサポート入れるなら」

>		compile 'com.android.support:appcompat-v13:21.0.0'

これを書き加えればOKだな！
などという愚行を犯しました。（爆）
最初出来ずにlibsファイルがないからかな？とかと思い、ファイルを単体でDLして
ファイルパス通してみたりして、意味が無かったり....。
わけのわからんエラーに襲われ、小１時間ほど悩むことに
正しくは

>		compile 'com.android.support:support-v13:20.+'

こうですので皆さんもお気をつけて下さい！

##すっと落ちたらxmlあたりの設定を見なおせ！

errorもなく無言でアプリが落ちてしまったら
それはxmlの指定の部分が誤っている可能性があります。

Sampleのコピペを組み合わせていくとMainActivity辺がかぶっちゃうからね...


#こうしてAndroid開発は成ってゆく

何はともあれ
書籍をさーっと目を通してなんとなくの知識が身についた後で挑むのが良いですね！

とはいえ、まだAndroidStudioはBeta版です。だんだん安定してきてはいますが....

eclipseもAndroidStudioも触ったことある先輩エンジニアに尋ねた所
・SDKとか作るのであればまだeclipseの方が良い。
・簡単に作るなら、シミュレイター早いし、xmlの処理早いし、AndroidStudioが良い。
というお話を聞くことが出来ました。

一応僕の方でもネットで色々調べましたがどちらを使うにあたって
大きなメリット、デメリットはなさそうなので（自分調べ）
これからAndroidアプリを作る皆さんはAndroidStudioがいいのでは！？
と、安直に僕は思うわけです！
phpDocumentorをインストールしてドキュメント生成

phpDocumentorのインストールからドキュメント生成まで行います。

[phpDocumentor](http://www.phpdoc.org/)
[phpDocumentor2 on GitHub](https://github.com/phpDocumentor/phpDocumentor2)

インストール環境はCentOS 6.6と、yumインストールしたPHPです。

# インストール
インストール方法はいくつか提供されていますが、GitHubのREADMEではPEARがレコメンドされていたのでPEARでインストールします。

```
$ pear channel-discover pear.phpdoc.org
$ pear install phpdoc/phpDocumentor
```

プログラムからクラス図の生成を行う場合はGraphvizも併せてインストールしておきます。インストールしなくても問題ありません。

```
$ sudo yum install graphviz
```

# ドキュメント生成

```
$ phpdoc run -t /path/to/docs -d /path/to/codes
```

## オプション
とりあえずこれだけ押さえておけば不便しなさそう。
他にもまだまだあります。

### --target, -t
ドキュメントの出力先

### --directory, -d
ドキュメントを生成するソースコード

### --title
ドキュメントページのタイトル


以下は、見つけたけれどまだ使っていないオプション

### --visibility
ドキュメントに出力するアクセス権
未指定の場合、public, protected, privateすべてが出力されます。
publicだけ出力したい場合は指定する必要がありそうです。

### --template
別のテンプレートを使う場合に指定します。

### --encoding
ドキュメントに日本語が含まれている場合は指定したほうが良さそうな雰囲気がします。

### --config, -c
設定をファイルで作成しておいて、実行時にはこのオプションで読み込んで実行できます。

# 備考
2014年11月23日現在の最新安定版バージョン2.8.1では、メソッドの1番目のパラメータに関するparamコメントを書いているにも関わらず、コメントがありません！という旨のエラーが出力されるという不具合があります。
[Argument $[varname] is missing from the Docblock of [methodname] · Issue #1460 · phpDocumentor/phpDocumentor2](https://github.com/phpDocumentor/phpDocumentor2/issues/1460)
もうプログラムの修正は終わっているみたいです。
修正が反映されるまでは直前のバージョンを使うことにしました。2.8.0からの不具合なので、その前バージョンの2.7.0です。てなわけでインストールし直し。

```
$ pear uninstall phpdoc/phpDocumentor
$ pear install phpdoc/phpDocumentor-2.7.0
```

# TODO

* メソッドのソースコードを表示するボタン？ `</>` が404エラーとなる。未確認
Railsでキーワードをハイライトする

Railsでハイライト機能が用意されているので試しました。

# 基本的な使い方
viewでhighlightを使用するとハイライトを利用できます。

```erb:使い方
highlight("文章", "ハイライトしたい単語") 
```

# 複数単語をハイライト
複数単語をハイライトする場合を想定して、Railsのアクションで配列を用意します。

```ruby:配列を用意
@hoge = ['amet', 'dolor', 'magni']
```
表示するビューで単語をハイライトします。

```erb:ハイライト
<%= highlight("Lorem ipsum dolor sit amet, consectetur adipisicing elit. Consequuntur, magni." , @hoge) %>
```
## ハイライトの表示結果
<img src="https://qiita-image-store.s3.amazonaws.com/0/1624/b89b7155-0970-4e0a-f40a-ec74b31b6767.png" width="320" />
配列で渡した単語が黄色に変わりました。

# ハイライト色の変更
ハイライトされた単語をブラウザで確認すると、そこだけタグが変わっていました。
ということは、色はCSSで変えればいいのかな(☝ ՞ਊ ՞)
CentOSでDockerの`--insecure-registry`を指定する

CentOSでプライベートなDockerレジストリを起動して docker push しようとすると

`please add '--insecure-registry localhost:5000'`

というメッセージが出た。本当はちゃんと証明書を用意した方が良いのだろうけど、dockerの起動スクリプトを見ると /etc/sysconfig/ 以下の設定ファイルを見に行くようなので、下のように --insecure 指定をするととりあえず動かすことができた。

```
# /etc/sysconfig/docker
export other_args="--insecure-registry localhost:5000"
```
プチコン3号（SMILE BASIC）基礎文法最速マスター

買ったので。いちいちソフトを中断して説明書を画面に表示して、とするのが面倒だったので、基礎文法だけでもまとめておくことに。なお、他の種類のBASICについて、慣習などは不勉強のため、「こういう書き方はしない」などの点があるかもしれないところはご了承を。

## DIRECTモードとEDITモード

<dl>
  <dt>EDITモード</dt>
  <dd>ソースコードを記述するモード</dd>
  <dt>DIRECTモード</dt>
  <dd>EDITモードで記述したソースを読み込んで実行する。</dd>
</dl>

## Hello, World!

EDITモードのSLOT 0に記述。

```BASIC:EDIT-0
PRINT "Hello, World!"
```

記述したら、DIRECTモードに切り替えて、RUNする。

```BASIC:DIRECT
RUN 0
```

## コメント

行の先頭にシングルクォート。

```BASIC:EDIT-0
'This is a comment.
```

## 変数

数値の場合、とりあえず、このような感じで良い。

```BASIC:EDIT-0
A = 123
```

### STRICTモード

「OPTION STRICT」の命令を書いた場合、VAR命令で変数の宣言をしないとエラーになる。

```BASIC:EDIT-0
OPTION STRICT
VAR A = 123
```

### 変数の型

変数名の後に「サフィックス」という記号をつけることで、変数の型を自分で指定できる。「%」は整数型、「#」は実数型、「$」は文字列型。サフィックスをつけない場合は実数型。ただし「OPTION VARINT」の命令を書いた場合、サフィックス無しは整数型。

```BASIC:EDIT-0
OPTION STRICT

VAR I% = 123
VAR D# = 3.14
VAR S$ = "XYZ"

PRINT S$
```

## 数値

### 四則計算

```BASIC:EDIT-0
A = 5
B = 3

PRINT A + B
PRINT A - B
PRINT A * B
PRINT A / B
```

商（整数値）はDIV、余りはMODで求められる。

```BASIC:EDIT-0
A = 5
B = 3

PRINT A DIV B
PRINT A MOD B
```

### インクリメントとデクリメント

インクリメントはINC、デクリメントはDECで行える。

```BASIC:EDIT-0
A = 5

INC A
PRINT A

DEC A
PRINT A
```

## 文字列

### 文字列の連結

```BASIC:EDIT-0
AGE$ = "34"
S$ = "ワタシハ" + AGE$ + "サイデス"
PRINT S$
```

### 文字列の長さ

```BASIC:EDIT-0
S$ = "アイウエオ"
PRINT LEN(S$)
```

### 文字列の切り出し

```BASIC:EDIT-0
S$ = "アイウエオ"

'アイウ
PRINT MID$(S$)
```

### 文字列の検索

```BASIC:EDIT-0
S$ = "アイウエオ"

'2
PRINT INSTR(S$, "ウ")

'-1
PRINT INSTR(S$, "カ")
```

### 文字列と数値の変換

文字列 -> 数値への変換にはVAL(文字列)、数値 -> 文字列への変換にはSTR$(数値)を使う。

## 配列

配列の宣言はDIM命令で行う。プチコン3号の場合、4次元まで対応。

```BASIC:EDIT-0
DIM INTARR[3]

INTARR[0] = 10
INTARR[1] = 20
INTARR[2] = 30

'10
PRINT INTARR[0]
```

文字列型の配列の場合は「$」のサフィックスをつける。

```BASIC:EDIT-0
DIM STRARR$[3]

STRARR$[0] = "ABC"
STRARR$[1] = "DEF"
STRARR$[2] = "GHI"

'ABC
PRINT STRARR$[0]
```

### 配列の操作

PUSHやPOPなどの命令もある。配列の要素数が増減する。

* 配列の末尾に要素を追加：PUSH
* 配列の末尾から要素を取り出す：POP(配列名)
* 配列の先頭に要素を追加：UNSHIFT
* 配列の先頭から要素を取り出す：SHIFT(配列名)

配列の要素数はLEN命令で取得できる。

```BASIC:EDIT-0
DIM INTRARR[1]

INTARR[0] = 10

PUSH INTARR, 20
PUSH INTARR, 30
PUSH INTARR, 40

TMP = SHIFT(INTARR)

'10
PRINT TMP

UNSHIFT INTARR, 50

TMP2 = POP(INTARR)

'40
PRINT TMP2

'50
PRINT INTARR[0]

'20
PRINT INTARR[1]

'30
PRINT INTARR[2]

'3
PRINT LEN(INTARR)
```

## 制御文

### IF文

```BASIC:EDIT-0
SCORE = 80

IF SCORE >= 70 THEN
  PRINT "CLEAR!"
ENDIF
```

### IF-ELSE文

```BASIC:EDIT-0
SCORE = 60
IF SCORE >= 70 THEN
  PRINT "CLEAR!"
ELSE
  PRINT "FAILED."
ENDIF
```

### WHILE文

```BASIC:EDIT-0
CNT = 0
WHILE CNT < 5
  PRINT "LOOP " + STR$(CNT)
  INC CNT
WEND
```

### FOR文

```BASIC:EDIT-0
FOR CNT = 0 TO 4 STEP 1
  PRINT "LOOP " + STR$(CNT)
NEXT
```

## サブルーチン

ラベル文字列（@文字列）を利用する。

```BASIC:EDIT-0
'MAIN
PRINT "MAIN START"
GOSUB @SUB
PRINT "MAIN END"
END

@SUB
FOR CNT = 0 TO 4 STEP 1
  PRINT "LOOP " + STR$(CNT)
NEXT
RETURN
```

BASIC言語なのでGOTOあり。ラベルを利用してGOTOを利用できる。が、ここではGOTOについては省略＾＾；

## ファイル入出力

LOADやSAVEでファイルからの読み込みや、ファイルへの保存が可能。

## その他

気が向いたら、何か追記するかもしれません。

## 参考資料

[公式リファレンス]([http://smileboom.com/special/ptcm3/manual/reference/)

[プチコン3号まとめwiki](http://wiki.hosiken.jp/petc3gou/)
R から MongoDB に格納されたデータを扱う


R では他の言語を用いて mongo に格納されたデータを扱うケースが多いと思われるが, 今回は mongo からデータを取得して, R のデータ構造に変換し, プロットを行うところまでを行う.

今回使うパッケージは `rmongodb` にした.
`RMongo` というライブラリもある.

## インストール

```bash
install.packages("rmongodb")
```

## ライブラリを読み込みインスタンスを作成する

```{r, create_instance}
library(rmongodb)
m <- mongo.create()
```

## 接続の確認

`mongo.is.connected(mongo インスタンス)` は boolean が返ってくる.

```{r, connect_check}
connect <- mongo.is.connected(m)
print(connect)
```

## データベースや collection 名を取得する

`mongo.get.databases(mongo インスタンス)` はデータベース名の list を返す.
`mongo.get.database.collections(mongo インスタンス, データベース名)` は, 指定したデータベースの中にある collection 名の list を返す.

```{r, get_database}
databases <- mongo.get.databases(m)
print(databases)
collections <- mongo.get.database.collections(m, databases[3])
print(collections)
```

## データベースからデータを取得する

今回は bson で取得されたデータを list に変換し, それを更に `results` list に格納する.

```{r, find}
cursor <- mongo.find(m, collections[4])
tweets <- list()
while(mongo.cursor.next(cursor)) {
  v <- mongo.cursor.value(cursor)
  l <- mongo.bson.to.list(v)
  tweets[[length(tweets) + 1]] <- l
}
```

## データをプロットする

今回は取得した tweet を日別のツイート数に直し, それを plot する.

```{r}
Sys.setlocale("LC_TIME", "C")
created_at <- function(l) as.Date(l$created_at, format="%a %b %d %H:%M:%S %z %Y")
time_lapse <- lapply(tweets, created_at)
x <- c()
y <- list()
for (time in time_lapse) {
  if (time %in% x) {
    now_count <- y[[length(y)]]
    y[[length(y)]] <- now_count + 1
  } else {
    x <- c(append(x, time))
    y[[length(y) + 1]] <- 1
  }
}
par(xaxt="n")
plot(x, y, main = "Tweets of the Day",xlab = "time", ylab = "tweets", type = "l")
par(xaxt="s")
axis.Date(1, at = seq(min(x),max(x), by="days"), "months", format="%m/%d")
```

![sample.png](https://qiita-image-store.s3.amazonaws.com/289/29618/1e5855b4-7b6a-c557-cf59-aa958f438b0a.png "sample.png")

## References

- [MongoDB – State of the R | joy of data](http://www.joyofdata.de/blog/mongodb-state-of-the-r-rmongodb/)
Mac に RStudio を導入する


## インストール

```bash
brew tap homebrew/science
sudo brew cask install xquartz
brew install r
sudo brew cask install rstudio
```

xquartz が password 要求するので入力する.
反応無く遅いが裏でインストールしているので待つ.

## 立ち上げる

Homebrew でインストールしたので, Alfred に `/opt/homebrew-cask/Caskroom/` を登録して, Alfred から立ち上げ.

## R Markdown を書く

依存パッケージである knitr を入れる.

```
install.packages("knitr")
```

Preference > Sweave から
Weave Rnw files using **knitr** に設定する.

![ 2014-09-12 21.16.02.png](https://qiita-image-store.s3.amazonaws.com/289/29618/7a93dd65-b163-e292-d204-d7f988046aa2.png " 2014-09-12 21.16.02.png")

新規ファイルから R Markdown を選択し, 書く.

### Chunk

R の実行コード ( **chunk** という) を書くときは

    ```{r}
    plot(cars)
    ```

とする.
一般的に Markdown でコードを示すときに

    ```r
    plot(cars)
    ```

となるが, これに波括弧が付いた形だ.
波カッコの後に label (id の役割), chunk の options を指定する.


    ```{r, first_label, warning=TRUE}
    plot(1)
    ```

また, 文章中に任意のコード片を埋め込むことも可能である.

    hoge は `r hoge` である

などと書けば, hoge を評価する.
このとき, `hoge` オブジェクトがなければ出力時にエラーを返す.

### TeX

また, TeX 記法を使うことも可能である.

```
$f(x) = ax^2 + bx + c$
```

![ 2014-09-12 21.28.57.png](https://qiita-image-store.s3.amazonaws.com/289/29618/45ccc939-97c3-0a72-4743-3cff6926a62a.png " 2014-09-12 21.28.57.png")

これは mathjax で描画されている.

### 表

results="asis" オプションを付けると, `kable` 関数で表が出力できる.

### 図

`plog` 関数で図が出力できる.

![ 2014-09-12 21.32.11.png](https://qiita-image-store.s3.amazonaws.com/289/29618/fcadd6a5-6d00-87ef-bc0d-edd68a5aee34.png " 2014-09-12 21.32.11.png")

ggplot2 などを使いたければ import して, `qplot` などの関数を使う.

### 設定の共有

```
opts_chunk$set(options)
```

で global な option が設定できる.

この option 評価専用の chunk を作って,

    ```{r, global_options, eval=FALSE}
    opts_chunk$set(options)
    ```

などとファイル上部で書いておくと便利.

その他の Option -> [R markdown(knitr)パッケージのchunk optionまとめ - My Life as a Mock Quant](http://d.hatena.ne.jp/teramonagi/20130615/1371303616)


## Reference

- [Mac OSXでR言語(+RStudio)をhomebrewでインストール | Web Scratch](http://efcl.info/2013/1215/res3542/)
- [～knitr+pandocではじめる～『R MarkdownでReproducible Research』](http://www.slideshare.net/teramonagi/tokyo-r36-20140222)
- [R markdown(knitr)パッケージのchunk optionまとめ - My Life as a Mock Quant](http://d.hatena.ne.jp/teramonagi/20130615/1371303616)
UnityのDebug.log()でHelloWorldを出力しました

UnityでDebug.log()を使い、HelloWorldを出力したいと思いました。

# デバッグログの書き方
Debug.log()で書きます。

```csharp
Debug.Log ("HelloWorld");
```


# スクリプトを作りHelloWorldを記述
Project > Create > C# Scriptを選択し、C#スクリプトを作成します。
ファイル名を「HelloWorldScript」と名前を付けました。

```csharp:HelloWorldを表示
using UnityEngine;
using System.Collections;

public class HelloWorldScript : MonoBehaviour {

	// Use this for initialization
	void Start () {
		Debug.Log ("HelloWorld");
	}
	
	// Update is called once per frame
	void Update () {
	
	}
}
```
スクリプトを作成するとひな形が最初から用意されているので、そのvoid Start()内にDebug.log()を記述します。

# GameObjectとスクリプトを紐付けする
GameObject > Create Empty で空のGameObjectを作成します。
HierarchyにあるGameObjectへ、ProjectのAssetsにあるHelloWorldScriptをドラッグ・アンド・ドロップします。

<img src="https://qiita-image-store.s3.amazonaws.com/0/1624/d36e7acf-f703-37c5-76a0-c5cf1c2aa161.png" width="320" />

GameObjectがHelloWorldScriptと紐付けされています。

# HelloWorld!を表示
ゲームビューでプレビューします。
コンソールログにHelloWorldが表示されています。

<img src="https://qiita-image-store.s3.amazonaws.com/0/1624/c0585c1c-d96e-eaf2-e33b-5e2218f0e944.png" width="320" />

ちゃんとHelloWorldを表示できました。
RubyMotion for Android(Install)


##RubyMotion install

[RubyMotion](http://www.rubymotion.com/)でライセンスを購入します。(年間ライセンス24,000円くらい)
※30日間払い戻しできるので無料版は無いそうです。

購入するとRubyMotionインストーラーダウンロードリンクとライセンスキーがメールで送られてきます。

インストーラーをダウンロードし、ライセンスキーを入力してインストールします。

インストール後、アップデートします。

~~~
$ sudo motion update --pre
~~~

あとは、[developer-center](http://www.rubymotion.com/developer-center/guides/getting-started/)を見ながらAndroid SDK/NDKの準備します。

日本語版あるやないですかｗ
[日本語版ガイド](http://rubymotion.jp/RubyMotionDocumentation/guides/getting-started/)

なので、以下は読む必要ないです。。。

##Android SDK install

[Eclipse ADT](http://developer.android.com/sdk/index.html)からAndroid SDKをダウンロードして解凍します。eclipse,sdk２つのディレクトリがありますが、使用するのはsdkだけです。

~~~
$ mkdir ~/android-rubymotion
$ cp -r ~/Downloads/adt-bundle-mac-x86_6420140702/sdk ~/android-rubymotion
~~~

##Android Platform SDK install
インストール終わったら以下コマンド実行します。

~~~
$ ~/android-rubymotion/sdk/tools/android
~~~
Javaランタイム入れるか聞いてくるのでOKします。
Javaランタイムインストール後、コマンドを再度実行します。

~~~
$ ~/android-rubymotion/sdk/tools/android
~~~
Android SDK Manager が起動するのでAndroid4.4のSDKを選択し、Installボタンをクリックする。
※Nexus5持ってるので4.4です。

インストール後、以下のコマンドを実行する。

~~~
$ ~/android-rubymotion/sdk/tools/android list
~~~
インストールしたAndroidバージョンがずらずらーと表示される。ちなみにNexus5はid:7でした。
※おそらくインストール環境によりid番号違うんでしょうね。

##Android NDK install

[Android NDK](http://developer.android.com/tools/sdk/ndk/index.html)ここからMacOS用64bitをダウンロードします。

インストール方法は上記URLからダウンロードすると説明箇所が表示されるのでそのとおりに実行します。

1.Download the appropriate package from this page.
2.Open a terminal window.
3.Go to the directory to which you downloaded the package.
4.Run chmod a+x on the downloaded package.
5.Execute the package. For example:

~~~
$ chmod a+x ~/Downloads/android-ndk-r10c-darwin-x86_64.bin
$ ~/Downloads/android-ndk-r10c-darwin-x86_64.bin
$ mv ~/Downloads/android-ndk-r10c/* ~/android-rubymotion/ndk
~~~

※Android NDKとは？
　NDK･･･Native Development Kit

　Androidアプリケーションの一部をC,C++などネイティブコードで記述することができる。

　・メリット１ 処理を高速化できる。
　・メリット２ iPhoneアプリコードの再利用ができる。

※iPhoneアプリではObjective-Cが使用されるが、処理速度を考慮する処理にはC/C++が使用されるらしい。

##ログインシェル設定(zsh)

~~~
$ cd
$ vi .zshrc
~~~
~~~.zshrc追記
export RUBYMOTION_ANDROID_SDK=~/android-rubymotion/sdk
export RUBYMOTION_ANDROID_NDK=~/android-rubymotion/ndk
~~~

##Hello World

インストールの確認のためお約束のHello Worldしておきます。

~~~
$ mkdir ~/android_apps
$ cd ~/android_apps
$ motion create --template=android Hello
$ cd Hello
~~~

MacにAndroid端末(Nexus5)をUSB接続します。
※接続前にAndroid端末の開発者向けオプションをONにし、USBデバッグを有効にしておきます。

~~~
$ rake device
~~~

すると、何も表示されない画面が出ます。
これで動いているようです。

一応文字を表示させることもしておきます。

~~~app/main_activity.rb
class MainActivity < Android::App::Activity
  def onCreate(savedInstanceState)
    puts "Hello World!"
    super
    view = Android::Widget::TextView.new(self)
    view.text = "Hello World!"
    self.contentView = view
  end
end
~~~

保存後、rake deviceすると今度はHello World!の文字が表示されています。

インストールはOKのようです。

あとは、[サンプルコード](https://github.com/HipByte/RubyMotionSamples)見ながら練習でしょうかね。


##Google Play Developerへの登録(おまけ)
・登録料が必要。初回に２５ドル払う。（支払いは初回のみ）
・支払い方法はGoogleウォレット、登録処理完了まで最大４８時間程度掛かる。
[Google Play デベロッパーコンソール登録ページ](https://play.google.com/apps/publish/signup/)
sbtの"unresolved dependency"のデバッグ

## A. pomファイルがあるかチェック
sbtのログにアクセスしたURLが下のように出ているので、見つからないライブラリがあるはずのURLにブラウザでアクセスしてみる。

```
[info] Resolving com.github.ikuo#garapon4s_2.10;0.3.0 ...
[warn]  module not found: com.github.ikuo#garapon4s_2.10;0.3.0
...
[warn] ==== public: tried
[warn]   https://repo1.maven.org/maven2/com/github/ikuo/garapon4s_2.10/0.3.0/garapon4s_2.10-0.3.0.pom
[warn] ==== Sonatype Releases: tried
[warn]   http://oss.sonatype.org/content/repositories/releases/com/github/ikuo/garapon4s_2.10/0.3.0/garapon4s_2.10-0.3.0.pom
...
```

ブラウザでアクセスしてもファイルがない場合、特定のScalaバージョンのみしかファイルが公開されていないことがあるので、URLの階層を上に辿ってみる。その結果例えば「`..._2.10`はないけど `..._2.11` はある」ということが分かったら、build.sbtの依存性定義 `libraryDependencies ++= Seq(...)` のところでscalaバージョンを `2.11` に明示的に指定する。

## B. キャッシュのクリア
1. `~/.ivy2/local/`, `~/.ivy2/cache/` のディレクトリにそれぞれ見つからないライブラリの名前のフォルダがあれば、それを消す
2. プロジェクトの `./target` ディレクトリ、`./project/target` ディレクトリを消す
3. sbt で `clean` `update` タスクを順に実行する
プチコン３号メモ


プチコン３号を触るに当たってのメモです。
週末ぐらいしか遊べないので、週末があれば随時更新する予定。

## 公式情報等
[公式ホームページ](http://smileboom.com/special/ptcm3/)
[マニュアル](http://smileboom.com/special/ptcm3/manual/)
[リファレンス等](http://smileboom.com/special/ptcm3/download/)
[障害情報](http://smileboom.com/special/ptcm3/debug/)

# とりあえず、やってみる
[公式ホームページ](http://smileboom.com/special/ptcm3/)にあるようにプログラムを打ち込んで動かしてみる。

```
SPSET 0,501
WHILE 1
 TOUCH OUT I,X,Y
 IF I THEN SPOFS 0,X,Y
WEND
```

をEDITで入力、```RUN```で実行。
すでになんらかのプログラムが入力済みの場合、```NEW```で消去できる。

命令の詳細はその行で右上の？を押すと詳細がでます。  
ヘルプのスクロールはアナログキーの上下と、オーバーロードがある時は左右で。


## 体裁を整えてみる
そのまま実行すると、下画面がキーボード表示のままだったりするので、表示を変更。
```
XSCREEN 3
```
を足して、キーボードを表示しないようにする。

```
CLS
```
でコンソール画面もクリアします。

```
CLS
XSCREEN 3
SPSET 0,501
WHILE 1
 TOUCH OUT I,X,Y
 IF I THEN SPOFS 0,X,Y
WEND
```
終了(中止)するときはSTARTボタンを押します。

## 入力を足してみる
終了(中止)がSTARTボタンでの強制終了なので、Xボタンで終わるようにします。
```
WHILE BUTTON(1)!=64
```

```
CLS
XSCREEN 3
SPSET 0,501
WHILE BUTTON(1)!=64
 TOUCH OUT I,X,Y
 IF I THEN SPOFS 0,X,Y
WEND
```

## BGMを鳴らす
いつの間にかスマイルツールをいじりながら、
「BGMは008がいいよねー」というので、BGMを追加。

```
BGMPLAY 0,8
```
で開始、
```
BGMSTOP 0,1.0
```
で停止。フェードアウト指定ができるみたいなので、少しそれっぽく。

```
CLS
XSCREEN 3
SPSET 0,501
BGMPLAY 0,8
WHILE BUTTON(1)!=64
 TOUCH OUT I,X,Y
 IF I THEN SPOFS 0,X,Y
WEND
BGMSTOP 0,1.0
```

## プログラムの保存
DIRECTモードで、```SAVE```命令を使用します。
テストプレイしてもらう前にはセーブ必須。

## 描画設定の初期化
別のプログラムを動作させた後等、スプライトやBGの状態が変更されている場合があります。
```ACLS```で起動時の状態になります。

ということで、初期化部分を```ACLS```に変更。

```
ACLS
XSCREEN 3
SPSET 0,501
BGMPLAY 0,8
WHILE BUTTON(1)!=64
 TOUCH OUT I,X,Y
 IF I THEN SPOFS 0,X,Y
WEND
BGMSTOP 0,1.0
```

とりあえず、今日はこの辺(SB33NKNV)まで。
最終的にやりたい事があるので、のんびり進めていく予定です。

## BGの読み込みと表示
「後ろに木とか表示したらいいんじゃない？」と言われたのでBG表示を追加します。  
BG用のマップの作成はスマイルツールからのマップ作成ツールで行い、事前に保存しておきます。  

なお、マップ作成ツールで保存したデータはそのままでは読み込めない(ヘッダやら個々の情報も格納されてる)ので、サンプルのGAME3JUMPのLOADSUBをコピペして利用します。

```
LOAD"PRG1:SYS/GAME3JUMP"
```
ダイレクトモードで上記コマンドを入力。
SLOT1に読み込まれるので、LOADSUB関数部分を検索してコピペします。

```
ACLS
XSCREEN 3,128,4	'BGの割り当ても行います
LOADSUB "DAT:BGTEST"	'マップ作成ツールで保存したファイルの呼び出し
SPSET 0,501
BGMPLAY 0,8
WHILE BUTTON(1)!=64
 TOUCH OUT I,X,Y
 IF I THEN SPOFS 0,X,Y
WEND
BGMSTOP 0,1.0

`GAME3JUMPよりコピペ
DEF LOADSUB N$
`省略
END
```

## TODO アナログスティックでの移動
IDCFクラウドでLBでの負荷分散をしてみる


[こちら](http://qiita.com/nenokido2000/items/ad7fd0010fbaea46e7a7)で仮想マシンの立ち上げを試してみました。
今度は、仮想マシンを2台立ち上げて負荷分散設定をしてみます。

環境は以下のとおりです。

* クライアントPC：MacOS X 10.9.5
* 使用した仮想マシンタイプ：light.S1
* 立ち上げた仮想マシンの名前：test-web-1, test-web-2

仮想マシンの立ち上げまでを済ませ、各仮想マシンにApacheをインストール・稼働させている体で進めます。

## LB設定を入れる
クラウドコンソールから対象となるIPアドレスを選択して、ロードバランサーのタブから以下の設定を追加します。

|管理名|パブリックポート|プライベートポート|アルゴリズム|接続維持|仮想マシン|
|-----------------|---------|---|-----|-----|-----------------|
|test-lb|80|80|roundrobin|なし|test-web-1,test-web-2|

ファイアウォールで、追加したLB設定のパブリックポートの口開けを設定します。

|コメント|ソースCIDR|タイプ|ポートレンジ|
|--------------|---------|---|-----|
|tes-lb|My IPを指定※|TCP|80|

※テスト用環境のため、外部からアクセス出来ないようにMyIP指定としています。

これでabとかでグローバルIPに対してリクエストを投げると、2つの仮想マシンにリクエストが入ることが確認できました。
（IPはxxxとしています）

```
ab -n 100 -c 100 http://xxx.xxx.xxx.xx/
```

## リモートIPの取得

ロードバランサ通すと、access_logに載るリモートホストがロードバランサのIPとなってしまいます。
プロキシ通してるのと同じなので、当たり前といえば当たり前ですね。

``` access_log
10.3.0.133 - - [12/Nov/2014:19:57:51 +0900] "GET / HTTP/1.0" 200 130 "-" "ApacheBench/2.3"
```

AWSのELBとかも同じですが、 *X-Forwarded-For* ヘッダが
IDCFクラウドでも使用できるようです。

ということで、LogFormatに「X-Forwarded-For」を追加してみます。

```httpd.conf
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %{X-Forwarded-For}i" combined
```

結果(IPはxxxとしてます）

``` access_log
10.3.0.133 - - [13/Nov/2014:13:59:36 +0900] "GET / HTTP/1.0" 200 130 "-" "ApacheBench/2.3" xxx.xxx.xxx.xx
```

と出力されることが確認できました。

しかし、HTTPSでは「X-Forwarded-For」は使用できないそうです。

http://www.idcf.jp/cloud/faq/nw_017.html

SSLアクセラレータの機能も仮想ルータでは提供されていないようなので、LB分散した先のWEBサーバ（Nginx）をアクセラレータとしようと考えていたのですが。。。
自前でLB立てて運用というのも、それはそれで面倒ですしね。
ELBのように、仮想ルータ（LB機能側）でSSLアクセラレータの機能が搭載されることを期待したいです。
error: type of thread-local variable has non-trivial destruction が出てしまった場合の対処方法


```
class	CFooBar
{
	int	_Foo;
	CFooBar()
		:	_Foo(0xdead)
	{
	}
	~CFooBar()
	{
	}
};
__thread	CFooBar	_CFooBar;

```

をビルドして

```
error: type of thread-local variable has non-trivial destruction
```

とエラーが出てしまた場合の対処方法

##対処方法

デストラクタを消す。

```
class	CFooBar
{
	int	_Foo;
	CFooBar()
		:	_Foo(0xdead)
	{
	}
};
__thread	CFooBar	_CFooBar;

```
bootstrap3でのサイト作成時の所感

ゲームの紹介サイトを作成している際に気になったことを共有します。  
bootstrap3を活用すると、スマートフォン、タブレット、PCのどれでも見やすいサイトが作成できます。  

作成しましたサイトはこちらとなります。
- 世界は今日も夢を見る。
http://plus.next-soft.net/SekaYume/  

![sekayumeimage.jpg](https://qiita-image-store.s3.amazonaws.com/0/52207/78f22729-1a8b-233e-6147-004489cc3332.jpeg) ![sekayumeimage2.jpg](https://qiita-image-store.s3.amazonaws.com/0/52207/2b07e410-a8a4-26ed-3e78-73408b06e336.jpeg)


# bootstrap3について
  
2014年11月現在。Currently v3.3.1
http://getbootstrap.com/
なお、2013-08 にbootstrap 3はリリースされています。  

## 移行時に気になったこと
以前にbootstrap2でおおよその枠組みを作っていましたが、bootstrap3が主流になってしまったので急遽差し替えました。  

bootstrap3になって、設置方法、cssでの呼び出し方について大幅刷新されたため、
基本コンセプト以外はすべて覚えなおしと思っても差し支えないぐらい変化しました。
たとえば、アイコンマークを示す機能一つを取っても、以下のような具合で異なります。
旧
```<i class="icon-star"></i>
```
新
```<span class="glyphicon glyphicon-star"></span>
```

参考：
http://cccabinet.jpn.org/bootstrap3/components1.php  

要素自体はあまり変わらない物の記述はそのまま流用できないため、タグを適宜置き換えていく形となりました。  
ルール付けについては似通っているので、移行作業自体は置き換えに近いです。  

## bootstrapの新機能

bootstrap3では機能が加わって、bootstrap単体機能でも実用的なモジュールが追加されました。
画面を秒数ごとに切り換えるスライダーの実装、lightboxなどに代表されるmordalウィンドウの実装が行われており、
試しに使ってみましたが、おおよそ必要な機能は備えているのでまずは使うことを検討してもいいのではと考えます。

リキッドレイアウトについてもbootstrap2と比べてもcssへの追加記述なしで実施できますが、
レイアウトはよいとしても注意点としては、文字サイズについては実装が豊かではないので、
cssで直接メディアサイズごとに切り換える方法で書いて分けるほうが良いようです。

## 自分で実装したほうが良い項目
また、背景色、画像などの色彩については、設定できない個所は、まずはcssで置き換えを検討するほうがよいようです。
css入れ替えを検討するには元のcssの分量が多いこともあり変更する量が極めて大きいため、
基本のbootstrapのcssを入れた後、最小限の個所を差し替えるスタイルとしました。

以下はメディアサイズ毎にフォントを差し替えた例となります。  

cssの抜粋。

```
/* レスポンシブのフォントサイズ指定 */

@media screen and (min-width: 0px) and (max-width : 767px){
	* {
		font-size:12px;
	}
	h1,h2 {
		font-size: 1.5em;
	}
	h3,h4 {
		font-size: 1.3em;
	}
	p,div, .panel-title, .form-control {
		font-size: 1em;
	}
	p.story  {
		font-size: 1.0em;
	}
	.copyright{
		font-size: 0.7em;
	}
}

@media screen and (min-width: 768px) and (max-width : 991px){
	* {
		font-size:14px;
	}
	.copyright{
		font-size:14px;
	}
	p.story  {
		font-size:14px;
		line-height: 1.8;
	}

}
 
@media screen and (min-width : 992px) {
	* {
		font-size:16px;
	}
	.copyright{
		font-size:18px;
	}
	p.story  {
		font-size:18px;
		line-height: 1.8;
	}

}
```

作業の際にはこちらを大変参考にしました。
http://cccabinet.jpn.org/bootstrap3/css.php