OmniAICreator/Qiita-1.07M huggingface dataset:
Cflat Compilerをインストールしてみました

## はじめに

Cflat Compilerのインストール作業について少し書きます。使用したOSはOSX 10.9です。

## Download

[こちら][1]から圧縮ファイルをダウンロードします。

## Install

インストールの流れは次のようになります。

- コマンドラインの実行
- スクリプトファイル(/usr/local/cbc/bin/cbc)の編集

順番に見ていきます。
まずはコマンドラインです。

``` bash
$ tar -xk cbc-1.0.1.tar.gz
$ cd cbc-1.0.1
$ ./install.sh
$ ln -s /usr/local/cbc/bin/cbc /usr/local/bin/cbc
```

次にスクリプトファイルです。
（readlink コマンドのオプションを -f から -n に変更します。）

こちらが編集前です。

``` bash
JAVA=${JAVA:-java}

cmd_path="$(readlink -f $0)"
srcdir_root="$(dirname "$(dirname "$cmd_path")")"
```

こちらが編集後です。

``` bash
JAVA=${JAVA:-java}

cmd_path="$(readlink -n $0)"
srcdir_root="$(dirname "$(dirname "$cmd_path")")"
```

インストール後にはcbcコマンドで抽象構文木をテキストとして表示できます。
編集前に抽象構文木をテキストとして表示させようとすると、次のようになります。

> $ cbc --dump-ast hello.cb
> readlink: illegal option -- f
> usage: readlink [-n] [file ...]
> エラー: メイン・クラスnet.loveruby.cflat.compiler.Compilerが見つからなかったかロードできませんでした

## コンパイルはできないけれど

「ふつうのコンパイラをつくろう」（ソフトバンク クリエイティブ）を読み直しています。私の環境では、ソースファイルをコンパイルできません。しかし、抽象構文木などをテキストとして表示できます。中間表現まで読んでみましたが、コンパイルは本筋と関係ないようです。

「ふつうのコンパイラをつくろう」お気に入りの一冊です！

[1]: http://i.loveruby.net/ja/stdcompiler/
Juliaの開発環境(Emacs + ESS)


現在 Emacs における [Julia](http://julialang.org) の開発環境は julia-mode.el と ESS があります。

julia-mode.el
https://github.com/JuliaLang/julia/blob/master/contrib/julia-mode.el

ESS (Emacs Speaks Statistics)
http://ess.r-project.org/

julia-mode.el は Julia の github リポジトリで提供されている elisp です。
しかし現時点では julia-mode.el はキーワードの色付けといった基本的な機能しかありません。

ESS (Emacs Speaks Statistics) は R や S といった統計解析言語のためのメジャーモードです。
R 言語の開発環境の中でも最も強力な環境の一つです。

この ESS 実は Julia にも対応しています。
ESS を導入することで Julia でも高度な補完機能，eldoc の対応や Emacs 内でのインタプリタ起動が実現できます。
本ページでは ESS の導入方法と簡単な開発例を示します。


# インストール

ESS は結構活発に開発されているので package.el でインストールするか [github](https://github.com/emacs-ess/ESS) から直接インストールして利用する方が良いと思います。

package.el が一番簡単にインストールできます。
`M-x package-install` で `ess` と入力すればインストールできます。

github からインストールする場合は

```bash
$ git clone https://github.com/emacs-ess/ESS.git
$ cd ESS
$ make
$ make install
```

でインストールできます。

なお auto-complete.el も導入しておくと補完機能が利用できます。


# 使い方

正常にインストールできていれば

```el
(require 'ess-site)
```

で ESS モードが利用できます。
最新版をインストールしていれば特別な設定なしに拡張子 .jl のファイルを開くと ESS モードになると思います。
`M-x julia` で Julia のインタプリタが Emacs 内で起動します。
`M-x ess-load-file` または `C-c C-l` で .jl ファイルをインタプリタで評価できます。
Emacs のモードラインが (ESS[julia] [julia]) になっていれば，そのファイルで補完機能や eldoc が有効になります。

![Screenshot_from_2013-12-14 09:32:46.png](https://qiita-image-store.s3.amazonaws.com/0/33923/6540a1ab-bfee-4097-a8f3-162c68640728.png)

ESS の機能はかなり豊富なので詳しい使い方や設定方法は本家のドキュメント

http://ess.r-project.org/Manual/ess.html

を読むことをおすすめします。


# まとめ

Emacs と ESS による Julia の開発環境を紹介しました。
個人的に現時点で最も高機能な Julia の開発環境だと思います。
R の開発で ESS を利用していた方が違和感なく Julia の開発環境を構築できることもメリットだと思います。
Unity4.3新機能とか Haxeで何かつくったはなし。(前編 ： Haxeビルドまで。) 

Haxeで、Unity3Dの4.3の新機能を使い、2Dゲームを作った話し。

# Haxe + Unity3D

* Unity3d 4.3.1
* Haxe 3.0.1

エディタ

* Sublime Textでやってみた。

## 環境構築

* Mac OS 10.9, Marvericks

### Unity

* 公式からインストール ( http://japan.unity3d.com/unity/download/ )

### Haxeのインストールとか

やりかたは2つ

* ココでダウンロードする( http://haxe.org/download )
* 最近はhomebrewで入れるのもありかも ( brew install haxe )


###  ひたすらhaxelib install

コンパイルしたりするのに必要だお

```
haxelib install hxcs
haxelib install unity3d
```


### プロジェクトを作る。

はいこんな感じ、Unity3d起動して、New Project。プロジェクト名は「Haxe-Unity」

![スクリーンショット 2013-12-14 9.36.23.png](https://qiita-image-store.s3.amazonaws.com/0/31381/30dca196-befd-a13d-db64-8f2f629ad16f.png)


### Unity3dで、Haxeをビルドしてみたりする

さて、Unity3dのプロジェクトは、Assets Folderにイロイロスクリプトやら、画像やらモデルデータを放り込むので、Assets FolderにHaxeのコードも含めるようにしよー。

ターミナルで

```
# Haxe-Unityに移動する。
cd Haxe-Unity
# Haxeでなんかやるディレクトリ
mkdir haxe
# Haxeのソースを置くディレクトリ
mkdir haxe/src
```

という感じでディレクトリを構成しておいて、

build.hxmlを、Haxe-Unity/haxe/build.hxmlに置いて、こんな感じでhxmlを書いておくんー。

```hxml
-lib unity3d
-cp src/
-cs cs
-D no-compilation
MyClass
```

これは、MyClassというhaxeのクラスをUnityでコンパイルするという意味です。そしたら、haxeでMyClassをつくりましょう。MyClass.hxを、src以下に配置したー。

ちなみにコードはコレ

speedとTargetを指定して、それに向かって進むというスクリプトですの。

```hx:MyClass.hx
package ;
import unityEngine.MonoBehaviour;
import unityEngine.Time;
import unityEngine.Vector3;
import unityEngine.GameObject;
using UnityHelper;

class MyClass extends MonoBehaviour {
    public var target:GameObject;
    public var speed:Single;
    private function Start():Void {
        
    }
    private function Update():Void {
        if (speed == 0) return;
        getTransform().position = Vector3.MoveTowards(getTransform().position, target.transform.position, Time.deltaTime * speed);
    }
}
```

そしたら、ビルドしてみる

```
haxe build.hxml
```

とすると csディレクトリができて、めっちゃそれ以下に一杯ファイルができる。
んで、Unity3dが出きたcsファイルぜーんぶコンパイルしようとするので、ちょっとスクリプトが有効になるまで時間がかかります。


### MyClassをつかってみる。

Scene設定はこんな感じ

![スクリーンショット 2013-12-14 10.34.30.png](https://qiita-image-store.s3.amazonaws.com/0/31381/0f45eba3-1b70-0d9c-7bfb-a73b0e247e08.png)

CubeのInspectorはこんなかんじ

![スクリーンショット 2013-12-14 10.34.53.png](https://qiita-image-store.s3.amazonaws.com/0/31381/57238523-6970-3471-095a-c72e28cacae6.png)

これで実行すると、Main CameraにCubeが近づいていきます。


## 後編へ続く

 こっからは、Unity2Dの機能とかをフルに使って2Dゲームを作って行くので、明日の
Unity Advent Callendar ( http://qiita.com/advent-calendar/2013/unity )が僕の担当なのでそこで、ゲームもUnity2D + Haxeで、2Dゲームを作る(後編)をやります。たのしみにねー。

## 明日のHaxe Advent Callendarは
@arlez80君です。よろしくー。
Python の subprocess で出力を受け取るときは communicate() を使おう



ドキュメントに書いてあっても 読んでない or 忘れていた 私のためのメモ。

Pythonで 子プロセスを実行するときには subprocess モジュールを使うことが推奨されています。
その子プロセスの標準出力やエラー出力を受け取るときに、 `p.stdout.read()` や `p.stderr.read()` を使っていると
子プロセスの出力するデータ量が多い時に **刺さって** しまいます。代わりに `p.communicate()` を使うと良いです。

その件については、下記ドキュメントの中段辺りに
http://docs.python.jp/2.7/library/subprocess.html


> 
警告
stdin.write(), stdout.read(), stderr.read() を利用すると、別のパイプのOSパイプバッファがいっぱいになってデッドロックする恐れがあります。これを避けるためには communicate() を利用してください。

と書かれていますが、うっかり使って（そしてその問題にハマって）いたのでメモです。

以下、簡単な検証コードです。

`read()`は子プロセスの出力データ量が10KBのときはOKでしたが、100KBのときはダメでした。
`communicate()`を使えば両方ともOKでした。

```python:spike.py
import subprocess


def bad_impl(cmd):
    print "start bad_impl %s" % cmd
    p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    print "waiting"
    p.wait()
    stdout_data = p.stdout.read()
    stderr_data = p.stderr.read()
    print "finish: %d %d" % (len(stdout_data), len(stderr_data))
    return p.returncode, stdout_data, stderr_data


def better_impl(cmd):
    print "start better_impl %s" % cmd
    p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    print "waiting"
    stdout_data, stderr_data = p.communicate()
    print "finish: %d %d" % (len(stdout_data), len(stderr_data))
    return p.returncode, stdout_data, stderr_data

command1 = "python -c 'print str(1) * 10000'"           # 10KB の出力
command2 = "python -c 'print str(1) * 100000'"          # 100KBの出力

better_impl(command1)
print "=" * 50
bad_impl(command1)
print "=" * 50
better_impl(command2)
print "=" * 50
bad_impl(command2)            # これが失敗する
```
```
% python spike.py
start better_impl python -c 'print str(1) * 10000'
waiting
finish: 10001 0
==================================================
start bad_impl python -c 'print str(1) * 10000'
waiting
finish: 10001 0
==================================================
start better_impl python -c 'print str(1) * 100000'
waiting
finish: 100001 0
==================================================
start bad_impl python -c 'print str(1) * 100000'
waiting
↑ここで制御が戻ってこない
```

更に言えば
========

`communicate()` の部分にも以下のような記述があります。

>
ノート
受信したデータはメモリ中にバッファされます。そのため、返されるデータが大きいかあるいは制限がないような場合はこのメソッドを使うべきではありません。

利用できるメモリ上限を超える場合はこれもダメというわけですね。
その場合は逐次読みだして、ファイルに保存するなりしないといけないわけですね。
そういう数GBのデータを扱うような場合は、その時にまた考えよう… （＾＾；
ワンポイント・CoffeeScript で jQuery を操作してDOM要素を組み立てる

#### **追記** CoffeeScript-1.7.0 で改行後の `.` の扱いが変わっています。
1.7.0以降では１行で記述するか、適宜行末に `\\` を追加して下さい。

##　
気分としては「twitterで一言つぶやきたい」だけの内容。
気づいて「へー」と思ったので書いておく。たぶん有名なんだよね。
## 例

```html:test.html
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>test</title>
</head>
<body>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.10.2.js"></script>
<script type="text/javascript" src="test.js"></script>
</body>
</html>
```

```coffeescript:test.coffee
$('body')
    .append $('<div>')
    .append $('<span>')
    .append 'HOGE'
```

こうすると、このようにコンパイルされ、

```js:test.js
  // Generated by CoffeeScript 1.6.3
  $('body').append(($('<div>')).append(($('<span>')).append('HOGE')));
```
実行されると、このような結果になる。

```html
<body>
  <div>
    <span>HOGE</span>
  </div>
</body>
```

## 補足
ポイントは、

```coffeescript
$('body').append($('<div>')).append($('<span>')).append('HOGE')
```
↓　は、

```js
  $('body').append($('<div>')).append($('<span>')).append('HOGE');
```
となるが、

```coffeescript
$('body').append   ($('<div>')).append   ($('<span>')).append('HOGE')
```
↓　なら、

```js
  $('body').append(($('<div>')).append(($('<span>')).append('HOGE')));
```
となる事。 ※append の後の空白に注目。

空白がないと以下のような結果になる。

```coffeescript
$('body')
    .append('<div>')
    .append('<span>')
    .append('HOGE')
```

```html
<body>
  <div></div>
  <span></span>
  HOGE
</body>
```
場面によって使い分けよう。
プロジェクト配下のtypoをワンライナーで一括修正


# 例
gozillaをmozillaに直したい。

# 調査
カレントディレクトリ配下を検索して影響範囲を調査。

```sh
-> % find . -type f | xargs grep gozilla
```
```
./blocklist.xml:<blocklist xmlns="http://www.gozilla.org/2006/addons-blocklist">
./modules/virtualFolderWrapper.js:    let rdfService = Cc['@gozilla.org/rdf/rdf-service;1']
./modules/virtualFolderWrapper.js:      Cc["@gozilla.org/messenger/services/filters;1"]
./res/mathml.css: * http://www.gozilla.org/MPL/
```

`grep -l`で修正対象ファイル名一覧を出す。

```sh
-> % find . -type f | xargs grep -l gozilla
```
```
./blocklist.xml
./modules/virtualFolderWrapper.js
./res/mathml.css
```

3ファイル、4箇所にわたって修正する必要がありと分かる。

# 修正

PerlのIn-place editオプション`-i`を使って一括修正。  
元ファイルを`.bak`という名前で残しつつ修正する。

```sh
-> % find . -type f | xargs grep -l gozilla | xargs perl -pi.bak -e 's/gozilla/mozilla/'
```

実行後はこのような感じになっている。

```
./blocklist.xml
./blocklist.xml.bak
./modules/virtualFolderWrapper.js
./modules/virtualFolderWrapper.js.bak
./res/mathml.css
./res/mathml.css.bak
```

# 確認

バックアップ用拡張子.bakを検索し、修正後の結果とdiffを取って正しく直っていることを確認。

```sh
-> % find . -name '*.bak' | sed 's/\(.*\).bak/diff \1 &/' 
```
sedの`\1`は正規表現の後方参照用にキャプチャした文字列の１個目。
`&`は正規表現にヒットした全部の文字列。つまり以下のコマンド文字列を生成している。

```
diff ./blocklist.xml ./blocklist.xml.bak
diff ./modules/virtualFolderWrapper.js ./modules/virtualFolderWrapper.js.bak
diff ./res/mathml.css ./res/mathml.css.bak
```

シェルに流して実行

```sh
-> % find . -name '*.bak' | sed 's/\(.*\).bak/diff \1 &/' | sh
```

実行結果

```
2c2
< <blocklist xmlns="http://www.mozilla.org/2006/addons-blocklist">
---
> <blocklist xmlns="http://www.gozilla.org/2006/addons-blocklist">
159c159
<     let rdfService = Cc['@mozilla.org/rdf/rdf-service;1']
---
>     let rdfService = Cc['@gozilla.org/rdf/rdf-service;1']
210c210
<       Cc["@mozilla.org/messenger/services/filters;1"]
---
>       Cc["@gozilla.org/messenger/services/filters;1"]
7c7
<  * http://www.mozilla.org/MPL/
---
>  * http://www.gozilla.org/MPL/
```
左が修正後、右が修正前の(typoを含んだ)オリジナル

# 切り戻し

修正用のPerlの正規表現を間違えたなど、元の状態に戻したい場合。

```sh
-> % find . -name '*.bak' | sed 's/\(.*\).bak/mv & \1/'
```
```
mv ./blocklist.xml.bak ./blocklist.xml
mv ./modules/virtualFolderWrapper.js.bak ./modules/virtualFolderWrapper.js
mv ./res/mathml.css.bak ./res/mathml.css
```

diffの時と同様、修正前のオリジナルである.bakを元ファイル名にmvするコマンド文字列を生成した後、シェルに流して実行。

```sh
-> % find . -name '*.bak' | sed 's/\(.*\).bak/mv & \1/' | sh
```

# 後始末
.bakファイルはtypo修正確認後は不要のため削除。

```sh
-> % find . -name '*.bak' | xargs rm
```


# 補足
Git等を使っていたらPerlのIn-place editオプション`-i`は空文字指定にしておくと削除の手間が省けます。

```sh
-> % find . -type f | xargs grep -l gozilla | xargs perl -pi.bak -e 's/gozilla/mozilla/'
```
ではなくて

```sh
-> % find . -type f | xargs grep -l gozilla | xargs perl -pi -e 's/gozilla/mozilla/'
```

確認や切り戻しも`git diff`、`git reset`等で可能。
RAID1のHDDが片方だけ手元にあるときのマウント方法

mount
-----------

```bash:mount
# mdadm --assemble /dev/md1 /dev/sde1
mdadm: /dev/md1 assembled from 1 drive - need all 2 to start it (use --run to insist).
# ls -l /dev/md1
brw-rw---T 1 root disk 9, 1 12月 14 06:49 /dev/md1
# mdadm --run /dev/md1
mdadm: started /dev/md1
# mount -o ro /dev/md1 /mnt
```

umount
------------

```bash:umount
# umount /mnt
# sudo mdadm --stop /dev/md1
```

その他確認方法
---------------

```bash:ファイルシステムがLinuxRaidAutodetectであることを確認。
# fdisk -l /dev/sde
Disk /dev/sde: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders, total 976773168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0001d3aa

   Device Boot      Start         End      Blocks   Id  System
/dev/sde1            2048   976771071   488384512   fd  Linux raid autodetect
```

```bash:認識したか確認(md1)
# cat /proc/mdstat 
Personalities : [raid1] 
md1 : active raid1 sde1[0]
      488253248 blocks super 1.2 [2/1] [U_]
      
md0 : active raid1 sdb1[0] sdc1[1]
      976630336 blocks super 1.2 [2/2] [UU]
      
unused devices: <none>
```



```bash:HDDが片方しかない場合の表示
# mdadm -D /dev/md1
/dev/md1:
        Version : 1.2
  Creation Time : Wed Aug  7 20:15:15 2013
     Raid Level : raid1
     Array Size : 488253248 (465.63 GiB 499.97 GB)
  Used Dev Size : 488253248 (465.63 GiB 499.97 GB)
   Raid Devices : 2
  Total Devices : 1
    Persistence : Superblock is persistent

    Update Time : Sat Dec 14 06:59:51 2013
          State : clean, degraded
 Active Devices : 1
Working Devices : 1
 Failed Devices : 0
  Spare Devices : 0

           Name : server2:0
           UUID : 2b74a108:2cc695cd:3a89d850:27a782fb
         Events : 172

    Number   Major   Minor   RaidDevice State
       0       8       65        0      active sync   /dev/sde1
       1       0        0        1      removed
```

```bash:HDDが2つある時の表示
# mdadm -D /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Sat Oct  5 05:10:37 2013
     Raid Level : raid1
     Array Size : 976630336 (931.39 GiB 1000.07 GB)
  Used Dev Size : 976630336 (931.39 GiB 1000.07 GB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent

    Update Time : Sat Dec 14 07:00:47 2013
          State : active
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

           Name : take:0
           UUID : 085f26a1:5a98bf98:27fb0e99:3d06d852
         Events : 101

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       33        1      active sync   /dev/sdc1
```
paiza POH ec-campaign (Python/Ruby) (not tuned well)

|問題|https://paiza.jp/poh/ec-campaign|
|:--|:--|
|タイム一覧/C++|http://qiita.com/cielavenir/items/a61cfe8390eb16866ae5|
|Python/Ruby(1)|http://qiita.com/cielavenir/items/b10ff4d201150f525062|
|C#/Java/Python/Ruby|http://qiita.com/cielavenir/items/d89e85f069cf570e6786|
|Perl/PHP|http://qiita.com/cielavenir/items/1a650a4c41d7bdd31392|
|JavaScript|http://qiita.com/cielavenir/items/a85b985888fdc15c52b7|
|Go/CoffeeScript/Scala/R/Bash|http://qiita.com/cielavenir/items/79016a0afd30470f440d|
|VB/F#/D|http://qiita.com/cielavenir/items/cb6094bab56253de992c|

C++の3番をPythonとRubyに移植してみました(PythonやRubyの配列はC(++)とは事情が違うのかバケットソートしたら逆に遅くなりました)。

Python (0.54s)
無駄に3.3でも動くようにしていたりする
http://paiza.jp/poh/ec-campaign/result/99a7b5e35cf1bd095e45504931c15635

```py:paizapoh1.py
#!/usr/bin/python
import sys,bisect
if sys.version_info[0]>=3:
	raw_input=input
	xrange=range

n,d=[int(e,10) for e in raw_input().split()]
v=sorted([int(raw_input(),10) for i in xrange(n)])
for i in xrange(d):
	m=int(raw_input())
	r=j=0
	#k=n-1
	k=bisect.bisect_right(v,m-v[0])-1
	while j<k and v[j]+v[j+1]<=m:
		while v[j]+v[k]>m: k-=1
		if r<v[j]+v[k]:
			r=v[j]+v[k]
			if r==m: break
		j+=1
	print(r)
```

Ruby (0.34s)
paizaのRubyは1.9.3なのでbackports gemから引用。2.0.0ならbsearch部分はC言語になるのでより高速化されるであろう。
http://paiza.jp/poh/ec-campaign/result/885ab06217b9e35f56b2baaf8193ba2d

```rb:paizapoh1.rb
#!/usr/bin/ruby
#https://github.com/marcandre/backports/blob/master/lib/backports/2.0.0/range/bsearch.rb
unless Range.method_defined? :bsearch
  class Range
    def bsearch
      return to_enum(:bsearch) unless block_given?
      from = self.begin
      to   = self.end
      unless from.is_a?(Numeric) && to.is_a?(Numeric)
        raise TypeError, "can't do binary search for #{from.class}"
      end

      midpoint = nil
      if from.is_a?(Integer) && to.is_a?(Integer)
        convert = Proc.new{ midpoint }
      else
        map = Proc.new do |pk, unpk, nb|
          result, = [nb.abs].pack(pk).unpack(unpk)
          nb < 0 ? -result : result
        end
        from = map['D', 'q', to.to_f]
        to   = map['D', 'q', to.to_f]
        convert = Proc.new{ map['q', 'D', midpoint] }
      end
      to -= 1 if exclude_end?
      satisfied = nil
      while from <= to do
        midpoint = (from + to).div(2)
        result = yield(cur = convert.call)
        case result
        when Numeric
          return cur if result == 0
          result = result < 0
        when true
          satisfied = cur
        when nil, false
          # nothing to do
        else
          raise TypeError, "wrong argument type #{result.class} (must be numeric, true, false or nil)"
        end

        if result
          to = midpoint - 1
        else
          from = midpoint + 1
        end
      end
      satisfied
    end
  end
end

n,d=gets.split.map(&:to_i)
v=n.times.map{gets.to_i}.sort
d.times{
	m=gets.to_i
	r=j=0
	k=((0...v.size).bsearch{|i|m-v[0]<v[i]}||v.size)-1 # upper_bound-1
	while j<k&&v[j]+v[j+1]<=m
		k-=1 while v[j]+v[k]>m
		if r<v[j]+v[k]
			r=v[j]+v[k]
			break if r==m
		end
		j+=1
	end
	p r
}
```
vagrant のdocker provisionerにプルリクした

vagrantにプルリクしました

https://github.com/mitchellh/vagrant/pull/2649


----
vagrant 1.4 で追加された機能にdockerのprovisionerがありました。

http://docs.vagrantup.com/v2/provisioning/docker.html

```
Vagrant.configure("2") do |config|
  config.vm.provision "docker" do |d|
    d.run "base",
      cmd: "bash -l",
      args: "-v '/vagrant:/var/www'"
  end
end
```

しかしながら、こいつはRHEL系で動かないという報告が上がっていました。
ソースを見てみたところ、redhat系向けの実装がありませんでした。

これはチャンスと思って（！）debian系のソースを流用してサクッと書いてみました。
CentOS6.5でテストしています。

１日ハマったのは、dockerの起動にserviceコマンドを使うのですが、これが非同期なので
後続のdockerの起動確認を行う際に立ち上がりきっておらず、結果失敗するということでした。

結構罠ですね・・・
三角関数その4 画像が残っていないため途中で強制終了しました。


はい。
前回
三角関数その3
[http://qiita.com/clarinet758/items/2758da8e163e091a4491](http://qiita.com/clarinet758/items/2758da8e163e091a4491)

はい。書いてた本人がどこまで書いたかも覚えてなく、三角関数ってなんでしたっけ状態です。

```cat:おさらい問題
αが鈍角でsinα＝１/３のとき cosα,tanαの値を求めよ

:ポイントまず、αが鈍角ということはcosα,tanαの符号はどうなるか？？？
（鈍角は90°より大きく180°より小さい場合のことですね。90°より小さくて鋭角。90°なら直角ですね。）

```

はい。コレだと鋭角の場合の図なのですが
!![http://www.nowshika.com/joso/img11030332.png](http://www.nowshika.com/joso/img11030332.png)
鈍角になるとxの値が負の領域に行くのでcosα,tanαの符号はマイナスになります。

前回も使った式の1^2 = (cosα)^2 + (sinα)^2に’より
sinα=1/3 を(sinα)^2すると1/9ですね。
そうすると (cosα)^2は8/9でcosαは√(8/9)は2√2/3(3ぶんの2ルート2)

になるようで今回は鈍角の場合でなので-(2√2/3)でしょうか。
元記事では
```　cosα＝-2（√２）/3　　これがただしい```
との記述なのですが数値は全てカッコで括って符号を先頭に出すの良い気がしますが、よくわかっておりませぬ。。。

tanαはsinα/cosαなのです。-2√2ですね。
元記事は```tanα＝-2（√２）```ですが同様によくわからず。

はい。図が後出しなのですが、元記事の図は失われているのですが角αの位置によってこんな呼び方・表現が用いられることがありますね
![http://www.nowshika.com/joso/img12140228.png](http://www.nowshika.com/joso/img12140228.png)

はい。
![http://www.nowshika.com/joso/img10202116.png](http://www.nowshika.com/joso/img10202116.png)
という図がありましたね。鋭角の場合の図ですけど。
sinα=高さ/斜辺　sinα*斜辺=高さcosα=底辺/斜辺　cosα*斜辺=底辺
tanα=高さ/底辺　tanα*底辺=高さ
という関係になっていて斜辺を都合の良い1であるとした場合(斜辺が大きくなれば同様にx,yの値も大きくなるので最終的にsin,cosの値は変わりませぬ)
sinα＝Y　cosα＝X　tanα＝Y/X なのです。
入れ替えたりで
sin（-α）＝－Y＝-sinαcos（-α）＝X＝cosαtan（-α）＝-Y/X＝-tanα
などなどの関係が成り立ちます。

そして、話は加法定理へ行きます。

---Wikipedia引用ここから---
####加法定理
数学、物理学等において、加法定理（かほうていり、addition theorem）、加法法則（かほうほうそく、additive law）あるいは加法公式（かほうこうしき、addtive formula）とは、ある関数や対応・写像について、二つ以上の変数の和として記される変数における値を、それぞれの変数における値によって書き表したもの。

#####概要
変数が二つの場合には函数 f の加法定理は形式的に2変数の函数 G を用いて f(x + y) = G(f(x), f(y)) の形に書き表される。このときの G がどのような函数としてとれるかという基準で加法定理を分類することも考えられる。
たとえば定数 a 倍する写像 ma: x → ax を考えるとき、a(x + y) = ax + ay となるという性質は分配法則と呼ばれるが、これはベクトル空間や環（あるいは環上の加群）などで成立する加法定理の一種である。もう少し一般に函数 f が f(x + y) = f(x) + f(y) の形の加法定理を満足するとき、函数 f は加法的であるまたは加法性を持つという。これは函数 f が加法群の間の準同型となることを意味している。また、指数法則の一つである指数函数の加法定理 exp(x + y) = exp(x)exp(y) などは加法が乗法に写るような加法定理である。
---Wikipedia引用ここまで---

はい。何を言ってるのかさっぱりわかりません。
二種類の角αとβが合った際の
sin(α+β)　cos(α+β)　tan(α+β)
を導き出すそうです。

---
######角を表す書き方：∠bでbの角を示す、∠ABCでBの角を示します。
---



続きを書く前の復習で力尽きたので明日に続きます。
と言ったのですが、画像が全然残っていなかったので当然ですが終了します。申し訳ありません。
スレ自体は
[http://ex14.vip2ch.com/test/read.cgi/part4vip/1228653048/](http://ex14.vip2ch.com/test/read.cgi/part4vip/1228653048/)
から閲覧出来ます。通称パー速、２ちゃんねるの外部板ですね。
Windows上のVIMで、新しく開くファイルをタブに取り込む設定


## 設定方法

以下の gvim.bat ファイルを作ってこれに関連付けすれば、レジストリを変更せずに設定できます。

```bat:gvim.bat
start "" "D:\My Program Files\vim73-kaoriya-win64\gvim.exe" --remote-tab-silent %*
```

###関連付けイメージ
![Clipboard03.png](https://qiita-image-store.s3.amazonaws.com/0/27440/bad81f39-8a1e-0eab-2f72-ee0326cc95d9.png)
FitNesse を C# で使う時のメモ

http://fitnesse.org/ から fitnesse-standalone.jar を持ってくる。
plugin のリンクから fitsharp の欲しいのを持ってくる。

こんな風にフォルダを構成して

```
C:\fitnesse
C:\fitnesse\fitnesse-standalone.jar
C:\fitnesse\fitsharp\release.2.2.net.35
C:\fitnesse\fitsharp\release.2.2.net.40
```

`C:\fitnesse\fitnessestandalonestart.bat` を

```DOS:fitnessestandalonestart.bat
java -jar fitnesse-standalone.jar -p 8080
```

などとして起動する。

http://localhost:8080/ にアクセスして Wiki を記述する。

```
!contents -R2 -g -p -f -h

!define TEST_SYSTEM {slim}

!path C:\Targets\SampleFitnesse.dll
!define COMMAND_PATTERN {%m -r fitSharp.Slim.Service.Runner %p}
!define TEST_RUNNER {fitsharp\release.2.2.net.40\Runner.exe}
!define PATH_SEPARATOR {;}

!|import|
|Top.Second.Third.SampleFitnesse|


!1 値を設定したら出力が得られる。
!|ClassUnderTest|
| Foo | Bar | Result? |
|   1 |   1 |       1 |
|  12 |   3 |       4 |

!1 値を設定したら出力が得られる。
!|Script|ClassUnderScriptTest|
| check | Foo |  1 | Bar | 1 | 1 |
| check | Foo | 12 | Bar | 3 | 4 |
```

Wiki ページのプロパティーを
`Tool > Properties` とたどり property を Testに変更して save propertiesをクリックする。
するとテストボタンが現れる。

動かしてみるサンプルコードを作る。

```csharp
namespace Top.Second.Third.SampleFitnesse
{
    public class ClassUnderTest
    {
        public int Foo { set; get; }
        public int Bar { set; get; }

        public string Result()
        {
            int r = Foo/Bar;
            return r.ToString();
        }
    }

    public class ClassUnderScriptTest
    {
        public string FooBar(int lhs, int rhs)
        {
            int r = lhs/rhs;
            return r.ToString();
        }
    }
}
```

これを SampleFitnesse.dll となるようにビルドして `C:\Targets\` の下へ置く。

testボタンをクリックする。

結果

![result.png](https://qiita-image-store.s3.amazonaws.com/0/30116/1991aca0-342f-7c6d-c3ca-9d4ca4c47020.png)
NUnitFormsでModalWindow のテストが null exceptionで動かなくてはまったので動いた時の記述メモ。

```csharp
using NUnit.Extensions.Forms;

/// <summary>
/// 時間の逆転時のwarningチェック
/// </summary>
[Test]
public void ClickOKWhenBeginTimeIsNewerThanEndTimeThenWarningDialogIsShown()
{
    using(var f = new AForm())
    {
        f.Show();
        f.SetEnd(DateTime.Now);
        f.SetBegin(DateTime.Now.AddDays(1));
        using (ModalFormTester modalTester = new ModalFormTester())
        {
            modalTester.FormHandler = (s, wnd, form) =>
            {
                MessageBoxTester messageBox = new MessageBoxTester(wnd);
                Assert.That(messageBox.Text, Is.EqualTo("Begin time is newer than end time."));
                Assert.That(messageBox.Title, Is.EqualTo("Caution"));
                messageBox.ClickOk();
            };
            var btn = new ButtonTester("OkButton");
            btn.Properties.Enabled = true;
            btn.Click();
        }
    }
}
```

NUnitForms は svn checkout して、自分で build する。
それを参照して使用する。
Riakに関係するパラメータについて

ミドルウェアのチューニングでは、様々なパラメータを目にし、操作し、検証することになる。
データの特性やリソースなど現在の状況と目標を照らしあわせ、正解に近い値を求める作業だ。
Riakにもパラメータはたくさんある。
しかしそれは、既存のRDBとは異なる概念に基づくものが多い。
ドキュメントなどに書いてある運用に関わるパラメータの一部をまとめただけだが、今まであやふやだった部分を改めて理解しに行くきっかけになれば良いと思う。

## 物理ノード
クラスタを構成する物理的なマシンの数は、Riakクラスタのキャパシティを決定する大きな要因だ。
数千数万という多数のマシンで構成されたクラスタが機能するかは分からないが、1台ぼっちで動かすよりは多いほうが良いだろう。
後述するn_valのデフォルト設定値が3になっているため、最低3台、本番環境では5台以上での構成が推奨されている。

## vnode
Riakは物理ノードをパーティションで更に分けており、それをvnodeと読んでいる。
物理ノード5台で構成されるRiakクラスタのvnode総数が25に設定されていた場合、マシン1台につき5つのvnodeが割り当てられることになる。
例えばある1台が持つvnodeのidは、[1, 6, 11, 16, 21]となる。
Riakは異なる物理ノードに属するvnodeを選定してデータを保存する。
この計算アルゴリズムはConsistent Hashingを呼ばれている。
vnodeを物理ノードで割り切れない時は、物理ノードが受けもつvnode数が一つだけ違う、ということになる。

## n_val
vnodeへのデータ複製数を指す。
Consistent Hashingによりデータ保存先のvnodeが決定される際、その数はn_valの設定数に従う。
ここで、n_valは「最終的に」レプリケートされるvnode数ということに注意する必要がある。
変更完了のリプライがあった時点で、その変更がn_val設定値まで伝搬しているわけではない。

## w
n_valが最終的にレプリケートされるvnode数なのに対し、wは成功を返す時点のレプリケート数だ。
つまり、wの設定値まで書き込みができれば、成功とみなされるということになる。
なんでレプリケート数でnとwがあるのかというと、ボトルネックをユーザが決められるようにするためである。
当然ながら、書き込みにはI/Oとネットワークに伴うコストが発生する。
クラスタとしてのRiakの応答性を最高にするためには、1台という最小台数にだけデータを書き込ませ成功を返し、それを受け取った時点でアプリケーションは次の処理を行うべきだ。
一方で、データの確実な書き込みを保証するためには、クラスタを構成する全物理ノードにデータを配置する必要がある。
これならデータ損失の確率を最低限にできるが、ネットワークを通してデータを配置する時間は最大になってしまう。
そして、応答と堅牢性、どちらが要求されるかはアプリケーションによって異なる。
どのユースケースにも対応できるよう、Riakは選択をユーザに委ねている。

## r
wが書き込みを成功とみなすvnode数であるのに対し、rは読み込みを成功をみなすvnode数である。
r設定数のvnodeから同じvalueを読み込むことができれば、riakは成功とvalueを返す。
もちろん、r設定数が大きければ信頼性は高く、応答は遅くなる。逆もまた然り。
Riakがとっている書き込みと読み込みのバランスは、”結果整合性”というキーワードで表される。
書き込みコストを許容できるのであれば、読み込みは最小ノードでも良いので、読み込みの応答を上げることができる。
極力失ってはならないデータで、整合性も最大限確保しなければならないのであれば、n, w, r全てを最大にする必要があるだろう。
レプリケート数n、書き込み数r、読み込み数wを組み合わせ、アプリケーションとデータの特性に応じた適切なパフォーマンスを発揮させるという考え方を実現するパラメータだ。

## まとめ
実際にはさらに多くのパラメータがあるが、最低限考慮すべきパラメータはこれくらいだろう。
要は、どこでリスクを取るかというだ。
そして重要なのは、それを自分で選べるという自由なのだろう。
パラメータを組み合わせ、最適なパラメータを求め続けるという仕事（そして奥の深さ）自体は、NoSQLも典型的なRDBも変わらないのだ。
一風変わった補完候補の色付け方

一風変わった補完候補の色付け方が /r/zsh にポストされているんですけれども、

<http://www.reddit.com/r/zsh/comments/msps0/color_partial_tab_completions_in_zsh/c367xqo>
(nicoulaj さんによる)

これを `$LS_COLORS` を **できるだけ** 反映するようにしてみました。
結果はこんな感じです。(<http://www.youtube.com/watch?v=DK6BTjFQKuU>)

![list-corols.zsh](https://github.com/hchbaw/list-colors.zsh/raw/readme/list-colors.zsh.png)

ソースコードはこちらから (https://github.com/hchbaw/list-colors.zsh)

インストール方法
================

    % git clone https://github.com/hchbaw/list-colors.zsh.git
    % cd list-colors.zsh
    % $SHELL -uc ". ./list-colors.zsh && list-colors-zcompile ~/.dir_colors ~/.zsh/"
    ** Dumping and zcompiling for ~/.dir_colors
    re-compiling ~/.zsh/list-colors-init.zwc: succeeded
    ** All done.
    ** Please update your .zshrc like this:
    -- >8 --
    fpath+=~/.zsh
    autoload -Uz list-colors-init; list-colors-init
    zstyle -e ':completion:*:default' list-colors list-colors list-colors-aux
    # zstyle ':completion:*' group-name ''
    # If you want to make it to respect directory-type color setting, you need
    # to uncomment above line, please.
    -- 8< --

出力の最後の `-- >8 --` から `-- 8< --` を *.zshrc* へ追加して下さい。

list-colors-zcomplieについて
============================

上で出てくるコマンドです。 `dircolors(5)` から `zsh` の `list-colors` 用のパターンと、その時に動くコードをあらかじめ作るためのツールです。

使い方
------

    list-colors-zcompile <dircolors(5)の設定ファイル> <出力するディレクトリ> <色設定ファイル>

対話環境で必要になる関数と変数をそれぞれの設定ファイルから <出力するディレクトリ> の下へ `list-colors-init` というファイルに `autoload` できる形で変換します。
`dircolors` の設定値を <色設定ファイル> でマップしているんだけれどもとってもいい加減です。
(一応手元では動いた〜、というレべルです…ごめんなさい)

注意点です
==========

上で「できるだけ」って書いたことなんだけれども、ファイルの拡張子でなくってファイルタイプで色が指定されているものに関しては上手くできていないです。特に、強引にディレクトリだけを特別扱いしようとしているんだけれども、不完全です。
(`cd` する時と `editor` 等で、とあるディレクトリの下のファイルを開こうとする時、ディレクトリのはずなのに色が違う所です。自分ではディレクトリのはず！と思ったら途中でも '/' を入力しちゃうからか、ちょっとくらいおかしくても気にしなくなっちゃった…)

あと、補完関数の中で `campset` されていたりするときも不完全です。

う〜む、どうにかしたいんだけれども方法が思いつかない…ごめんなさい。

とりあえず、 `list-colors-aux` では半ば強引につじつまを合わせているので、必要であれば参考にしつつカスタマイズして下さい。それには、上の方で出てきた、

~~~~ {zsh}
zstyle -e ':completion:*:default' list-colors list-colors list-colors-aux
~~~~

の部分を、例えばそもそも `my-list-colors` 定義してそれを使うようにするには、

~~~~ {zsh}
zstyle -e ':completion:*:default' list-colors my-list-colors
~~~~

となります。 `list-colors` 関数を使いつつ、 `my-list-colors-aux` を新たに作って

~~~~ {zsh}
zstyle -e ':completion:*:default' list-colors list-colors my-list-colors-aux
~~~~

とするのもありかもしれません。
やっぱり長くなった。おつかれ様でした。


どうもありがとう、Julien Nicoulaud!
Vagrant1.4.0でCentOS6.5(Redhat系VM)のprivate_networkがうまく設定されない

Vagrant1.4.0でprivate_networkを設定したCentOS6.5のVMを立ち上げようとしたら以下のエラーが出た。
結果、vagrant sshでは繋がるけど、private_networkが設定されるはずのeth1がゲストに存在しなくてIPでsshできない。

```
[default] Matching MAC address for NAT networking...
[default] Setting the name of the VM...
[default] Clearing any previously set forwarded ports...
[default] Clearing any previously set network interfaces...
[default] Preparing network interfaces based on configuration...
[default] Forwarding ports...
[default] -- 22 => 2222 (adapter 1)
[default] Booting VM...
[default] Waiting for machine to boot. This may take a few minutes...
[default] Machine booted and ready!
[default] Configuring and enabling network interfaces...
The following SSH command responded with a non-zero exit status.
Vagrant assumes that this means the command failed!

/sbin/ifdown eth1 2> /dev/null

Stdout from the command:



Stderr from the command:
```

Vagrant1.4.0かつRedhat系のOSで発生するバグだった
https://github.com/mitchellh/vagrant/issues/2614

すぐ直したい場合は
`<Vagrantインストールディレクトリ>/embedded/gems/gems/vagrant-1.4.0/plugins/guests/redhat/cap/configure_networks.rb`
をGithubの最新版にすればOK
初期化遅延クラス

ほぼoptional。templateの練習して

```cpp
#pragma once
#include <type_traits>
#include <assert.h>

template<typename T>
class LazyInit_Base{
public:
	LazyInit_Base() : constructed_(false) {}
	~LazyInit_Base() {
		if(!isConstructed()) return;
		static_cast<T*>((void*)(&seat_))->~T();
		constructed_ = false;
	}

	T * operator->() const{
		return static_cast<T*>((void*)(&seat_));
	}

	T & operator*() const{
		return *static_cast<T*>((void*)(&seat_));
	}

	template<typename ...Args>
	void construct(Args... args) {
		assert(constructed_ == false);
		new(&seat_) T(std::forward<Args>(args)...);
		constructed_ = true;
	}

	bool isConstructed() const{
		return constructed_;
	}
	
	explicit operator bool() const{
		return isConstructed();
	}
private:
	bool constructed_;
	typename std::aligned_storage<sizeof(T), std::alignment_of<T>::value>::type seat_;
};

template<
	typename T,
	bool IsCopyable = std::is_copy_assignable<typename std::remove_const<T>::type>::value && std::is_copy_constructible<typename std::remove_const<T>::type>::value
>
class LazyInit : public LazyInit_Base<T>{
public:
	LazyInit() = default;
	LazyInit(const LazyInit & rhs) {
		construct(*rhs);
	}
	LazyInit & operator=(const LazyInit&) = delete;

	template <typename U>
	LazyInit(const LazyInit<U> & rhs) {
		static_assert(std::is_convertible<U, T>::value == true, "U not convertible to T");
		construct(*rhs);
	}
};

template<typename T>
class LazyInit<T, false> : public LazyInit_Base<T>{
public:
	LazyInit() = default;
	LazyInit(const LazyInit&) = delete;
	LazyInit(LazyInit &&) = delete;
	LazyInit & operator=(const LazyInit&) = delete;
};
```
ListViewの中にScrollViewを入れてイイ具合にスクロールを両立させて下さい。

（ええ～そんなこと言われても・・・）ちょっと調べてみます。（その前にその仕様でいいんですか？）

やり方
---
ListViewにセットするAdapterのgetViewを拡張します。
条件として、ScrollViewのlayout_heightはwrap_contentとかではなくて固定値にする必要があります。

```java:HogeAdapter.java

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		
		// 省略
		// ScrollViewクラスのscrollViewローカル変数 が参照できる状態とします。
		
		scrollView.setOnTouchListener(new OnTouchListener() {
			@Override
			public boolean onTouch(View v, MotionEvent event) {
				int action = event.getAction();
				if(action == MotionEvent.ACTION_DOWN){
					ScrollView sv = (ScrollView)v;
					if(sv.getChildAt(0).getHeight() > sv.getHeight()){
						sv.requestDisallowInterceptTouchEvent(true);
					}
				}
				return v.onTouchEvent(event);
			}
		});

		// 省略

		return convertView;
	}


```

解説
---

この一行で、親に対してインターセプトやめてくれって出せます。

```java

sv.requestDisallowInterceptTouchEvent(true);

```

http://developer.android.com/reference/android/view/ViewParent.html#requestDisallowInterceptTouchEvent(boolean)

通常はListViewがスクロールします。
ScrollViewに対してタッチダウンが発生した時にスクロールが可能な(ScrollViewの高さより子の高さが大きい)場合は、requestDisallowInterceptTouchEventを呼び出し、ScrollViewがスクロールするようにしています。

ひとこと
---

本当はAdapter#getView内でsetOnXXListenerは書きたくないでござる。
シェルスクリプトの便利なワンライナー

#要約

端末で一行でできる便利コマンドの組み合わせたちを紹介します。
登場コマンドは 6 つだけ： find, grep, sed, xargs, tree, watch

# 以下実例

### [find] src/ 以下の、 .svn という名前の全ディレクトリを削除

```bash
find src -type d -name .svn -exec rm -rf {} \;
```

* -type d はディレクトリ だけ取り出す。 -type f なら普通のファイルだけ。
* -name .svn は完全一致。 "*" をワイルドカードに使える。
* -exec はコマンド実行。 {} がファイル名に置換される。最後に \; をつける。

### [find] src/ 以下の .tex を euc に変換
``` bash
find src/ -name "*.tex" -printf "nkf -e %p > tmpfile && mv tmpfile %p \n"
```

* -printf "..." で文字列をかける。 %p は フルパス。

> nkf は --overwrite オプションで、直接変換可能。
>    find src/ -name "*.tex" -printf "nkf -e --overwrite %p"
> nkf は iconv にしても OK。その場合は "nkf -e" --> "iconv -t euc-jp" に置換
> Thanks nacht_666!

### [find] src/ 以下の .txt の先頭に _ をつける
``` bash
find src/ -name "*.txt" -printf "mv %p %h/_%f\n"
```
* -printf "..." で文字列をかける。 %f はファイルだけ。%h はディレクトリだけ。


### [find + grep] src/ 以下の .cpp ファイル のうち、 search の前後 3 行を確認

```bash
find src -name "*.cpp" -exec grep -H -A 3 -B 3 search {} \; 
````

* grep -H でファイル名もわかる。
* -A n -B m で 見つかった行の 前 n 行、 後 m 行も表示される。


### [sed] subversion で 更新されたやつだけ削除

```bash
svn st | sed "s/?/rm -f/" | sh
```

* s/AAA/BBB/  で、 各行の AAA を BBB に置き換える。

### [xargs] src/ 以下の ファイルを10 並列で削除。
```bash
find src/ | xargs -n 1 -P 10 rm -f
```

* -n が引数として取る個数。今回はファイル名だけなので 1
* -P が並列するプロセス数
* 最後のコマンドの後ろに、パイプで与えられた行が入って実行される。

### [watch] 1秒ごとにログの最後の 10行を表示。
```bash
watch -n 1 tail -n 10 /var/log/syslog 
```

> watch の例とははずれるけども、 tail に -f をつけると同じことができる
> Thanks ykubota!

### [watch] 5秒ごとにコンパイル、インストール
```bash
watch -n 5 make
```

```bash
watch -n 5 sudo python setup.py install
```

### [tree] src/ 以下のファイルツリーを表示
``` bash
tree src/
```

* -d をつけるとディレクトリだけ表示

#### 以前の関連する投稿
http://qiita.com/mzmttks/items/c1b1b45d98a97fcdea1e
MicrosoftからAzureの使用料1080万円をもらう方法

投稿遅れてすみません。
はじめにオチを書いてしまいますが、
設立費用の安い海外法人を立ててBizSparkもらおう！って話です。

##Microsoft BizSpark
Microsoftは、設立5年未満のベンチャー企業向けに、
Visual Studio Ultimate with MSDNを各社最大25名に
3年間無償提供するというサービスを提供しています。

[BizSpark - マイクロソフト イノベーション センター](http://www.microsoft.com/ja-jp/mic/bizspark/ "BizSpark - マイクロソフト イノベーション センター")

##海外法人設立
日本で株式会社を設立しようとすると安くても25万円位はかかりますが、
海外法人ならネット上の手続きだけで1万円弱で立てられるところもあり、
また中には現地住所不要というのもあり、実際に2年前に試してみました。

[株式会社を作ってみた - JITAKUKEIBI INC.の自宅警備日誌](http://blog.jitakukeibi.in/entry/2011/11/16/090358 "株式会社を作ってみた - JITAKUKEIBI INC.の自宅警備日誌")

##Visual Studio Ultimate with MSDN
VS Ultimate with MSDNをAmazonで定価購入すると166.95万円なので、
単純計算して166.95万円 x 25ライセンスで毎年4000万円くらいになり、
また毎月12000円分のAzure使用料も各MSDNライセンスに付いていて、
1.2万円 x 25ライセンス x 12ヶ月 x 3年間で総額1080万円分になります。

[Amazon.co.jp : Microsoft Visual Studio Ultimate 2012 with MSDN 通常版](http://www.amazon.co.jp/dp/B0096NPF84 "Amazon.co.jp : Microsoft Visual Studio Ultimate 2012 with MSDN 通常版")

##まとめ
MSDNやAzureの使用料を得るために会社を立ち上げるというような
語り口をしましたが、これをキッカケに真面目に起業をしてみるのも
ありなんじゃないかなと思います。
ゲーム制作7日目!!!!!!!

機能はバス予約のためお休みしましたが、
本日は進めたいと思います。

#今日のメニュー
・ひっついてくる人たちの色を時間経過で変化させる。
・ひっついてくる人たちが最終形態になると、カウントする。
・それを出力する。

#色変化
色変化は、専用のカウントダウン変数を持たせることで解決します。
この変数は、フレームごとにカウントダウンされ、
一定値を超えるたびにスプライトのフレームが変化します。
画像は以下のようなものを使用します。
![ball.png](https://qiita-image-store.s3.amazonaws.com/0/32926/ef3ef06e-7424-4f3f-40fc-c40a2c0fd17c.png)
これによりスプライトによる複数画像の管理が簡単になります。
右に行くほど時間が経過したものです。

#カウント
カウントとその出力にはLabelを使用します。
Labelは文字を扱えるクラスで、
シーンに登録することで画面に出力させることができます。
今回はスプライトと併用することで、
「アイコン× n」のような表示にします。
今回のところ目分量で位置を決定したので、あとできれいに整形しようと思います。

#今日の成果
[今日の成果に飛びます。](https://dl.dropboxusercontent.com/u/35809589/SnakeGame/index.html)
全面青画面がスタート画面です。
画面をクリックすると、ゲームがスタートします。
ゲーム中では左右キーで曲がることができます。
とまることはできません。
下ボタンで増殖します。
増殖したからだは時間経過で見た目に変化が現れます。←new!
変化が最終段階に達すると右下の掲示が1増加します。←new!
自分の体および壁に衝突すると、全面緑色のゲームオーバー画面に飛びます。
ゲームオーバー画面で画面をクリックするとスタート画面に戻ります。
GameAnalytics for Corona SDK


ゲーム分析サービス [GameAnalytics](http://www.gameanalytics.com/) を [Corona SDK](http://www.coronalabs.com) にて利用する場合の簡易的な説明です。

# GameAnalytics に反映されるまでの時間について

* [Is GA realtime ? – GameAnalytics Support](http://support.gameanalytics.com/hc/en-us/articles/200842126-Is-GA-realtime-)

## Realtime tool

イベントが送信されてから15分以内に反映されます。

## Cohorts, Funnels and Heatmap tools

UTC 12:00 と UTC 24:00 の1日2回のみ反映されます。

## Dashboards and Explore tool

ダッシュボードに表示されるデータは、24時間以内に反映されます。

# ダウンロードと設定

* [Download and setup – GameAnalytics Support](http://support.gameanalytics.com/hc/en-us/articles/200841586-Download-and-setup)

## ダウンロード

以下の GirHub リポジトリからコードをダウンロードします。

* [GameAnalytics/GA-Corona-SDK](https://github.com/GameAnalytics/GA-Corona-SDK)

## 読み込み

```lua
local GA = require ("GameAnalytics")
```

注意: GameAnalytics のモジュールはグローバルで定義されていない為、利用する際は毎回読み込みを行う必要があります。

## 初期化

```lua
GA.init({
  game_key   = “YOUR_GAME_KEY”,
  secret_key = “YOUR_SECRET_KEY”,
  build_name = "1.0",
})
```

注意: もし、Android で利用する場合は、以下の作業が必要となります。

* `build.settings` に `android.permission.INTERNET` を追記する。
* アプリから GameAnalytics サーバーに Android ID を送信することを防ぐ為、`build.settings` に `android.permission.READ_PHONE_STATE` を設定しないようにして下さい。

# オプション

* [Options – GameAnalytics Support](http://support.gameanalytics.com/hc/en-us/articles/200841616-Options)

## 一般的なオプション

### - デバッグモード

GameAnalytics に関するデバッグ出力を表示することが可能です。
アプリをリリースする場合は、デバッグモードを無効にして下さい。

デフォルト値は `true` です。

```lua
GA.isDebug = false
```

### - シミュレーターモード

シミュレーターでアプリを実行している場合は、GameAnalytics サーバーにて、送信されたデータを計測しないように設定することが可能です。

デフォルト値は `false` です。

```lua
 GA.runInSimulator = true
```

### - ローミング状態の時だけ送信する

ローミング状態(キャリアのデータネットワークを介してインターネットに接続されている)の時だけ、データを GameAnalytics サーバーに送信することが可能です。

デフォルト値は `false` です。

```lua
GA.submitWhileRoaming = true
```

注意: 一部の Android デバイスはローミング状態を検出することが出来ません。この場合、設定されている値に関係なく、データが送信されます。

### - アーカイブデータ

インターネットの利用が出来ない場合や、`submitWhileRoaming` が `false` に設定されている時に、 デバイスがローミングしている場合に、データをアーカイブしておくことが可能です。

ゲームが再開された場合や、インターネットの利用が出来るようになった場合に、アーカイブされたデータが送信されます。

デフォルト値は `false` です。

```lua
GA.archiveEvents = true
```

アーカイブされたデータにて、デバイスのストレージを圧迫させない為に、アーカイブされるデータのサイズ制限を設定することが可能です。

デフォルト値は `512 KB` です。

```lua
GA.archiveEventsLimit = 256
```

## ゲームオプション

### - デバイス情報送信

セッションが開始される度に、デバイスの詳細情報を送信することが可能です。

デフォルト値は `false` です。

```lua
GA.submitSystemInfo = true
```

## ストーリーボードオプション

もし、Corona SDK のストーリーボードを利用している場合、GameAnalytics SDK の幾つかの組み込みオプションを利用することが可能です。

### エリアパラメータにストーリーボードのシーン名称を利用する

ストーリーボードをフックして、自動的にカスタムイベントのエリアパラメータにストーリーボードのシーン名称を利用します。これは、`design` / `quality` / `business` の全てのカスタムイベントに対して適用されます。

デフォルト値は `false` です。

```lua
GA.useStoryboard = true
```

注意: カスタムイベントのエリアパラメータは上書きすることが可能です。

### ストーリーボードイベントを送信する

ストーリーボードのシーン遷移を自動的に検出して、以下のイベントを送信します。

* enterScene
* exitScene
* overlayBegan
* overlayEnded

各種イベントには、それぞれのストーリーボードのシーン名称を持つエリアパラメータが含まれます。

`exitScene` と `overlayEnded` イベントは、シーン切り替えやオーバーレイに費やした時間(秒)も合わせて送信します。
デフォルト値は `false` です。

```lua
GA.submitStoryboardEvents = true
```
[Ruby] Windows向けのRuby 2.0では　ANSI escape sequencesがサポートされている

タイトルの通りなんですが、Windowsのコマンドプロンプト向けにカラーで出力したいときの話。
1.9までだと`win32console`を読み込んだりする必要があるのですが、2.0では標準で`ANSI escape sequences`がサポートされたみたいです。

+  https://github.com/luislavena/win32console/issues/17
+  http://projects.puppetlabs.com/issues/21711

このあたりで指摘されています。
念のためサンプルコードも実行してみました。

```rb:color_test.rb
describe 'test' do
	it 'should be 1' do
		int = 1
		int.should == 1
	end

	it 'should be 2' do
		int = 1
		int.should == 2
	end
end
```

```shell-session
C:\ruby>pik use 1.9.3
C:\ruby>rspec color_test.rb --color
[32m.[0m[31mF[0m

Failures:

  1) test should be 2
     [31mFailure/Error:[0m [31mint.should == 2[0m
       [31mexpected: 2[0m
       [31m     got: 1 (using ==)[0m
[36m     # ./color_test.rb:9:in `block (2 levels) in <top (required)>'[0m

Finished in 0 seconds
[31m2 examples, 1 failure[0m

Failed examples:

[31mrspec ./color_test.rb:7[0m [36m# test should be 2[0m
```

![color_sample193_1.JPG](https://qiita-image-store.s3.amazonaws.com/0/32923/2b3f5764-fd4b-180d-3f01-100730216c39.jpeg)

1.9.3ではカラーではないし、`escape sequences`もそのまま表示されている。

```shell-session
C:\ruby>pik use 2.0.0
C:\ruby>rspec color_test.rb --color
.F

Failures:

  1) test should be 2
     Failure/Error: int.should == 2
       expected: 2
            got: 1 (using ==)
     # ./color_test.rb:9:in `block (2 levels) in <top (required)>'

Finished in 0 seconds
2 examples, 1 failure

Failed examples:

rspec ./color_test.rb:7 # test should be 2

```

![color_sample200_1.JPG](https://qiita-image-store.s3.amazonaws.com/0/32923/ea846abf-5db9-eed0-68f5-0879994fd2da.jpeg)

2.0.0だとカラーで出力される。
公式のドキュメントにこの変更について記載がないか、現在捜索中。
jMeterでリモートしたサーバーを使った時CSVが読み込めなかった


リモートで動かしてるJmeterの場合、リモート側のホストにもcsvファイルを置く必要があったらしい。

というわけで一番簡単な解決方法↓

・csv data set configのfilenameにcsvファイル名のみを書く
・リモートjmeter serverのbinフォルダ内にcsvファイルを配置

以上
2013年のD言語開発を振り返って

去年はD言語の機能解説とかやったのですが、今年はいろいろ思うことがあり、D言語開発における所感について書きたいと思います。

まずは今年出たリリースを要約してみます。

### 2.061 (2013-1-1)
年明けすぐに出たリリースです。2012年の夏ごろから開発していました。

### 2.062 (2013-2-18)
2.061のバグフィックス的なリリースです。とはいえ、代入スタイルのalias構文はここでtrivialな新機能として導入されました。

### 2.063 (2013-5-28)
[ここ](http://dlang.org/changelog#new2_063)にあるとおり、新機能と言語仕様の調整が色々入りました。その分Regressionも多く生じ、それらがFixされるまでbeta期間が延びるという弊害も生じました。

### 2.064 (2013-11-5)
いくつかの本質的な新機能(package moduleやテンプレートオーバーロードセットなど)とtrivialなsyntaxの改良(alias宣言とenum宣言にテンプレートパラメータを付ける構文など)。[リリースノート](http://dlang.org/changelog#new2_064)ではPhobosの改善点が多く書かれていますね。

### 2.065
2013年内に出る予定。バグフィックスリリースという位置づけで特筆すべき新機能はない。

## 開発期間の長期化

こう見ると2.061, 2.063, 2.064とどれも半年近く掛かった長期開発になってしまっています。いちコミッタとしての視点では理由はいろいろあるのですが、一番の理由はRegression問題でしょう。

新機能がいろいろ入ることによって処理系にRegressionが入るのですが、これについて

1. Regressionを直す人が少ない
2. 複数の新機能が相互作用した場合、直しにくいRegressionになる
3. そもそもRegressionを直すことが新機能ととぶつかる

1.は本質的なリソース不足ですね。実のところ、高頻度でD言語の処理系を触っている人は両手で数える程度しか居ません。日常的にバグ修正に注力している人はWalter、私、そしてDaniel Murphyの3人ぐらいでしょうか。というか私自身が日常的にフロントエンド周りのバグフィックスを投げているのですが、その結果としてRegressionの発生確率を上げているという点で、私自身が主犯になっている状態でもあります。そういったことから、迅速なバグ修正は実はなかなか難しい問題だったりします。

2.は3つのリリースで特に表面化した現象です。新機能とはそもそも「それまでにはなかった機能」なので、元々ある機能と組み合わせた場合の挙動はたいていの場合未定義となります。こうして生じた問題の修正とはすなわち言語のコーナーケースを定義する、という仕事に他ならず、単なる実装の修正には留まらないものになります。現在、Dコミュニティで言語の(実装ではなく)仕様についてcontributeしている人は皆無です。私自身は細部について語ることは出来るのですが、文章にする能力が不足しているため、websiteへの貢献は必要最小限になってしまっているという現状もあります。

3.はまれな例ですが、2.064でかなり大きな問題になったので書いておきます。実はこのリリースではテンプレートの実体化周りで、不要なコード生成を可能な限り省くことでコンパイル時間と実行ファイルサイズの削減を行うための変更が入りました。これは実行ファイルのサイズが大きいという問題がRegressionとして報告されており、その修正のために入った変更だったのですが、実は分割コンパイルと組み合わせると、大規模かつ複雑なテンプレート生成を行っているプロジェクトで、一部のコードがリンクされないという問題を起こすことがRegressionとして報告されました。しかしもちろん新機能をrevertするとファイルサイズ問題が復活してしまいます。結果的に、従来のテンプレート実体化方式でコンパイルするためのコンパイルスイッチ-allinstを追加し、問題が起きたときはこれを使ってね、という方向で落ち着きました (今見たら-allinstの説明がchangelogに載ってませんね…)。 本質的には実装の不完全さの問題なのですが、そもそも期待される実装を行うことがなかなか難しい事であることは既に見えているため、自分としては別の側面、問題に対する調停力の不足が感じられた一件でした。

## 貢献者求む

結局のところはこれに尽きます。D言語の開発は非常にオープンに進められていますが、言語仕様や処理系自体に注力してくれる人はやはり少ないのです。昨今、D言語に対する実用的な需要が増加していますが、だからこそ言語そのものの土台をさらに固められる人が今求められています。

日本人で貢献してくれる方がいれば、Twitterでmentionをいただければ確実にReplyします。

ぶっちゃけ言語仕様について語れる同士が欲しいです…
JUnit(Java)でJavaScriptをテストする。

JUnit上でJavaScriptのテストを行う方法をご紹介します。

# JavaScriptのfunctionも、テストしたい！
画面を作るのはJavaScript、CSSで任せて、サーバサイドはデータのコントロールに専念するのが、最近のはやりのアーキテクチャのような気がしたり、しなかったり。

そんなこんなで、JavaScriptの重要性はますます上がって、JavaScriptがいろいろなロジックを持つことが多くなってきました。
だから、JavaScriptのfunctionも、テストしたい。

# Javaなら、できる。JavaScriptのテスト。
Javaは、JavaScriptエンジンを持っているのです。JREに入っているので、別途テスト用にライブラリを取り込む必要はありません。

# JUnit上でJavaScriptをテストしてみましょう。
テスト対象のJavaScriptは以下の様なコードとします。JavaScriptは外出しファイルにしておきましょう。

```javaScript:scriptToBeTested.js
function plus(x, y) {
    return x+y;
}
```

これをJUnitのテストコード中でテストしてあげましょう。

```java:TestCaseのメソッド抜粋
	@Test
	public void testPlus() throws ScriptException, IOException {
		ScriptEngine engine = new ScriptEngineManager().getEngineByName("javascript");
		FileReader reader = new FileReader("WebContent/js/scriptTobeTested.js");
		engine.eval(reader);
		Assert.assertEquals(true, engine.eval("plus(1, 1) == 2"));
		reader.close();
	}
```

これでJUnitでJavaScriptがテストできます。簡単。

JavaScriptもテストしやすいように疎結合なfunctionを作っておくと良いですね。
MLAC 2013 13日目 Mahout + D3.js K-Means編

#やること

###可視化は大事

「分析の精度や速度とかも大事だけど、

分析結果を正しく把握する、してもらう、ってのも大事なんだぞ。

わかるか、、、やまかつ？」

って、じっちゃんが昔言ってたような気がするので、可視化について書いてみようと思います。
<br/>

###Apache Mahout
そんな大事なビジュアライゼーションですが、

Hadoop上で分散処理できる機械学習ライブラリのMahoutには

現時点(Ver.0.8)で可視化ツールは用意されていません。(キリ
<br/>

ということで、Mahoutの出力結果を可視化してみます。
<br/>

あ、あと勘違いしやすいのですが、Mahoutに含まれる

org.apache.mahout.clustering.display.DisplayKMeans

などは、ソースを読めばわかりますが、

K-Meansの任意の出力を渡して、それを可視化してくれるような、汎用的な可視化ツールではありません。

あくまでMahoutにサンプルとして含まれているK-Meansの実行結果を可視化する実装です。

もちろんこのコードをがんばって改修すれば任意のデータの可視化が可能ですが、

見た目がアレだったりするので、個人的にはあまりオススメできません。
<br/>

###D3.js + Mahout

可視化のライブラリやツールは多くありますが、最近だとD3.jsが人気です。（たぶん）

そんなこんなで流行にのって、今回はD3.jsでMahoutの出力結果を可視化してみようと思います。
<br/>

すべてのアルゴリズムやってしまうと悟りを開いてしまいそうなので、

今回は一般的で、かつ可視化と相性良さそうなK-Meansのみやってみます。
<br/>

MahoutによるK-Meansの実行結果の出力は、<a href="http://gihyo.jp/dev/serial/01/mahout/0005">ここら辺を参考にして（ステマ）</a>、

clusterdumpを用いてCSVフォーマットで用意しました。
<br/>

#やったこと
###グラフ
こんな感じです。（キャプチャ画像です）

![mahout-kmeans.png](https://qiita-image-store.s3.amazonaws.com/0/27278/fe35b842-b936-6f4d-d8c8-ac9dab4d6a82.png)
<br/>
<br/>

なんか一人へんなところにいる！！！

今回はK-Meansの入力データをランダムに生成して前処理一切やってないので、こうなりました。

バグではない、、、はず。
<br/>

最低限の情報だけ描画するように、さくっと実装したので見た目はイマイチですが、

<a href="https://github.com/mbostock/d3/wiki/Gallery">もっとがんばればかなり素敵になりそうです</a>。
<br/>


###コード
コードは<a href="https://github.com/yamakatu/SampleCode/blob/master/d3-mahout-kmeans.html">こちら</a>です。
<br/>

先ほどの描画はキャプチャ画像なので、興味のある方は上記コードをコピペして動かしてみてください。

D3.jsはJavascriptなので、ブラウザだけで動きます。

さくっとデータを確認したいときにこれは嬉しいですね。
<br/>


###コードで残念な点

- 時間がなかったのでMahoutの出力結果のCSVは直書きです

    html5のFile APIあたりで書くのが良さげですが、力尽きました。げふっ

- クラスタの重心点も直書きです。

    ちから（ry

<br/>


###コード解説的な何か

d3.jsの利用そのものは特段変わったことはやっていません。

- 各要素を点として描画
- 各クラスタの重心点を描画
- 各要素から各クラスタの重心点までの線を描画

これぐらいです。

これらに必要な知識は<a href="http://dotinstall.com/lessons/basic_d3js">こちらのドットインストール</a>とかで1〜2時間で抑えられる範囲です。

簡単ですね。
<br/>

それ以外の処理としては、MahoutのCSV出力をd3へ渡すために、

以下のfunction内で配列へ変換しています。

```d3-mahout-kmeans.html
function parseMahoutCSV(mahoutKmeansOutput){
  ...
}
```

コード内でここだけMahoutに依存している処理なので、

ここを別の処理系のデータフォーマットに合わせて実装すれば同じように描画出来ると思います。（しょぼい実装だけど）
<br/>


###謝辞
CSVのパース処理で<a href="http://qiita.com/_shimizu/items/e45f94e7ee8a75a04e50">こちらのコード</a>を参考にさせて頂きました。（￣人￣）感謝です。
<br/>


#まとめ

- 可視化って大事

- 現時点のMahout (Ver.0.8) は可視化ツールを含んでない

- D3.jsは基本的な使い方をするだけであれば、学習コストは高くない（ドットインストールがわかりやすいのかもしれない）

- D3.jsはJavascriptなので、とりあえず動かすだけであればブラウザだけで十分動かせてお手軽
<br/>

#次回（あるの？）

機会があったら別のも書くかもしれません。Random Forest(Decision Forest)とか？
PHPでgoto

PHP5.3で悪名高い[goto](http://www.php.net/manual/ja/control-structures.goto.php)が実装されました。

あえて実装されたということはそれだけ有用でもあるということでしょう。
[前作ったフィボナッチ数列](http://qiita.com/rana_kualu/items/49a60a4076e63ac6e399)をgotoで再現してみましょう。

```php
<?php
	
	function fib5($n){
		$fib= [0, 1];
		$count = 1;
		
		loop:
		$count++;
		$fib[$count] = $fib[$count-1] + $fib[$count-2];
		if(!isset($fib[$n])){ goto loop; }
		
		return $fib[$n];
	}
```

あれ、予想外にわかりやすい。
しかもfib3()並に高速です。
本当は「goto使うのはやめとけ」って書くつもりだったのだがどうしてこうなった。

gotoの本当の恐ろしさ(そして有用さ)は、「あらゆる文脈を無視して強制的にジャンプを行うことができる」という点です。
PHPの場合は同一ファイル内のみ、関数内←→関数外への移動はできないなど一部制限はありますが、それでもその威力は暴力的です。

```php
<?php
	// http://www.php.net/manual/ja/control-structures.goto.php#109027
	$link = true;

	if($link)goto iw_link_begin;
	iw__link_begin:
	if($link)goto iw_link_text;
	iw__link_text:
	if($link)goto iw_link_end;
	iw__link_end:

	goto iw_end_gt;

	iw_link_begin:
		echo'<a href="#">';
		goto iw__link_begin;
	
	iw_link_text:
		echo'SampleText';
		goto iw__link_text;
	
	iw_link_end:
		echo'</a>';
		goto iw__link_end;
	
	iw_end_gt:
	
	// 普通に書くとこう
	if($link)iw_link_begin();
	if($link)iw_link_text();
	if($link)iw_link_end();
	
	function iw_link_begin(){
		echo'<a href="#">';
	}
	function iw_link_text(){
		echo'SampleText';
	}
	function iw_link_end(){
		echo'</a>';
	}
```

上記はマニュアルのコメントに書かれている例ですが、こんなもん納品されてきた日には実装者をぶん殴るしかない。

なおgotoのラベルには値しか使用できないようです。
変数はおろか定数すら指定できません。

```php
<?php
	$a = 'label1';
	goto $a;
	label1:
```

みたいなコードはパースエラーになります。
まあ、万一これが動いてしまったら更なる地獄になるのは間違いありませんが。

実のところPHPではgotoの使いどころがほぼありません。
他の関数が豊富なので、あえて使おうと思わない限り出番がないんですよね。
他言語では唯一の使いどころとして挙げられる[多重ループ脱出](http://www9.plala.or.jp/sgwr-t/c/sec06-6.html)についても、PHPでは普通に[脱出レベルを設定](http://www.php.net/manual/ja/control-structures.break.php)できます。
いったいどんなときに使えばいいのか、私にはよくわかりません。
chcp 65001についての発見

[@nqounet](https://twitter.com/nqounet)です．

最近，Windows7のPowerShellで色々とやっています．

前段の話はこの辺をどうぞ．

- [WindowsPowerShell+Test::Moreでテストの時の文字化けを解消する方法 - nqou.net](https://www.nqou.net/2013/12/13/010200/)

で，文字コードが混在するのはアレなので，やはり`UTF-8`で動作するターミナルが欲しいなと．

昨晩，色々と書いた後，`chcp 65001`について知りましたが，結果的に使えない（少なくとも私にとっては）という事がわかりました．

まず，cp65001というのは，Term::Encodingにはありませんでした．

`chcp 65001`をPowerShellで実行してからテストを実行してみたら，まさかの「Unknown encoding 'cp65001'」．

`UTF-8`じゃなく`cp65001`で返すんですね．斬新です．

次に，`cp65001`でRictyが使えなかった．

`cp932`にRictyを追加したのと同じ手段で，65001に追加してみましたがメニューには現れず．

最終手段として`0`に登録されていた`Lucida Console`の代わりに`Ricty`を入れてみましたが，`Lucida Console`が消えただけでした．

何故ですかね？

いずれにしろ，この2点を無視してまで使う理由は無いかなと．