OmniAICreator/Qiita-1.07M huggingface dataset:
Raspberry Pi でrPlayを使ってAirPlayミラーリングを実現する


Raspberry Pi で iPhoneの画面を表示できないか調べてたら、こちらで話題になってたrPlayというものを知りました。
http://www.raspberrypi.org/forums/viewtopic.php?t=49668

ベータテスト中との事だったので、メールしてライセンスキーを発行してもらいました。

教えてもらったサイト通りにセットアップを進めます。

まずは、Raspberry PiにSSHでは入ります

```bash
ssh pi@192.168.10.13
```

# Raspbery Piのファームウエアをアップデート

```bash
sudo apt-get install rpi-update
sudo rpi-update
```

変更を反映するために再起動

```bash
sudo reboot
```

# GPUに割り当てるメモリを変更する

```bash
sudo raspi-config
```

Advanced Optionsを選択
![スクリーンショット 2014-08-23 9.18.55.png](https://qiita-image-store.s3.amazonaws.com/0/36184/155d61d7-ca7c-55a7-5b4e-d1030f60518e.png "スクリーンショット 2014-08-23 9.18.55.png")

Memory Splitを選択
![スクリーンショット 2014-08-23 9.19.12.png](https://qiita-image-store.s3.amazonaws.com/0/36184/632fadc8-62e9-74c5-90dd-4bbd59e6402c.png "スクリーンショット 2014-08-23 9.19.12.png")

model Bなので、半分の256を指定
![スクリーンショット 2014-08-23 9.19.35.png](https://qiita-image-store.s3.amazonaws.com/0/36184/f42a0793-823e-ee03-5b2c-d5cde7e8c70e.png "スクリーンショット 2014-08-23 9.19.35.png")

OKすると再起動するかを聞いてくるので、再起動する

# AirPlayで必要となるライブラリをインストールする

```bash
sudo apt-get install libao-dev avahi-utils libavahi-compat-libdnssd-dev libva-dev youtube-dl
```

自分の場合は上記のコマンドでエラーとなったので、一度apt-get updateを実行しました

```bash
sudo apt-get update
```

正常にインストールできたらYouTubeをアップデートします

```bash
sudo youtube-dl –update
```


# rPlayのダウンロードとインストール

```bash
wget -O rplay-1.0.1-armhf.deb http://www.vmlite.com/rplay/rplay-1.0.1-armhf.deb
sudo dpkg -i rplay-1.0.1-armhf.deb
```

# ブラウザから管理画面にログイン
上記のコマンドが正常に終わると、rPlayのサービスが起動します。
ブラウザから管理画面にログインします。

http://192.168.10.13:7100/admin

直接設定ファイルを編集することも可能です
```bash
vi /etc/rplay.conf
```

管理画面に入ったら、ライセンスキーを登録します。

念のため再起動

```bash
sudo service rplay restart
```

iPhone上でRaspberry Piを認識！
![IMG_3088.PNG](https://qiita-image-store.s3.amazonaws.com/0/36184/cb843e12-f69c-6014-d6bb-f0a32d076da0.png "IMG_3088.PNG")

テレビに表示できた！！
![IMG_0186.png](https://qiita-image-store.s3.amazonaws.com/0/36184/e5db4fbe-8e21-c22c-f7bc-e8c60fe50a98.png "IMG_0186.png")

MacからもAirPlayできるかなと思ったけど、残念ながらRaspberry Piは検出されなかったので、出来ないっぽい。

このエントリーは[こちらのブログ](http://d.hatena.ne.jp/sparkgene/20140823)が元ネタです
RemoteObjectsで無効な取得条件エラーが発生したとき

javascriptからSalesforceにアクセスできるapex:RemoteObjectsのクエリ実行時に、間違えた処理を書くと「無効な取得条件エラー」が発生します。

<img src="https://qiita-image-store.s3.amazonaws.com/0/8407/542bc285-603a-22db-9bdd-132fac4b440d.png" width="350px" />

WHERE部分の指定が間違えている可能性もありますが、判定に使用する項目がapex:remoteObjectFieldで宣言されていないことでエラーになっていることもあります。

SELECTで取得する項目だけでなく、WHERE判定で使用する項目もapex:remoteObjectFieldで宣言する必要があるので注意しましょう。


ユーザ情報を取得する場合はこんな感じです。

```
<apex:remoteObjects >
  <apex:remoteObjectModel name="User" fields="Name,Id">
    <apex:remoteObjectField name="Phone" />
    <apex:remoteObjectField name="Email" />
    <apex:remoteObjectField name="Department" />
    <apex:remoteObjectField name="SmallPhotoUrl" />
    <apex:remoteObjectField name="IsActive" />
  </apex:remoteObjectModel>
</apex:remoteObjects>
```

```
userObject.retrieve({
  where: {
    IsActive :{
      eq : true
    }
  },
  orderby: [{Name: 'ASC'}],
  limit: 1000
},function(err, results) {
  if(err) {
    alert(err.message);
  } else {
    // 取得したリストをループ   
    results.forEach(function(result) {
      console.log(result.get('Name'));
    });
  }
});
```
ApacheとNode.jsの共存

ApacheとNode.jsを共存させる方法。

さくらVPSでApacheで立てたサーバの他にNodeで立てたサーバが必要になったので、その作業のメモ。 

ApacheやNode.jsは既にインストールされているものとする。


構成は以下の通り。

```
node-http-proxy (Port 80)
│
├─Apache  (Port 8080) example.com, apache.example.com
│
└─Node.js (Port 8081) node.example.com
```

**使用した環境**

- CentOS 6.5
- node v0.10.29
- npm 1.3.6
- apache 2.2.15

## 1. rootユーザ以外にもポート80番の実行権を与える

80番はrootでないと使用できないため、任意のユーザ(ここではhogeとする)に実行権を与える。

任意のユーザの追加とグループをwheelに変更

```
$ useradd hoge
$ passwd hoge

$ usermod -G wheel hoge
```

追加したユーザのIDを調べる

```
$ id -u hoge
```

ここで吐出された番号(たぶん500)をメモっておく。

## 2. node-http-proxyの導入

npmでhttp-proxyをインストール。

```
npm install http-proxy
npm link http-proxy
```

proxyの設定。  

```
$ vi proxy.js

var http = require('http');
var httpProxy = require('http-proxy');

var apacheProxy = new httpProxy.createProxyServer({
    target: {
    host: 'localhost',
    port: 8080
}});

var nodeProxy = new httpProxy.createProxyServer({
    target: {
    host: 'localhost',
    port: 8081
}});

var server = http.createServer(function ( req, res ) {
    if (req.headers.host == 'example.com' || req.headers.host == 'apache.example.com') {
        apacheProxy.web( req, res );
    } else if (req.headers.host == 'node.example.com') {
        nodeProxy.web( req, res );
    } else {
        res.writeHead(404);
        res.end();
    }
});

server.listen(80, function(){
  process.setuid(500); //上記で設定したユーザID
});
console.log('It Works!');
```

## 3. iptablesの設定
iptablesを設定しているなら、サーバ内部でルーティングしているため、80ポートのみが通ればよく、8080や8081は通さなくてもいい。

```
$ vi  /etc/sysconfig/iptables

-A SERVICES -p tcp --dport 80 -j ACCEPT
```

これでOK.


## 4. httpd.confの設定
apacheで処理しているデフォルトのポートを80から8080に変更する。

```
$ vi httpd.conf 

NameVirtualHost *:8080
Listen 8080
```

Virtual Hostの設定をしているなら以下も。

```
<VirtualHost *:8080>
  DocumentRoot /home/www/public
  ServerName example.com
</VirtualHost>

<VirtualHost *:8080>
  DocumentRoot /home/www/hoge/public
  ServerName apache.example.com
</VirtualHost>
```

httpdの再起動

```
$ service httpd restart
```

## 5. foreverのインストール
nodeのプログラムを常に動かすようにするため、npmでforeverのインストール

```
$ sudo npm install forever -g
```

```
$ forever start proxy.js
```

これで終わり。

参考  
http://o.inchiki.jp/obbr/50
http://com4tis.net/2013/05/23/sakura-vps-apache-node-js-install-2/
https://gist.github.com/nnnnathann/3491640
http://qiita.com/kakakazuma/items/a65a984378c0c291cfda
IRubyを各環境にインストールする

[Jupyter](http://jupyter.org)のRuby版kernel, IRubyをインストールする方法.
最新版の情報はIRubyのREADMEに書いてある.
https://github.com/SciRuby/iruby

参考: IRubyの動作画面
https://www.youtube.com/watch?v=ZxjqsIluM88

# Ubuntu 15.10
rbczmqのおかげでインストールが楽とても楽.

```
pip install jupyter
pip install ipython
gem install rbczmq
gem install iruby
iruby notebook
```

# MacOS X
ipythonのインストールは同様に.

```
pip install jupyter
pip install ipython
```

ffi-rzmqの動作にzeromq3.2.xが必要.
Anaconda上で環境構築した場合は以下の操作が必要.

```
conda remove zeromq
brew install zeromq
```

Macではrbczmqがうまくビルドできないらしいのでffi-rzmqを使う.

```
gem install ffi-rzmq
gem install iruby
iruby notebook
```

# Windows
SciRubyにWindows持ってる人がほとんどいないので頑張ってpatch書いた.

### PythonとIPython周辺環境のインストール

WindowsでPythonを動かすツールはいくらでもあるが今回はEnthought Canopyを使った.
https://www.enthought.com/

### ZeroMQをインストール
ZeroMQのWebサイトから3.2系Stable Releaseのバイナリをダウンロード・インストールする.(x64でなくx86を選択すること)
http://zeromq.org/area:download

ZeroMQのインストールされたディレクトリのbinまでのパスを環境変数PATHに追加する.

後でインストールするffi-rzmqがPATHに入っているディレクトリから`libzmq.dll`を探す仕様になっているので上記binの中の`libzmq-v100-mt-3_2_4.dll`を`libzmq.dll`にリネームする.

### IRubyと依存gemをインストール

PRはmergeされたが未だにgemがリリースされてないので`git clone`してくる.

```
git clone https://github.com/SciRuby/iruby.githttps://github.com/domitry/iruby.git
cd iruby
gem build iruby.gemspec
gem install iruby-0.2.7.gem
```

# FreeBSD

以下の通りインストールできるらしい.
https://github.com/SciRuby/iruby#freebsd


# 参考
* [IRuby](https://github.com/SciRuby/iruby)
* [IRuby-Example](http://nbviewer.ipython.org/github/minad/iruby/blob/master/IRuby-Example.ipynb)
* [Nyaplot](https://github.com/domitry/nyaplot)
サーバのダンプファイルを取得したいだけの場合、httpサーバを建てると便利だった

# サーバ側で準備

```py:simplehttpserver8085.py
import SimpleHTTPServer
import SocketServer

PORT = 8085
IP = '127.0.0.1'

Handler = SimpleHTTPServer.SimpleHTTPRequestHandler

httpd = SocketServer.TCPServer((IP, PORT), Handler)

print "serving at port", PORT
httpd.serve_forever()
```

```bash:起動
nohup python simplehttpserver8085.py &
```

# クライアント設定

```bash:$HOME.ssh/config
Host dump01
    # 省略
Host dump01-8085
    ProxyCommand ssh -NL 8085:localhost:8085 dump01
```

```bash:接続
ssh dump01-8085
```

ブラウザで http://localhost:8085/ に接続するとサーバのファイルが閲覧できる。
Project Eulerをhaskellで練習していく日記: Problem 26

#問題
分子が１の分数を小数で書くと、

1/2	= 	0.5
1/3	= 	0.(3)
1/4	= 	0.25
1/5	= 	0.2
1/6	= 	0.1(6)
1/7	= 	0.(142857)
1/8	= 	0.125
1/9	= 	0.(1)
1/10	= 	0.1

となる。上記で、()で囲った部分は巡回小数を表す。
d<1000の範囲で、1/dの巡回小数部分が最長のdを求めよ。
#回答
```hs
import qualified List as L

-- a/bを展開する処理

tenkai rs 0 b = []  -- 分子が０になるのは、割り切れた場合なので、
                    -- 巡回部分無しという意味で[]を返す。

tenkai rs a b = if p `elem` rs then dropWhile (/=p) rs --過去にも同じ展開状況になったら、
                                                       --非巡回部分を削って返す。

                                 else tenkai (rs++[p]) r b  -- 再帰的に次の桁を展開

                  where d = (10*a) `div` b --この桁の値
                        r = (10*a) `mod` b -- 次の桁の展開で分子として使う数
                        p = (d,r)  -- この段階での展開結果
                     
main = do
     -- 長いもの１０位までを(-長さ, 分母の値)の列として表示します。     
     print $ take 10 $ L.sort $ zip (map (negate.length.(tenkai [] 1)) inp) inp
            where inp = [2..999]
```
#感想
これも例によって、div,mod,各種の数がこんがらがりそうでしたが、手計算で展開していく手順を忠実に書いてみました。
そして全ての候補について結果を求め、最長を求めています。
MacのTerminalの環境変数をブッ壊したときの対処法


slコマンド（蒸気機関車のやつ）をOS Xのzshに入れようとしたのですが，

```.zshrc
export $PATH=/Users/keisei/sl/
```

とかいうことをやらかしました．
全てのコマンドがここを参照するようになってしまうんですね…（知識不足）

ということでこれでターミナルがCommand not found祭りになった場合の対処ですが，ターミナル上で

```
export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin
```

とりあえずこれを打てば復活します．`.bash_profile` `.zshrc` などをテキストエディタで編集しましょう．

- - -

参考 [PATHを設定する](URL "http://d.hatena.ne.jp/LukeSilvia/20080429/p2")
Dockerを開発環境でスマートに使うため、Docaを書いた

シンプルな環境を構築できるDocker。しかしそれを開発段階で使うと、色々と不便です。たとえば他雑なオプション、例えばポートマッピング、最後はマウントうんぬん。
それを一撃で設定できるシェルスクリプトを書きました。その名も
# Doca
![doca.jpg](https://qiita-image-store.s3.amazonaws.com/0/36652/ac559ac7-7a28-09e0-df96-98d197a1bcf8.jpeg)

コンテナ名と、イメージ名を指定するだけで
```
doca create hello nginx
```
![main.png](https://qiita-image-store.s3.amazonaws.com/0/36652/4f104d97-2ce2-11e4-c7da-974366d7b2fc.png)

http://<コンテナ名>のバーチャルホストを設定。しかもコンテナの内側で明けたポートはそのままアクセスできます。３０００や８０００にも。

そして
![subl.png](https://qiita-image-store.s3.amazonaws.com/0/36652/cf65b51c-2ab5-3a16-9aa0-63c0fd7641f7.png)
自動でコンテナの/rootディレクトリをマウント＆subllimeで表示します。

続きは[github](https://github.com/endotakashi1992/doca)で
[vmware] Windows7/8でも、ホストの bin ディレクトリをゲストで共有したい！

# 普通は「共有フォルダー」をネットワークドライブに割り当てる

**だが、この方法だと、そこのEXEファイルを実行する度に、警告ダイアログが出てしまう**

これを出ないようにするには、「インターネットオプション」→「セキュリティー」タブ→「ロ－カルインターネット」を選択→「サイト」で、以下のようにホストOSがイントラネットに含まれるように設定してやる必要があった。

![20140822.png](https://qiita-image-store.s3.amazonaws.com/0/29454/4b13a666-2468-21f8-8e05-c3b86a07ff71.png)

だが、この方法を使っても、**実行ファイルをゲストOSのタスクバーにピン留めができない**という問題があった。仕方がないので、ずっと、デスクトップにアイコンを作って我慢してきたのであるが…

だが、私は気付いてしまった…

#「共有フォルダー」へのシンボリックリンク(not ジャンクション)を、ゲストのC:ドライブの中に張れば、ピン留めできる！

シンボリックリンクを張るには、管理者権限のコマンドプロンプトより、mklink /D コマンドを使えばよい。

以下は、ホストOSの Opt というディレクトリにあるサブディレクトリ、ファイルをゲストOSの %USERPROFILE% 以下に自動でリンクするバッチファイルだ。これの実行には [sudo for UAC](https://bitbucket.org/wantora/sudo)が必要だ（が、別に手作業でやる分には無くても問題ない。CMD.EXE を管理者で実行すればよいだけ）。参考までに…

```bat:SetVmHome.cmd
if "%1" == "-" goto main
    sudo %COMSPEC% /c "%~0" -
    goto end
:main
    for %%I in (bin bin64 vimfiles App Repos gosrc) do (
        rd "%USERPROFILE%\%%I" 2>nul
        mklink /D "%USERPROFILE%\%%I" "\\vmware-host\Shared Folders\Opt\%%I"
    )
    for %%I in (.nyagos .vimrc .gvimrc ) do (
        del "%USERPROFILE%\%%I" 2>nul
        mklink "%USERPROFILE%\%%I" "\\vmware-host\Shared Folders\Opt\%%I"
    )
:end
```
JavaScriptでの静的クラスと動的クラスの作り方



```js
//----------------------------------------------
// static class
//----------------------------------------------
window.A = {

	_bar: 'メンバ変数',
	
	hoge: function(){
		return this._foo( this._bar );
	},
	
	_foo: function( arg ){
		alert( arg );
	}
};

//呼び出し方
A.hoge();

//----------------------------------------------
// dynamic class (instance, object)
//----------------------------------------------
window.A = function(){
	
	var bar = 'メンバ変数';
	
	alert('コンストラクタ');
	
	this.hoge = function(){
		return foo( bar );
	}
	
	function foo( arg ){
		alert( arg );
	}
}

//呼び出し方
var a = new A();
a.hoge();
```

##解説
個別のメンバ変数をもたせたい場合は動的クラスで書いてnewすればいいですよね。
そうでなくて、メソッドもメンバ変数もすべて共通なら静的クラスを扱います。

今回はJavaScriptでの静的クラス、動的クラスの書き方を紹介しました。

**隠蔽化**
この静的クラスのとき、メソッドもメンバ変数も外からアクセスできちゃうので、明示的にアンダースコアさん（_）をプレフィックスしてあげましょう。

**静的クラスのコンストラクタ**
必要なかろーもん！

**継承**
継承はできないのでprototypeをつかってください（逃
パスワードなしでssh接続できるようにする方法

# 0.序論
WebサーバとDBサーバを別のマシンに切り分ける場合、WebサーバからDBサーバにパスワードなしでアクセスできなければ正常にアクセスできません。
そのための方法を以下に記します。

# 1.Webサーバ側（ssh接続元）にssh鍵を作成

```
ls -al ~/.ssh #まず鍵がないことを確認
ssh-keygen -t rsa #鍵作成
```

- 1行目で、`id_rsa`とか`id_rsa.pub`があったら、それを使い回せばOK
- 2行目でパスフレーズの入力を求められるが、何も入力せず`Enter`キーを押せば良い

# 2.作った鍵をDBサーバ側（ssh接続先）に置く
Webサーバ（ssh接続元）で作成した公開鍵`id_rsa.pub`の中身をDBサーバ（ssh接続先）の`~/.ssh/authorized_keys`に追記する。

# 3.上記ファイル（フォルダ）権限の設定
ファイルの所有者のみ読み書きできるよう設定する。

```
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
```

# 4.sshを有効にする設定
```
vim /etc/ssh/sshd_config
```

`/etc/ssh/sshd_config`ファイルに以下の設定をする。

```
PubkeyAuthentication=yes
PasswordAuthentication=no
```



- rootユーザからのアクセスを許可するか否かで、`permitRootLogin=yes`とかを記述する。
- `/etc/ssh/sshd_config`ファイル変更後、sshdの再起動忘れずに！

```
/etc/init.d/sshd restart
```
- ここまでできたら、実際にssh接続してみて、パスワードなしで接続できるか確認してみると良い

# 5.実際にWebサーバからDBにアクセスできるようにする
## 5-1.DBの接続先の設定
Webサーバのアプリケーションの設定で、接続するDBサーバのIPアドレスを記述する。（IPアドレスは`ifconfig`コマンドで調べられる）

（例1）
WordPress　→　`wp-config.php`ファイルに、

```
define('DB_HOST', 'localhost');
```
を記述。

（例2）
MediaWiki　→　`LocalSettings.php`ファイルに、

```
$wgDBserver='localhost';
```
を記述。

- いずれの例の場合も、`localhost`の部分を`接続したいDBサーバのIPアドレス`にすればOK！
- ファイルの場所が分からなければ`find パス名 -name LocalSettings.php`とかで検索かければ見つかる。

## 5-2.DB側の権限の設定
- 権限の確認

```
select user, host from mysql.user;
```


- 特定ユーザの権限の確認

```
show grants for 'ユーザー名'@'ホスト名';
```

- 権限の付与

```
GRANT 権限 ON レベル TO user;
```

【参考URL】
▼[MySQL]権限の確認と付与
http://qiita.com/shuntaro_tamura/items/2fb114b8c5d1384648aa
APIサーバを Rails、フロントエンドを AngularJS で開発する [その①]


- **[2014/08/25追記]** 続編を書きました。
	- [その②：環境構築編](http://qiita.com/hkusu/items/9b34c83cc055ac21307f)
- **[2014/08/26追記]** 続編を書きました。
	- [その③：実装編](http://qiita.com/hkusu/items/b34f684b49751d9c9abd)

---

今回は その①：考察編 です。

ちょっとややこしいのですが、Railsアプリケーションの View で AngularJS を利用するということではなく、JavaScriptベースのフロントエンドアプリケーションとして AnuglarJS を利用し、サーバ側のデータを操作する為のバックエンドAPIを Rails で構築する、ということです。（まだややこしいかな..）

シチュエーション的には、UIリッチなフロントエンドアプリケーションを構築するが、サーバにもデータを保持する必要がある、というもの。
（例えばシングルページアプリケーション構成や、１画面=１データモデルとはならないもの。）

![スクリーンショット 2014-08-23 0.56.47.png](https://qiita-image-store.s3.amazonaws.com/0/35733/c96009cb-13d2-aed9-c656-b1ccb8ed1df5.png "スクリーンショット 2014-08-23 0.56.47.png")

かつ、フロントエンドの開発は本格的にやるので、Grunt や Bower を利用したいとします。

![スクリーンショット 2014-08-23 1.36.48.png](https://qiita-image-store.s3.amazonaws.com/0/35733/998ad0ad-ece2-816c-e07f-693a6b23604e.png "スクリーンショット 2014-08-23 1.36.48.png")

ググった結果もあわせて、次のようにすれば開発はいけそう。

- Railsプロジェクト内にフロントエンド開発用のフォルダを作成する。
	- 仮に `front` フォルダとする。
- `front` フォルダ内に Grunt や Bower 、AngularJS の環境を構築する。
- Railsプロジェクトにおける静的ファイルの配置場所は `public` フォルダなので、`front` フォルダ内で `$ grunt build` すれば配布用のJavaScriptアプリケーションが `public` フォルダへ展開できるようにする。
- **[2014/08/25追記]** <del>開発中は、Rails のサーバ（`$ rails s`）と Grunt のサーバ（`$ grunt serve`）が立ち上がる。Grunt のタスクで Proxy し、`http://localhost:9000/path_to_api` を `http://localhost:3000` へ経由させる。</del> ⇒ Rails の development 環境の場合は、`Access-Control-Allow-Origin: *` とすることで解決しました。
- 稼働サーバへのデプロイは、`public` 含めて Railsアプリケーションを丸ごと。
	- フロントエンドもバックエンドも同じサーバに配置するので、クロスドメイン(クロスオリジン)は気にしなくてもいい。
- Heroku とか使えば、簡単にサーバも作れそう。

これで、いけそうな気がします。実践編へ続く！
LinuxでMySQLクラスタが上手く動かない時はiptablesのファイアウォールととSELinuxが二大ボス

データベース周りは全然詳しくないのですが、[Connection Failures Between Nodes in MySQL Clusters](https://blogs.oracle.com/jsmyth/entry/connection_failures_between_nodes_in)を読む機会があったので部分適当訳を貼ってみます。

### 1. データノードがstartingから進まない問題
1台はスタートしたのにもう一台はstartingのままだったりする場合も

showコマンドの結果がこういう感じになってる時
> [ndbd(NDB)]     2 node(s)
> id=2    @192.168.56.211  (mysql-5.6.11 ndb-7.3.2, Nodegroup: 0, Master)
> id=3    @192.168.56.212  (mysql-5.6.11 ndb-7.3.2, starting, Nodegroup: 0)


ndb_1_cluster.logの内容
> [MgmtSrvr] INFO     -- Node 3: Initial start, waiting for 2 to connect, nodes [ all: 2 and 3 connected: 3 no-wait:  ]

これは、データノード間の通信がうまくいってないのが原因

#### データノードの通信について
データノードと管理ノードはport 1186で通信する。これはIANAが予約してて、MySQLが入ってるシステムだとだいたい開いてる

データノードが起動してIDを得ると、[エフェメラルポート](http://ja.wikipedia.org/wiki/%E3%82%A8%E3%83%95%E3%82%A7%E3%83%A1%E3%83%A9%E3%83%AB%E3%83%9D%E3%83%BC%E3%83%88)という動的かつユニークなportをもらえる。
こっちはOSが割り振るので、データノードからはどんな値になるかはわからない。
IANAは49152〜65535の間でIDが振られると思っているが、
Linuxでは32768〜61000でふられるらしい

```
> cat /proc/sys/net/ipv4/ip_local_port_range
```

すると実際の値がわかる

Firewallによってアクセス塞がれてたりするとデータノード間の通信が出来ず、
MySQLクラスタはデータノードの監視を見つけられない
(--nowait-nodesオプションをつけるとそうじゃないけど、普段はこのオプションを使わないべき)


#### iptables and SeverPort
管理ノードのconfig.iniに以下のように書くと、データノードが使うポートを指定できる

> [ndbd]
> Hostname=datahost1
> ServerPort=50501
> [ndbd]
> Hostname=datahost2
> ServerPort=50502

データノード側で以下の様なコマンドを打ってポートをあける

```
> iptables -I INPUT -p tcp --dport 50501 -s 192.168.56.0/24 -j ACCEPT
> service iptables save
```

#### 2. 管理ノードがオワコン
管理ノードのポートが空いてない場合もある。tar.gzみたいな圧縮形式でMySQLのバイナリをコピーしてインスコとかしてたときはこういう場合があるらしい
こういうときもiptablesでポートを開けてあげるとよい

### 3. MySQLサーバーノードが接続に失敗する
RPMでMySQLを入れると、SELinuxの設定も入る。
デフォルトの設定ではMySQLは3306番と1186番ポートを見れる
これはmysqldプロセスとMySQLクラスタの管理ノード

しかしデフォルトの設定はMySQLクラスタの中でAPI的に動くことを想定してないので、mysqldプロセスはデータノードのポートが見れない

こういうときshowすると以下の様な感じ
> [mysqld(API)]   1 node(s)
id=5 (not connected, accepting connect from any host)

show warningsは
> +---------+------+---------------------------------------------------------------------------------+
> | Level   | Code | Message                                                                         |
+---------+------+---------------------------------------------------------------------------------+
| Warning | 1296 | Got error 4009 'Cluster Failure' from NDB. Could not acquire global schema lock |
| Warning | 1296 | Got error 4009 'Cluster Failure' from NDB                                       |
| Error   |  157 | Could not connect to storage engine                                             |
| Error   | 1499 | Too many partitions (including subpartitions) were defined                      |
+---------+------+---------------------------------------------------------------------------------+


これに対処するにはSELinuxをdisabledにすればいいけど、もうちょっとスマートにやるなら

　上で設定したポートを元に
> semanage port -a -t mysqld_port_t -p tcp 50501-50524

というように特定のポートにアクセスする権限を与えることが出来る
スクウェア・エニックス AIアカデミー 第3回「AIでキャラクターを動かす」まとめと感想

7月から「スクウェア・エニックス AIアカデミー」に参加している. 自分の知識の整理も兼ねて内容と感想を書いていく.
時間があれば第1,2回についても書く予定.
#主観世界を作る
##生物の主観世界
　生物は,周りの情報を受け取る, 周りに働きかける, この2つによって世界を捉えている. すなわち
・センサーが捉えている世界である**知覚世界**
・エフェクターが捉えている世界である**作用世界**
この2つからなる**環世界**が生物が主観的に捉えている世界である.
知覚出来るが作用しないor出来ない空間 (e.g.見えはするが手の届かない場所) というのもあるので, 知覚空間≠作用空間である.
##知識表現で環世界を表す
　生物と同様, キャラクターも動くにはまず環世界を構成しなければならない.
もし人間と同等のAIが実現できれば, 人間と同じ情報 (ゲーム画面, サウンド,etc.) から環世界を構成できるが
実際はそうではないため, AIが使える形で環世界を表現する必要がある. そこで用いる表現を**知識表現**という.

知識表現には様々なものがあるが, ここでは特に
・マップ全体に関わる知識表現である**世界表現**
・それがどういうもので, どう作用できるかを教える表現である**オブジェクト表現**
の二つに言及した.

　世界表現はウェイポイントやナビゲーションメッシュを基本とした表現であり, ただ地形をグラフで表すだけでなく
周りの状況などの情報を各ポイントに埋め込むことも出来る.
オブジェクト表現では, 情報を教えるためにアフォーダンス情報というものが用いられている.
`アフォーダンスとは, インターフェースの設計などでも用いられている考え方である.
例えば「ドアを開ける」という動作をする時, そのために必要な「ドアノブを握って回す」という動作を
意識的に行う人はほとんどいないだろう. よって無意識的に行われた「握って回す」という行為は
ドアノブ側が誘発(afford)した行為である, と考えられる.
このように物や環境から誘発される「握って回す」と言った特性のことをアフォーダンス(affordance)と呼ぶ.`
アフォーダンス情報は, オブジェクトがAIに提示する選択可能な行動の情報であり
例えば, イスにキャラクタが座るという行為を実現する際に, キャラクタがイスを認識し, 座れるかどうかを判断して座るのではなく
イスがキャラクタに座るという行為の選択肢を提示し, キャラクタのAIがそれを選択する事で実現される.
##AIが歩く
　具体的にAIが歩く事に着目をした.
世界表現はウェイポイントかナビゲーションマップであり,
目的地までのパス検索法はダイクストラ法やA*法を用いるのが一般的である.
特にA*は省メモリで高速だが, 流石に問題空間が大きすぎるとCPU負荷も大きくなるため, FF14ではHinTと呼ばれる手法を用いている.
これは経路テーブルを分割, 階層化して用いる手法である.
経路テーブルとは, 予めパスを計算しておき, それを格納したテーブルである.
計算をする必要がないため速いが, 値を格納するテーブルが大きくなってしまうという欠点がある.
HinTは速さという利点をあまり損なう事無く, テーブルの分割と階層化によってテーブルのサイズの大幅な削減を可能にしている.

#感想
##講義内容について
　主観世界について, まず生物の話から入ったことで, AIの主観世界の構築の意義が理解しやすかった.
特にアフォーダンスの話は, 考え方自体は知っていたが, それをAIの環世界を構築する際に用いた点が面白かった.
認知や行為は状況と切り離されたものではなく, 状況に埋め込まれたものであるとする状況論的アプローチという考え方があるが
地形に情報 (遷移条件やビヘイビアツリー) を埋め込むという手法は, この考え方と似ているように感じた.

　パス探索の部分で, 行き先をクリックするとキャラクタが適切なルートを選んで目的地に到着するという映像を見たが
自分にとってはすごさよりも不自然さを強く感じた.
これは, まずキャラクタの表示された位置や, プレイヤのクリックという動作に反応したことから,
このキャラクタをこのゲーム内でのプレイヤ (ここでは映像を見ていた私) の分身となるキャラだと認識したことに因る.
私が初めて見る世界にも関わらず, 私が自分の分身と認識したそのキャラクタは一切迷うそぶりも見せず目的地に到達してしまった.
すなわち, 私が持っている情報とキャラクタの取った行動に乖離があったのである. これによって不自然さを感じたのだと思う.
もし同じ行動をそこに詳しいという設定をもつキャラがやれば不自然さは感じなかったと思われる.
このことから, 各キャラクタの行動は, そのキャラクタが持つと想定できる情報や能力に基づいたものである必要があると感じた.
但し今回のルート検索については, プレイヤが認識できる範囲を見える範囲として, HinTの考え方と組み合わせれば
そこそこ自然な動きを実現できるような印象を持った.
##ワークショップについて
　ワークショップでは第1回にやったゲームと同じものを行った.
ゲームの詳細は4gamerのこちらの記事を読むと分かりやすいと思う.
http://www.4gamer.net/games/032/G003263/20140724053/
前回メタAI兼ナビゲーションAI役をやった私は, 今回敵AI役をやったが
キャラクタAIをやった事で, 今回の講義の内容について深く考える事ができた.

　敵AIたる私は, メタAI兼ナビゲーションAIによって, 「ある位置のクリスタルが取得された」と言った世界を認識するための情報を得る.
しかしゲームプレイ中はその情報をそのまま使っていた訳ではない. その情報を元に推測や考察を行っていたのである.
特に勇者の可能な行動を考慮して位置を推測していた. これはある意味でただ与えられる情報以上の情報を得ていたと言える.
すなわち, 思考によって擬似的に主観世界を拡張していたと言えるのではないだろうか.


***
以上が今回の感想です.
第4回「ソーシャル・コミュニケーションするAI」もタイトルからしてとても面白そうなので
今までの内容を整理しつつ, 楽しんで臨みたいと思います.
[AWS]AWS(Amazon Web Services)を使え！メリットあるけど簡単じゃないよ！覚悟ある？

どんなサービスでも使うだけなら簡単なんですけどね。
[AWS(Amazon Web Services)](http://aws.amazon.com/jp/)みたいにサービスが拡張するようなものを有効に使って行くのは難しいです。

ここは個人的メモ。
全体の見通しを良くする目次ページにしようと思います。多分… (^^ゞ

#[AWS 0]AWSアカウントを取れ
AWSホームページに"[無料アカウント作成の流れ](http://amzn.to/1pWQ4VY)"というページがあるので、ここを参照してアカウントを取得します。
説明の中に書かれていますが、自動音声電話による身元確認が行われます。
なんらかの着信拒否設定をしている場合、この時だけは着信拒否設定を解除しておいてください。

#[AWS 1]AWSアカウント取得後にする大切なこと！先ずIAMへ行け！
AWSアカウントを取得したあと、[IAM(Identity and Access Management)](https://aws.amazon.com/jp/iam/)へ行ってください。
そしてSecurity Statusの項目をクリアします。

[MFA(AWS Multi-Factor Authentication )](https://aws.amazon.com/jp/iam/details/mfa/)について良く書かれた、[clouldpackエバンジェリスト 吉田さん](http://qiita.com/yoshidashingo)の[記事](http://bit.ly/1tmSgoX)を参考にメモしたのは[こちら。→(http://bit.ly/VEhXWO)](http://bit.ly/VEhXWO)

#[AWS 2]AWS CLI環境を整備しろ！
クライアント側の環境設定の話です。
が、ここは、完全手抜きです。
AWS CLIを使いますので、[運用設計ラボ](http://www.operation-lab.co.jp/)の[波田野さん](http://qiita.com/tcsh)が主宰されている[JAWS-UG CLI専門支部](https://www.facebook.com/groups/jaswug.cli/)の資料への[リンクで済ませました。→http://bit.ly/1pcLfYw](http://bit.ly/1pcLfYw)

#[AWS 3]AWSの作業ログを採れ！AWS CloudTrailの設定だ！
AWSアカウントの取得、最低限のアカウントセキュリティおよびクライアント側のAWS CLI環境設定が出来たと思います。
本格的に使うには、あと一歩。
AWSの作業ログを採りましょう。
CloudTrailというサービスがありますので、その[設定](http://bit.ly/1pkZHh6)になります。→http://bit.ly/1pkZHh6

#[AWS 4]AWSでのアカウント戦略！IAMを使って行こう！
[編集中](http://bit.ly/1sz2XEd)です。→http://bit.ly/1sz2XEd

ーー
20140826 項目追加(AWS4)
20140823 initial
Raspberry Pi に 温度センサーをつける


[Raspberry Piで遊ぼう! 改訂第2版](http://www.amazon.co.jp/gp/product/4899773978/)のとおりに試してみた。

## 使ったもの

- Raspberry Pi Model B
	- [前にセットアップ](http://qiita.com/daicham/items/e24ce76f8815d339d070)したもの
- 1-wire 温度センサー (DS18B20) + 2.2kΩ抵抗
- ブレッドボード
- ジャンパ

作業用端末

- Mac Book Air (OSX Mavericks 10.9.4)

## ブレッドボードで配線

こんな感じで配線した。

```
"Pin1:3.3v"  ----- "DS18B20:VSS"
               |
            "2.2kΩ"
               |
"Pin7:GPIO4" ----- "DS18B20:DQ"
"Pin6:GND"   ----- "DS18B20:GRD"

```

## 1-wire を使えるように設定する

Raspberry Pi にログインし、 `/etc/modules` に以下2行を追記する。(`sudo vi` などで)

```bash:/etc/modules
w1-gpio
w1-them
```

Raspberry Pi を再起動する。

```bash:Pi
$ sudo shutdown -r now
```

## 温度を読み取る

### デバイス ID の確認

```bash:Pi
$ ls /sys/bus/w1/devices
28-00000xxxxxxx  w1_bus_master1
```
`28-00000...` のシンボリックリンクがデバイス ID になる。

### 実際に温度を読み取る
```bash:Pi
$ cat /sys/bus/w1/devices/28-00000xxxxxxx/w1_slave 
9b 01 4b 46 7f ff 05 10 6e : crc=6e YES
9b 01 4b 46 7f ff 05 10 6e t=25687
```

`t=25687` の部分が温度を表し、25.687度ということらしい。

## 参考

- [Raspberry Piで遊ぼう! 改訂第2版](http://www.amazon.co.jp/gp/product/4899773978/)
Python のモジュールのソースを手軽に確認する方法

[https://github.com/trsqxyz/prins](https://github.com/trsqxyz/prins)


# Usage
```py3
>>> import prins
>>> p = prins.prins()
>>> p.dropto('this', 'prins', 'spam')
Not Found spam.
```

`imp.find_module( )` でソースファイルを read で開いてくれるのわかったので知りたいの一気にテキストファイルに書き出したくなってつくった 
文字列で渡してない引数は文字列に変換してるけど `import` してあるとちゃんと探してくれない
標準モジュールを知るときとか便利になるかなと思う  

Prins は Print source の略です

# 2014-08-24 10:46 追記
コメントいただきました。
>標準モジュールを探したりするときにはpydoc -p 8080などしてpydocのサーバー立ち上げたりすることが有ります。

`pydoc -p 8080` で Python 2.x `pydoc3 -p 8080` のあと `b` で Python 3.x のドキュメントを閲覧することが出来ました。めっちゃ便利

>あと、この記事のようなモジュールに関する情報を知りたい場合にはinspectパッケージが便利です。
例えば、

```py3
import re
import inspect

print(inspect.getsourcefile(re)) # ファイルパス取得
print("".join(inspect.findsource(re)[0])) # ファイルの中身取得
```

ターミナルなどで確認するときはこの方法がスマートでいいなと思いました。  
ただ `inspect.filesource( )` と `inspect.getsource( )` があったので違いを調べてみました。

```py3
>>> import re
>>> import inspect
>>> type(inspect.getsource(re))
<class 'str'>
>>> type(inspect.findsource(re))
<class 'tuple'>
```
なので `print(inspect.getsource(re))` でも確認可能です。
@podhmo ありがとうございました。
vue.jsで簡単な計算機を作る

vue.jsを触ってみつつ簡単な計算機を作ったので、その時の流れを追ってハマりどころなどメモを書いておきます。
HTMLファイル単体で動いて、サーバ不要のごくごく簡単なアプリケーションを作ります。

## ホスティングされているvue.jsを持ってくる

非公式ですが、次のサイトでホスティングされています。
[vue - cdnjs.com - the missing cdn for javascript and css](http://www.cdnjs.com/libraries/vue "vue - cdnjs.com - the missing cdn for javascript and css")

これをscriptタグで読めば使用できます。依存ライブラリがない…！
fileスキーマで開いて作業する場合は、頭にhttp:を付けるのを忘れずに。

以降、公式のtutorialを読んだりしつつ進める形です。
[Getting Started - vue.js](http://vuejs.org/guide/index.html "Getting Started - vue.js")

英語に強くない性質上、次のドキュメントにかなり助けられました。
[Vue.js note(v0.10.3). not translate. This is draft of https://github.com/koba04/vuejs-book .](https://gist.github.com/koba04/9776792 "Vue.js note(v0.10.3). not translate. This is draft of https://github.com/koba04/vuejs-book .")
自分は今気付いたんですが、こちらのほうが良いかも
[Introduction | vue.js book](http://blog.koba04.com/vuejs-book/ "Introduction | vue.js book")


## DOM構築後にViewModelが作られるようにする

tutorialで早速詰まったんですが、ViewModelを作るときにelで指定した要素がないとエラーになります。
なので、headタグ内のscriptの中に直書きとかしてると、new Vueしたら落ちます。

ということで、DOM構築後に動くようにする必要があります。`window.onload`とかで。


## v-modelでデータバインディングできる

ViewModel(以下vm)で指定した要素の下で
`<input type=text v-model="nyuryoku">`
とすれば、`vm.data.nyuryoku`と結びついて、フォームの値を変えたらこの値も変更されるようになります。
さらに、`vm.computed`で定義している値も都度変更されます。
これがなかなか楽しい。

tutorialでは`v-with`とかと一緒に出てくるんですが、別に単体で使えます。
Getting Started見たら適当にこのへんで動きを見るのも楽しさがあってよいのではないかと思います。


## componentはパラメータを登録する

似た内容のViewModelは、`Vue.component`で保存しておいて`v-component`で呼び出せるわけですが、この時登録するのは生成時に渡すパラメータになります。`new Vue(...)`で作ったインスタンスを登録するとうまく動きません。

呼び出されて展開される時にViewModelが生成されるので、そらそうよという感じもしますが……まぁちょっとやらかしたので。


## 複数のViewModelを連動させる場合、共通の親になるViewModelが必要

例えば、ページにフォームが3つあって、それぞれにViewModelがある場合で、
これらの値を連動させて何かやりたい場合、共通の親になる大きなViewModelが必要になります。

```
<div id="#dekkaiViewModel">
  <div v-component="vm1" v-ref="vm1" />
  <div v-component="vm1" v-ref="vm2" />
  <div v-component="vm1" v-ref="vm3" />
<div>
```

というイメージ。
この場合、`dekkaiViewModel`内で`this.$.vm1`といった形で参照できます。子からも`$parent`でアクセスでき、兄弟要素も見ることができます。


## Excelシートを移植した

という感じで、Excelシートで関数でいろいろやってた集計表を移植してみました。

[2-5式索敵値計算機(HTML本体)](https://gist.github.com/thrakt/384338c7c0fdd5cbccb2 "2-5式索敵値計算機")
[2-5式索敵値計算(bl.ocks.org)](http://bl.ocks.org/thrakt/raw/384338c7c0fdd5cbccb2/ "2-5式索敵値計算")

昨日のタイミングで既に同じような事やってる人が少なくとも2人居て、みんな考える事は同じだなと思いました……。
なまじ良いUIだったので、表形式に縛られず自由な発想が必要だなと思ったのでした。

そう、我々はVue.jsというインタラクティブ性を高められそうな強力な武器を手に入れたのだッ！！！
第2回 HTML5minutes！ 〜triton-js〜 MEMO


##基調講演 吉川 徹氏 【モバイル時代のWebパフォーマンスTips】
###API
・APIが足りないためネイティブアプリを選択する

###Tools, Education
・スキルセットがない人が実装するのは難しい

###Performanec
・デスクトップでは十分
・モバイルはPCの1/5の性能しかない
・日々向上中
・ネイティブアプリに近づける努力が必要

###Google I/O 2014
####page load
・リソースの最適化
　webサイトの63%は画像
　モバイル回線ではとても重要　

・リクエスト数を抑える
　・HTTPリクエストはとても高コスト
　・1リクエスト増やすと200ms~1000ms増えるかも
　・JS,CSSは結合して1ファイルに
　・画像はCSS Spriteを使用
　・DNSプリフェッチを使う

・リダイレクトを避ける
　・scriptタグは最後に
　・スクロールで表示させるものは後回し
　・Lazy Loadを使う。

・レンダリング
　・変形や透過処理を抑える
　・過度な装飾は重い
　・border-radius,box-shadow,text-shadow,opacity
　・transformによる変形(移動は割りと軽い)

・requestAnimationFrameを使う
　・DOMアクセスの最適化
　・DOMプロパティを変数のように使わない
　・DOMプロパティへのアクセスは最小限に

・メモリの最適化
　・GCが発生しないようにメモリをコントロールする
　・最初に必要なメモリをすべて確保

パフォーマス改善：[PageSpeed Insights](https://developers.google.com/speed/pagespeed/insights/?hl=ja)
  
####資料：[slideshare](http://www.slideshare.net/yoshikawa_t/webtips)


##林 優一氏	LIG inc.【CSS Living Style Guide】
ちゃんとしたスタイルガイドは難しい
納品時には死んでいる。

・自動化させる grunt gulp
・FrontNote [FrontNote npm](https://www.npmjs.org/package/frontnote)
　・nodeで作られている
　・ラベルを付けれる
　・デモがない
　・テストは不十分
　・手伝ってくれる方募集

####資料：[slideshare](http://www.slideshare.net/frontainer/css-living-styleguide)



##中島 俊治氏【FirefoxOSスマホ体験記】
・アプリマネージャーでアプリを作れる


##本多 大和氏【Canvas × スクロール芸 × コーポレートサイト】
・声を実体化
・Web Speech AP(音声認識)Iを使用 
・httpsにすることでchromeの認証を一度に
・3D文字はThree.jsが◎

####資料：[slideshare](http://www.slideshare.net/calmbooks/html5-38251950)


##太田 智彬氏【jadeで作るclient template】
・jadeはHTMLテンプレートエンジン
・ライブラリは必要ない
・コンポーネント管理ができる
・JSのコンパイルも可能
・MV*との相性が良い
・SPAのときに良い

####資料：[slide](https://speakerdeck.com/oted/jade-template)


##仲 裕介氏【WebRTC】
・WebRTCはカメラやマイクをブラウザで使える
・Mandatoryが決まらない
・IETFによる標準化
・コーデック議論がたくさん行われている

####資料：[slideshare](http://www.slideshare.net/yusukenaka52/5webrtc)


##kon Yuichi氏	【Angular.JSの高速化】
・Angularは遅い?
・$scopeによる 2wey data binding
・one-time- binding 変わらなそうなものは、一度だけ評価する

####資料：[slideshare](http://www.slideshare.net/KonYuichi/speeding-up-angularjs)



##ヒヨシ ヨウスケ氏【PolymerでゆるふわMaterialDesign体験】
・polymerとはWebCompoents UIフレームワーク
・Material DesignとはUI/UXのデザインガイドライン
・bowerからPolymerとコンポーネントをインストール



##鈴木 安美氏【かすたむ！　※コスプレ有り】
・Web Componentsが熱い
・template,custom Element,shadowDOM,Html importの4つ
・custom Elementは独自のタグを作れる
・独自の属性も作れる
・開発者以外も分りやすく管理がしやすい

####資料：[slideshare](http://www.slideshare.net/ssuser90079e/ss-38251579)



##金子 拓矢氏【HTML5でできるフォーム最適化】
・placeholderいいよ
・type=email でスマホのキーボードが変わる アドレスチェックができる
・tyoe=URL URLチェックができる
・type=tel 番号チェックができる
・type=date カレンダーが表示できる
・type=number 上限設定ができる
・type=lang レンジが表示できる
・type=color カラーピッカーを表示できる
・type=pattern 正規表現で入力形式を指定できる
・実装ブラウザは少ない


##礒田 優氏【Node.jsでシングルページウェブアプリケーション】
・node.jsでのサーバー管理
・認証、データベースの設定、データ検証
・sails.js
　・RubyOnRailsライク

・認証
　・passport.js
　・データ検証
　・バリデーションの定義が不要
　・自分で設定もできる



##手島 拓也氏【Web Componentsを公開しよう】
・なぜ公開するのか
　・普及する可能性が高い
　・HTMLタグを記述するだけなので潜在的ユーザーが多い
　・ギャラリーがまだ少ない

1,Polymerを勉強しよう
2,Web Compornentsを作る
　・タグ名を決める
　・attributeを決めたり
3,DEMOをつける
4,READMEをしっかり書く
5,bowerで登録



##道家 陽介氏【Webサービス開発のモジュール設計】
・モジュール設定はしっかりやろう
IEへのキー入力をVBScriptで再現する。

#はじめに
InternetExplorerへのキー入力(ex.Enter,Tab)をVBScriptで再現する方法が、実に面倒だったのでシェアします。
起動したIEのプロセスIDを取得し、それを使ってIEをアクティブにする。その上でSendkeysを使ってキー入力を再現する。

#コード
```vb:IEキー入力.vbs
'IEキー入力.vbs
'Copyright (c) 2014 nezuq
'This software is released under the MIT License.
'http://opensource.org/licenses/mit-license.php

'シェルを起動する
Dim wsh
Set wsh = WScript.CreateObject("WScript.Shell")

'IEを起動する
Dim ie 
Set ie = CreateObject("InternetExplorer.Application")
ie.Visible = True
'ie.FullScreen = True

'IEをアクティブにする
Dim wLoc, wSvc, wEnu, wIns
Set wLoc = CreateObject("WbemScripting.SWbemLocator")
Set wSvc = wLoc.ConnectServer
Set wEnu = wSvc.InstancesOf("Win32_Process")
Dim pId
For Each wIns in wEnu
    If Not IsEmpty(wIns.ProcessId) And wIns.Description = "iexplore.exe" Then
        pId = wIns.ProcessId
    End If
Next
Set wLoc = Nothing
Set wEnu = Nothing
Set wSvc = Nothing
While not wsh.AppActivate(pId) 
    Wscript.Sleep 100 
Wend 

'IEで指定URLを開く
ie.Navigate "https://secure.nicovideo.jp/secure/login_form"
Do While ie.Busy = True Or ie.readyState <> 4
Loop

'IEで要素に値を入れる
Dim elm 
Set elm = ie.document.getElementById("mail")
elm.Value = "メールアドレス"

'IEでキー入力を再現する
Wscript.Sleep 1000 
wsh.SendKeys "{tab}"
Wscript.Sleep 1000 
wsh.SendKeys "password" '日本語不可

'5秒停止しIEを閉じる
WScript.Sleep 5 * 1000
ie.Quit

Set elm = Nothing
Set ie = Nothing
Set wsh = Nothing
```

※[ニコニコ動画](http://www.nicovideo.jp/)のログイン画面が自動で開き、入力欄に値が入ります。その後、ログインせずにIEが閉じます。

#参考記事
[VBS(WSH)で開いたIEのウィンドウがアクティブにならない 【OKWave】](http://okwave.jp/qa/q5613215.html)
[Apache] 存在しない画像がリクエストされたら No Image 画像を返す


HTML中の画像リンクのパスを間違えた状態でリリースしてしまい、ブラウザで画像が ×印 になってカッコ悪いな〜という時に。

## 方法

- ① 画像フォルダに No Image 用の画像ファイルと `.htaccess` を用意します。
- ② 画像フォルダ名が `images`、No Image 用の画像ファイル名が `no_image.png` だとすると、`.htaccess` には次のように記載します。

	```apache:images/.htaccess
	ErrorDocument 404 /images/no_image.png
	```

## 表示例

存在する画像へのリクエスト：

![スクリーンショット 2014-08-22 22.38.25.png](https://qiita-image-store.s3.amazonaws.com/0/35733/db20eb09-2a54-35be-1dd7-b57741bf8b22.png "スクリーンショット 2014-08-22 22.38.25.png")

存在しない画像へのリクエスト：

![スクリーンショット 2014-08-22 22.39.08.png](https://qiita-image-store.s3.amazonaws.com/0/35733/6318c7c7-8eb5-95f0-015e-87c488803fac.png "スクリーンショット 2014-08-22 22.39.08.png")

# 補足

- `.htaccess` は、DocumentRoot 直下でなく、画像フォルダの中に置いてます。
	- サイト全体の 404エラー に影響を及ぼしたくないため
	- `httpd.conf` で、`.htaccess` の利用が有効にされている必要があります（AllowOverride）。
- mod_rewrite が利用できる場合は、RewriteCond の -f オプションでファイルの存在確認ができるので、そちらでも同じようなことが実現できます。
	- ただ画像リクエスト毎に存在確認することになるので、ちょっと負荷が気になりますが。
PHP5では$thisを書き換えられない

http://blog.37to.net/2006/08/phptips/
> _` $this = $obj;`_

本当かよ！？

```php
<?php
	class HOGE{
		public function change(){
			$this = new stdClass;
		}
	}
```

 **Fatal error: Cannot re-assign $this** 

http://thinkit.co.jp/free/marugoto/1/6/1/
過去の遺物だったようです。
いやあ本当に良かった。
これはコンパイル時にチェックしているようで、HOGEクラスをnewせずともこのエラーが出ます。

ん？コンパイル時にチェック？
つまりはこういうことか？

```php
<?php
	class HOGE{
		public function change($target){
			$$target = new stdClass;
		}
	}
	(new HOGE())->change('this');
```

可変変数を使って無理矢理`$this`を差し替えることに成功しました。
もっとも、あくまでこれを動かしてもエラーにならないというだけであり、実際のところ`$this`は変更されずにHOGEクラスのままです。

変更されはしないのですが、`$this`を突っ込んだメソッド内部でだけ不可解な動きをします。

```php
<?php
	class HOGE{
		const A = 'HOGE';
		public $b = 'hoge';
		public function c(){ return 'h'; }
	}
	
	class FUGA{
		const A = 'FUGA';
		public $b = 'fuga';
		public function c(){ return 'f'; }
		
		public function change($target){
			$$target = new HOGE();
			
			var_dump($this);      // object(HOGE)
			var_dump($this::A);   // HOGE
			var_dump($this->b);   // fuga
			var_dump($this->c()); // f
			
			return $this;
		}
	}
	
	$fuga = new FUGA();
	$hoge = $fuga->change('this');
	
	var_dump($fuga, $fuga::A, $fuga->b, $fuga->c()); // 全てFUGA
	var_dump($hoge, $hoge::A, $hoge->b, $hoge->c()); // 全てHOGE
```

`$this`を静的に参照するとHOGEクラスなのに、インスタンス変数やメソッドはFUGAクラスのものになります。
意味がわからんぞ。
さらに`return $this`すると、返り値はそんな奇妙なことにはならず、普通に完全なHOGEクラスです。

こんな奇怪な使い方をする奴なんていないと言われれば全くそのとおりですが、なんか動作がとても気持ち悪かったので書き起こしてみた。

これを使ってHOGEクラスに定数を集めて疑似trait、みたいなことを考えてみようかと思ったが余りにも無駄すぎるのでやめた。


おまけ

http://angelicwing.net/diary/4023.html
> 実はこれだけで死ぬ、という話。

HAHAHA冗談上手いなあ

```php
<?php
	$this = 1;
```

 **Fatal error: Cannot re-assign $this**

クラス内とか関係なしに、PHP5では根本的に`$this`を定義できないのであった。
Project Eulerをhaskellで練習していく日記: Problem 25

#問題
フィボナッチ数列
1, 1, 2, 3, 5, ...
が最初に1000桁の数に到達するのは何番目の項か？
#回答
```hs
fib = [1,1] ++ zipWith (+) fib (tail fib)

main = do
     print $ 1 + (length $ takeWhile (\x->length (show x)<1000) fib)
```
#感想
非常にそのまんまの実装。
[Grails]scaffoldで表示されるカラムの順番を制御

#概要
とっても便利なscaffoldですが、デフォルトのままだと見た目がイマイチなことが多々あります。
例えば今回の表示される項目の順番。

#サンプル
以下のドメインがあるとします。

```groovy
class Office {

    String name
    String description = ""

    static constraints = {
        description(nullable: true, blank: true)
    }
}
```
このドメインをscaffoldすると、description、nameという順番で表示されてしまいます。（一覧画面でも詳細画面でも）

#実際に並び替える方法

この順番を制御するのは非常に簡単で、単にconstraintsに指定されたカラムの順番に並べ替えられます。

```groovy
class Office {

    String name
    String description = ""

    static constraints = {
        name()
        description(nullable: true, blank: true)
    }
}
```

コレでscaffoldするとちゃんとname、descriptionの順番でカラム等が表示されるようになります。
指定した変数名の変数を取得

これも素晴らしいですね

・指定した変数名と一致する変数名の変数を取得

var fi = GetType().GetField(変数名, System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);


■下記参照
　http://msdn.microsoft.com/ja-jp/library/system.type.getfield(v=vs.110).aspx


■BindingFlagsに関しては下記参照
　http://msdn.microsoft.com/ja-jp/library/system.reflection.bindingflags(v=vs.110).aspx
herokuに静的サイトをデプロイする


herokuはデフォルトで静的サイトに対応していないのでindex.htmlしかない状態だと以下のように怒られる（デプロイできない）

```
!     Push rejected, no Cedar-supported app detected
```

このため静的サイトを置きたい時にはちょっとしたハックが必要になる模様。
方法はrubyを使う方法、nodeを使う方法、いろいろあって
今回は一番簡易的なPHPを使う方法。

## 1.index.phpを追加する

```
touch index.php
```

これでPHPアプリとみなされる。
composer.jsonが無いとwarningが出るけど問題ない。

## 2.php engineを無効にする　とみせかけてしない

色々なサイトに以下で無効にできる、と書いてあるのだけれど

```
echo 'php_flag engine off' > .htaccess
```

これを追加してpushしたところinternal errorになる。
原因がわからないのでしかたなく次の方法を取ることに。

## 3.index.phpからindex.htmlを読み込む

```
<?php echo file_get_contents('index.html'); ?>
```

静的じゃないけどまあいいか。


# 参考

[Herokuに手っ取り早く静的サイトをデプロイする(node版) - Qiita](http://qiita.com/mizchi/items/d6b2755958dc7645a8f8)

[Ruby - HerokuにRackでdeployする(初級編:静的HTMLページ) - Qiita](http://qiita.com/higuma/items/9baac9e97eeb862ef64e)

[Deployment of static files to Heroku](http://webapplog.com/deployment-of-static-files-to-heroku/)
Project Eulerをhaskellで練習していく日記: Problem 24

#問題
「置換表示」とは、ある集合の要素を順に並べたものである。
例えば、「3124」は{1,2,3,4}の置換表示の一例である。
これらの置換表示をその表示の辞書順（あるいは数字順）に並べたものを「置換表示の辞書順」と呼ぶ。
例えば、集合{0,1,2}の置換表示の辞書順は
012   021   102   120   201   210
である。

集合{0,1,2,3,4,5,6,7,8,9}の辞書順の1000000番目を求めよ。
#回答
全ての辞書順を列挙するとメモリも時間も大変なので、「構成していく」ような手法をとります。

```hs
-- 階乗
fact 0 = 1
fact n = n * fact (n-1)

-- 以下、置換表示を[Int]で表す

-- 0..n-1の置換表示の辞書順並びm番目の置換表示を得る関数
perm :: [Int] -> [Int] -> Int -> [Int]
-- 引数は順に、「そこまでに形成した置換表示」、「残っている数字」、「何番目」です。
perm s [] _ = s
perm s kouho m = perm (s++[c]) (filter (/=c) kouho) (m `mod` kubun)
                   where c = kouho !! (m `div` kubun)
                         n = length kouho
                         kubun = (fact n) `div` n
main = do 
     print $ concat $ map show $ perm [] [0..9] (1000000-1)
```

#感想
考えている過程では、divとmodと各引数が混乱しそうでなかなか大変でした。
メモ: PMP

遅延を取り戻す対処方法

# PM・・・プロジェクトマネージャ

[「機能型組織」「プロジェクト型組織」「マトリックス型組織」の意味とは？ -仕事に役立つビジネス用語 | iso.labo](http://iso-labo.com/wakaru/business/organization-function_project_matrix.html)

> 「プロジェクト型組織」ではプロジェクト内のマネジメントはPMが責任を持って行う。
> 各プロジェクトメンバーは定まったポジションはなく、プロジェクトが終了すれば
> 別のプロジェクトに所属する。


## PMの業務時間内訳

* 進捗会議、チーム会議、電子メール、口頭などのコミュニケーションに時間の90%を使う。
* PMで最も重要なスキルはコミュニケーション・スキルである。

## プロジェクトの制約

* 予算


## 意思決定

* 利益


## 未知のリスクが顕在化した時の遅れ対策

* コンテインジェンシー予備(あらかじめ確保された予算や期間の余裕分のこと)を確保しておく。
* 発生の頻度を元に是正処置の優先順位付けを行う


## 鎮静

* 問題の恒久的な解決にならない。問題は軽視されている。その結果問題が再浮上する。


# 見積もり

## 見積もり(コスト・タイム)

* 類推見積もり(トップダウン見積もり) ・・・ 過去の類似したプロジェクトの実績を参考

## プロジェクトのスピードアップを図る

* プロジェクトのスピードアップを図るために適切なアクションはフェーズを圧縮することである。
  * [[ThinkIT] 第5回：プロジェクト遅延を取り戻す方法 (2/4)](http://thinkit.co.jp/cert/project/20/5/2.htm)
* ファスト・トラッキング (独立性が高いタスクを並列に着手する。)
  * ただしリスク(?)・手直しが増大する。


## アローダイヤグラム

* 最初に各工程の関連及び並列に行える工程の精査、アローダイヤグラム化を行うことによる見積もり。
* [初級シスアド講座 アローダイヤグラム](http://www.pursue.ne.jp/jouhousyo/sysad/sysad015.htm)
  * 納期の延期についてクリティカルパスを明確にし、プロジェクトの遅れを把握、未然に対策を建てる。


# コスト

## 残作業のコスト(ETC)

* 現在の実績ベースで進んだ場合の、プロジェクトを完成させるためにあとどの程度の予算がかかるか。


## 完成時総コスト(EAC)

* 現在の実績に基づき、完成時におけるプロジェクトの総コストを見積もる。


## VAC (完成時差異)

* VAC = BAC(完成時総予算) - EAC(完成時総コスト)


# 会議

## 進捗会議

* 目標に対する影響度が変化したかを判断しなければならない。
* 技術的実績の測定の際はリスクが迫る。進捗会議でレビューするべきである。


## 複雑で詳細な情報をステークホルダー(出資者・株主)に伝える場合

* 書面にて伝えるのが最も適切。


# 不具合発生時の対応姿勢

* 正直で誠実な報告を行う。問題について知っているすべてを顧客に知らせ、
  代替案を見つけ出すための作業を行うべきです。

# LEADERとBOSSの違い

![boss_leader.jpg](https://qiita-image-store.s3.amazonaws.com/0/25728/bc219b1d-67d4-69ac-cfd7-1bf9f44a2488.jpeg)
ApacheでQueryString(URLパラメータ)の値によってBASIC認証をかけたい！

Apacheで特定のQueryString(URLパラメータ)に応じてBASIC認証をかける必要が出てきたのでRewriteを用いて対応しました。

# 設定したいこと
* 「area=admin」がQueryStringに設定されている場合BASIC認証をかける。
* 「area=admin」がない場合はそのまま表示できる。

当初は、 SetEnvIf を用いていけるかな？と考えていたけど、SetEnvIf の REQUEST_URIにはQueryStringは含まれていない。

「むー、こまった。」と途方に暮れていたらQueryStringを扱うにはRewriteを使いなさいと書いてあったので早速検討した。

「なんでBASIC認証かけるのにRewriteなんだよ。。。」ってブツブツ言いながら以下の設定をApacheに追加したら思ったとおりの挙動となりました。


# Apacheの設定
```lang:httpd.conf
RewriteEngine On
RewriteCond %{QUERY_STRING} area=admin
RewriteRule (.*) $1 [E=admin_access:1]

<Location />
    Order allow,deny
    Allow from All
    Deny from env=admin_access
    
    AuthUserFile /etc/httpd/conf/.htpasswd
    AuthGroupFile /dev/null
    AuthName "Administorator's Area"
    AuthType Basic
    require valid-user
    
    Satisfy Any
</Location>
```

やっぱり、ちょっと違和感あるな。。。(^_^)
ほかに方法ないのかな～

# 参考にさせていただいたサイト
[まとめサイト: SetEnvIf の Request_URI には Query String は含まれない](http://chibitcpu.blogspot.jp/2013/07/setenvif-requesturi-query-string.html)
[wall-climb » 特定URLのみBASIC認証を除外する](http://wall-climb.com/2009/07/19/%E7%89%B9%E5%AE%9Aurl%E3%81%AE%E3%81%BFbasic%E8%AA%8D%E8%A8%BC%E3%82%92%E9%99%A4%E5%A4%96%E3%81%99%E3%82%8B/)
ジェネリック型からインスタンスを作成

すげえ全然知らなかった,
多用するのはまずいらしいが
どんな型でもインスタンス化できるんじゃないかな？

・T abcde = Activator.CreateInstance<T>();

newとの違いはなんやろ？
後で調べよう
Project Eulerをhaskellで練習していく日記: Problem 23

#問題
ある自然数nが過剰数であるとは、その数nの真の約数の和がnを超えるときを言う。
例）12の真の約数は1,2,3,4,6なので、1+2+3+4+6=16>12となるので、12は過剰数と呼ぶ。

ついでに言うと、12は最小の過剰数である。

そして、24は12+12=24であるので、２つの過剰数の和で書ける最小の自然数である。

数学的に、
28123を超える全ての自然数は２つの過剰数の和で書ける　（＊）
ことが知られている。
一方で、二つの過剰数の和で書けない自然数の最大は、28123よりも小さいにもかかわらず、命題（＊）の条件の数28123をさらに下げるような証明はなされていない。

これら、「二つの過剰数の和で書けない自然数」の和を求めよ。
#回答
```hs
import qualified List as L
import qualified Data.Set as S

-- 素因数の列を求める
divisor 1 = []
divisor n = sd : divisor q
        where sd = head [d|d<-[2..n], n `mod` d==0]
              q = n `div` sd
-- 素因数グループ化
soinsuu n = [ (p !! 0, length p) | p <- L.group $ L.sort $ divisor n]

-- 約数関数
yakusuu [] = 1
yakusuu ((p,a):xs) = ((p^(a+1)-1) `div` (p-1))* (yakusuu xs)

-- 真の約数の和
shinsum n = (yakusuu $ soinsuu n) - n

abnums xs = [x| x<-xs, shinsum x > x]

main = do 
      print $ sum  $ S.toList $ (S.difference (S.fromList g) (S.fromList [x+y| x<-a, y<-a, x<=y, x+y<=ulimit]))
            where a = abnums g
                  ulimit = 28123
                  g = [1..ulimit]
```
#感想
まずは二つの過剰数の和で、28123以下のもののSetを作り、それらを[1..28123]の集合から除外したものの和を計算した。
[問題２１](http://qiita.com/hiroshi75/items/2d6425d15fcc396270ef)と同じく、[Wikipediaにある約数の和の式](http://ja.wikipedia.org/wiki/%E7%B4%84%E6%95%B0#.E7.B4.84.E6.95.B0.E3.81.AE.E5.92.8C)を利用。

※　問題２２は興味をそそらないのでスキップした。
静的フィールドの初期化ためブロックが定義できない

クラス定数を用意するのに多少の処理が必要な時がある。Java だと Static Initialization Blocks （静的初期化ブロック）と言われてるやつ。

問題
====

例えば、クラス定数（静的フィールド）の `Map` の初期化をするとき、Java だとこう書く:

```Foo.java
// Java のコードだよ
public class Foo {
    final static Map<String, String> MAP = new HashMap<>();
    static {
        // マップの初期化
        MAP.put(...);
        ...
    }
    ...
}
```

しかし、Dart にはこの `static { ... }` がない。

案1: プライベートなクラスメソッド（関数）を作る
===========================================

[Java チュートリアルでも同じ指摘してる](http://docs.oracle.com/javase/tutorial/java/javaOO/initial.html) んですが、`static { ... }` 使わないで、プライベートなクラスメソッド作ればいいのでは、という話:

```foo.dart
class Foo {
  static final map = _initMap();

  static Map<String, String> _initMap() {
    final m = new Map();
    // マップの初期化
    m[...] = ...;
    ...
    return m;
  }
  ...
}
```

案2: 即時実行関数をつかう
======================

JavaScript でいうところの `(function(){...})()` を使う:

```foo.dart
class Foo {
  static final Map<String, String> map = () {
    final m = new Map();
    // マップの初期化
    m[...] = ...;
    ...
    return m;
  }(); 
  ...
}
```

案1 と違い、例示した `map` に型の宣言を明示的に行わないと、Type Propagation? が働いてくれず、`dynamic` のままになってしまうので注意です。

個人的には `MAP` の型を明示的に指定するより、匿名関数の返り値の型を指定したいんだけど、そんな仕様ないっぽいですかね。
What is GSN ? - Part1 (Prof. Shuichiro Yamamoto at Nagoya Univ.)


This text is a transcription of the video [youTube ビデオ: GSN概説 - Part1 （名古屋大学　山本修一郎先生）](http://www.youtube.com/watch?v=YYRVvy2TZHU)

# GSN and Accountability

Today I'm going to talk about the relationship between Acoutability and GSN(Goal Structuring Notation).

## Acountability

What is Accountability?

It is an ability to explain to others that a system, activity, or a process conforms to a certain principle.

This is the concept of accountability.


![kobito.1408688936.653221.png](https://qiita-image-store.s3.amazonaws.com/0/51055/2da07731-912f-a650-fc69-a5848d613b7f.png "kobito.1408688936.653221.png")

So in order to achieve accountability, there needs to be a way to explain the conformance that a system is developed following a certain principle.


## GSN による説明

GSN is one approach to achieve accountability to explain that a system conforms to a principle, and in order to illustrate the argument visually, GSN provides 4 types of nodes.

![GSN-4-nodes-small.jpg](https://qiita-image-store.s3.amazonaws.com/0/51055/7db86bb1-18fc-0838-c55b-3ff849019bb0.jpeg "GSNの4つの要素")

1. **Goal**
In this example, a statement "The system conforms to the principle" is the top goal called a claim.
1. **Strategy**
When it is difficult to explain the goal directly, you want to divide the goal into several sub-goals. To show the underlying thinking of the division, a strategy node is used.
1. **Context**
A Context node is used to show a context, or an assumption on which the following argument is developed.
1. **Solution**
Finally, an solution node is used to show that a leaf goal is supported by an evidence.

To sum up, GSN uses these four basic components to explain the argument structure of the claim.
This is how GSN can help you achieve accountability.

# The Video

この文章は、[youTube ビデオ: GSN概説 - Part1 （名古屋大学　山本修一郎先生）](http://www.youtube.com/watch?v=YYRVvy2TZHU) の中身です。ぜひビデオをごらんください。
bash で peco を使っています


#peco-history

hisotry から検索して実行する。Ctrl+r にわりあてるといいかもしれない。

``` sh
function peco-hist() {
    time_column=`echo $HISTTIMEFORMAT | awk '{printf("%s",NF)}'`
    column=`expr $time_column + 3`
    cmd=`history | tac | peco | sed -e 's/^ //' | sed -e 's/ +/ /g' | cut -d " " -f $column-`
    history -s "$cmd"
    eval $cmd
}
```


#peco-kill

px aux から検索して kill する。
よく kill するし、pid を手で入力するのは怖いので便利なきがする。

``` sh
function peco-kill(){
    proc=`ps aux | peco`
    pid=`echo "$proc" | awk '{print $2}'`
    echo "kill pid:$pid. [$proc]"
    kill $pid
}
```


# peco git grep vi

git grep の結果から vi でそのファイルのその行を開く。

``` sh
function peco-gvi(){
    # -n 行番号を表示
    result=$(git grep -n $1 | peco)
    # peco の戻り ( 複数行返ったときは知らない ) からファイルパスを取得
    file=$(echo $result | cut -d ":" -f 1)
    # 2カラム目の 行番号を取得
    linenumber=$(echo $result| cut -d ":" -f 2)
    # ファイルパスが空でなければ
    if [ $file != "" ]; then
        cmd="vi -c $linenumber $file"
        # history に履歴を追加して
        history -s $cmd
        # 行番号を指定して vi で開く
        $cmd
    fi
}
```
eshellで使えるようにsudoeditを実装してみた

このごろeshellを使ってるんですが、root権限でファイルを開く時にめんどくさいんですよね。
zshを使ってた時はsudoeditを使ってたんですが、eshellから開くならtramp使って開きたい気分だったので、適当に関数書きました。

```el
(defun eshell/sudoedit (file)
  (if (string-equal "/" (substring file 0 1))
      (find-file (concat "/sudo:root@localhost:" file))
    (find-file (concat "/sudo:root@localhost:" default-directory file))))
```

不具合あるかもしれませんので自己責任でご利用ください。
numpy, scipyちょっと遅い気がするって時はblas, lapack, atlasが入っているか見直しましょう

僕の場合はatlasのみ抜けていて、atlas入れてからビルドし直したらめっちゃ速くなった


## 確認方法

```py
import numpy
import scipy

numpy.__version__ # 1.9.3
numpy.show_config() # blas, lapack, atlasと一緒にビルドされているか確認できる

scipy.__version__ # 0.16.0
scipy.show_config() # numpyの場合と同様
```

## どのくらい速くなるのか

以下のGaP-NMFのpython版ベンチマーク（マニアックですが）で、1.75倍速くなった。[コメント参照](https://gist.github.com/r9y9/3d0c6a90dd155801c4c1#comment-1286548)
[GaP-NMF short benchmark scripts for Python and Julia.](https://gist.github.com/r9y9/3d0c6a90dd155801c4c1)

Juliaの方が遅くなって僕は涙目です

## ATLASのインストール

ubuntuの場合は

```
sudo apt-get install libatlas-base-dev
```

とすればおｋ