OmniAICreator/Qiita-1.07M huggingface dataset:
技術英語 > Atlanta's pipes were so old and [in such bad shape]. / start to take shape

@ LOE > February 7, 2003

http://loe.org/shows/shows.html?programID=03-P13-00006
>  it didn't realize that Atlanta's pipes were so old and <font color=red>in such bad shape</font>.

http://ejje.weblio.jp/content/in+bad+shape

<hr>
関連して思い出したのは

> ... start to take shape

http://dictionary.goo.ne.jp/ej/76292/meaning/m0u/

作業してきたものが形になり始めたときに使われていた。
ソースはLOEだと思うが、いつのものだったかは失念した。
Angular2 タグのプロパティとして for や 任意

AngularJS2 で フォーム要素に対して for を使いたい場面は少なくないはず。
バリデーション等の機能を備えたLibraryを使ってたりすると避けられないことも。

```html:test.html
  <div class="input-field col s12">
    <textarea id="textarea1" class="materialize-textarea"></textarea>
    <label for="textarea1" class="">Textarea</label>
  >/div>
```

AngularJS2を利用して indexを動的に変更する場合、感覚的に下記のように書くと 
```Can't bind to 'for' since it isn't a known native property ("
```なるエラーが発生したりする。

```html:動かないサンプル
  <div class="input-field col s12">
    <textarea id="textarea{{index}}" class="materialize-textarea"></textarea>
    <label for="textarea{{index}}" class="">Textarea</label>
  >/div>
```

解消するために２点修正

- for ⇒ [attr.for] とする。
- {{}}  は不要 "" 内が既に js に解釈される

```html:動かないサンプル
  <div class="input-field col s12">
    <textarea id="textarea{{index}}" class="materialize-textarea"></textarea>
    <label [attr.for]="'textarea' + index" class="">Textarea</label>
  >/div>
```

それにしても、書き方色々あってめんどいなぁ
Constメンバ変数のあるクラスをvectorで管理する


# const メンバ変数とvector問題
メイヤー氏のEffective C++にならい、
後から変更しないものはなるべくconstをつけて
イニシャライザリストで初期化するように、値が設定されるタイミングをなるべく限定してバグを生まないように心がけてプログラミングしてきたのだが。

```
#include <vector>

class WithConst{
public:
    WithConst(const int &value):value(value){};
    const int &getConstValue()const{return value;};
protected:
    const int value;
};

int main(int argc, const char * argv[]) {
    std::vector<WithConst> vec;
    vec.push_back(WithConst(20));
    vec.push_back(WithConst(30));
    vec.push_back(WithConst(40));
    vec.erase(vec.begin()+1);
    return 0;
}
```
でコンパイルが通らない。

これはvec.eraseが2番目の要素を取り除いた後に3番目の要素を2番目にコピーするためにコピーアサインメントを行うためだが、コピーアサインメント・オペレータが、const int valueのために暗黙のうちに削除されているからという理由。

もちろんsetterもないクラスなので、そこまで値をガードする必要があるのかどうか分からないが、変更する「意図がない」という事をコード上に書く事は、意図の明白性、ひいてはリーダビリティのために重要なのではと思う。

なので、これが理由でconstを取るというのはイケてないという前提のもと、
もしコピーアサインメント・オペレータを自力でかくとすると以下のようになる

# copy assignment の追加
```
class WithConst{
public:
    WithConst(const int &value):value(value){};
    WithConst & operator= (const WithConst & other){
        if(this != &other){
            int* ptr = const_cast<int*>(&this->value);
            *ptr=other.value;
        }
        return *this;
    }

    const int &getConstValue()const{return value;};
protected:
    const int value;
};
```
一応動作したが、const_castが美しくない。constメンバのあるクラスをvectorに入れるなんてみんなやりそうなことだがみんなどうしてるのだろうか...

もう一つのやり方があるとすればunque_ptrかshard_ptrをそもそもvectorに格納する方法。

### shared_ptrの例

```
class WithConst{
public:
    WithConst(const int &value):value(value){};
    const int &getConstValue()const{return value;};
protected:
    const int value;
};

int main(int argc, const char * argv[]) {
    std::vector<std::shared_ptr<WithConst>> vec;
    vec.push_back(std::make_shared<WithConst>(20));
    vec.push_back(std::make_shared<WithConst>(30));
    vec.push_back(std::make_shared<WithConst>(40));
    vec.erase(vec.begin()+1);
    std::cout << vec[1]->getConstValue() << std::endl;
    return 0;
}
```
問題なく動作する。constnessを保持し、const_castを使わないでいいので、
こちらの方が美しい。要素をポインタで取る時もweak_ptr使えるのでダングリングが防げるし。
これかなぁ。
IntelliJ IDEA プラグイン開発でエディタ→右クリック時のポップアップに機能を追加するときのGroups



選択中の文字列で検索する、という感じのプラグインを作るために
右クリックしたときのポップアップに項目を追加したかったのですが、
[こちら](http://keithlea.com/idea-actions/)を見てもどのGroupsを使えばいいのかわからん！となったので実際並べてみました。

ただ、全てを並べるのは大変なのでそれらしいものに当たりをつけて追加してみたところ、
Groupsに`EditorPopupMenu`を指定すれば良さそうですが似たようなものがいくつかあります。

- EditorPopupMenu
- EditorPopupMenu.GoTo
- EditorPopupMenu.Run
- EditorPopupMenu1
- EditorPopupMenu1.FindRefactor
- EditorPopupMenu2
- EditorPopupMenu3

実際にこれらを指定してIntelliJ IDEA（v15.0.4）で確認した結果がこちらです。

![スクリーンショット 2016-03-22 3.21.15.png](https://qiita-image-store.s3.amazonaws.com/0/27241/fd42a85e-bec4-9240-eab4-1f50a8563583.png "スクリーンショット 2016-03-22 3.21.15.png")


「\*\*\*＜GroupsとAnchor＞***」と表示されているのが今回追加したものになります。
`EditorPopupMenu`はポップアップ全体、数字付きはポップアップ内の位置にかかっているようです。

また、Android Studio（v1.5.1）に入れてみたところ結果が変わりました。

![スクリーンショット 2016-03-22 3.25.00.png](https://qiita-image-store.s3.amazonaws.com/0/27241/a7aad25b-8303-c1fe-d3d4-0ec8169c528b.png "スクリーンショット 2016-03-22 3.25.00.png")


`EditorPopupMenu1.FindRefactor`、`EditorPopupMenu2`、`EditorPopupMenu3`がありません。

Android StudioにIntelliJ IDEA向けのプラグインを取り入れる場合や、
Android Studio向けのプラグインを作成する際はGroupsが対応しているか注意する必要がありそうです。
シェルスクリプトのみでMacとWindowsのファイルパスを相互変換する方法(Macユーザ向け)

## 職場などでMacとWindowsのファイルパスを相互変換したい機会って多いですよね？
自分の職場（部署）ではほとんどがWindowsユーザなので、slackなどでファイルパスをやり取りする際、ほぼ100%パスを変換する必要がでてくる

```
例）同じファイルが
Winだと
\\Nas\aaa\bbb\ccc.xlsx
Macだと
smb://Nas/aaa/bbb/ccc.xlsx
```

## PathCon※というwebサービスで解決できるがもっと簡単にしたい
※2018/1/29追記　PathConはサービス終了したようです
- Macへ移行直後から[PahtCon](http://bootgraph.net/pathcon/)というwebサービスを使って解決していた
- 素晴らしいサービスで基本的にこれを利用すれば問題ない
- ただし、個人的に以下のような課題を感じていた
	- いちいちwebサイトを開いてパスを変換するのが手間(web読み込みにも時間かかる)
	- セキュリティも心配

## Automatorを活用して解決する方法
- ググるとAutomator＋シェルスクリプト＋ファイルパスを読み込むスクリプトにて実現する方法が最適解ぽい
- 以下と似たような例はたくさんでてきた
	- [MacのAutomatorを使ってWindowsのファイルパスを変換しつつFinderで開く方法](http://ameblo.jp/tsq/entry-11400112359.html)

## Automatorを利用せずシェルスクリプトのみで実現する方法
今回色々調べてやってみたのがこちら
なんとなくAutomatorを使うのが余計面倒に感じる方むけ

[手順]
1.MacとWindowsのファイルパスを相互変換するスクリプトを用意
macからwinへ

```
#!/bin/bash
# クリップボードに格納されたパスをmacからwinへ置換して再びクリップボードへ格納するスクリプト
pbpaste | sed -E 's/smb:\/\//\\\\/' | sed -E 's/\//\\/g' | tr -d '\n' | pbcopy

```
winからmacへ

```
#!/bin/bash
# クリップボードに格納されたパスをwinからmacへ置換して再びクリップボードへ格納するスクリプト
pbpaste | sed -E 's/\\+/smb:\/\//' | sed -E 's/\\/\//g' | tr -d '\n' | pbcopy

```

2.用意したスクリプトをFinderなど、コンソール以外からも実行できるようにする 
[.sh]を[.command]という拡張子に変更し、実行権限をつけることで実現できる

[Macでバッチ（command）ファイルを作る方法](http://qiita.com/TatsuyaOGth/items/f15bfa9aeb68d8ecfc67)

3.作成したバッチをspotlight検索などで瞬時に実行できるようにして利用
自分の環境ではデスクトップにシンボリックリンクを貼り、spotlight検索で表示されるようにする必要があった

## 感想ひとこと
- そもそもsedやtrや正規表現での置換とか実はちゃんとやったことなかったので勉強になった
- 覚えたてのpbcopy/pbpasteもやはり便利 →[Macのターミナルとクリップボード間でコピー＆ペースト](http://qiita.com/odacoh/items/742eb52441202119bf3)
- [.command]で実行すると毎回コンソールが立ち上がって邪魔とか、spotlightで検索ってどうなの？とか課題は山ほどあるが、いくらでも工夫の余地がありそうなのと、PathCon使うよりはスピーディーになったので、ひとまず満足してます
- 個人的にはクリップボード履歴アプリに、スクリプトでテキスト整形できる機能が
ついていれば一番いいのだけど、なかなかこれ、というアプリが見つからない

## 参考
[【神ツール】会社Macユーザー必見！MacとWindowsのファイルパスを相互変換できるウェブサービス「PathCon」](http://gori.me/web/46047)
[MacのAutomatorを使ってWindowsのファイルパスを変換しつつFinderで開く方法](http://ameblo.jp/tsq/entry-11400112359.html)
[Macのターミナルとクリップボード間でコピー＆ペースト](http://qiita.com/odacoh/items/742eb52441202119bf3e)
[hydroculのメモ > コマンドの使い方(Linux) > sed コマンド](https://hydrocul.github.io/wiki/commands/sed.html)
[hydroculのメモ > コマンドの使い方(Linux) > tr コマンド](https://hydrocul.github.io/wiki/commands/tr.html)
[正規表現によるマッチング](https://www.mlab.im.dendai.ac.jp/~yamada/java/regex/)
[Macでバッチ（command）ファイルを作る方法](http://qiita.com/TatsuyaOGth/items/f15bfa9aeb68d8ecfc67)
[Macでファイル名検索する方法のまとめ](http://inforati.jp/apple/mac-tips-techniques/system-hints/how-to-search-a-file-name-easily-with-macos-finder-and-spotlight.html)
PHPのuseの使い方

```php:A.php
<?php
namespace XXX\YYY\ZZZ\A1;
class Human1{
  public function run(){
    return 'run1';
  }
}
class Human2{
  public function run(){
    return 'run2';
  }
}
class Human3{
  public function run(){
    return 'run3';
  }
}
```

useを使うと、XXX\YYY\ZZZ\A1というnamespaceのエイリアスを作成し、A1で参照できるようになる。

```php:C.php
<?php
require_once 'A.php';

use XXX\YYY\ZZZ\A1 as A1; //XXX\YYY\ZZZ\A1,をA1で参照できるようにエイリアスを作成
$human1 = new A1\Human1();
$human2 = new A1\Human2();
$human3 = new A1\Human3();

echo $human1->run().'\n'; //「run1」と出力
echo $human2->run().'\n'; //「run2」と出力
echo $human3->run().'\n'; //「run3」と出力
```
ちなみに、

```
use XXX\YYY\ZZZ\A1 as A1; 
```

これは、

```
use XXX\YYY\ZZZ\A1;
```

と同じ。
また、asを使うと、作成するエイリアスの名前をA1以外にできる。
PHPのnamespaceの使い方

### クラス名の重複
A.phpとB.phpがあり、これらのファイルにはそれぞれ、Humanクラスとrunメソッドが定義されているとする。

```php:A.php
<?php
class Human{
  public function run(){
    return 'run';
  }
}
```

```php:B.php
<?php
class Human{
  public function run(){
    return 'run';
  }
}
```

これら２つのファイルを読み込み、Humanクラスのインスタントを生成して、runメソッドを実行する。

```
<?php
require_once 'A.php';
require_once 'B.php';
$human = new Human();
echo $human->run().'\n';
```

以下のような、Fatal errorが発生する。
```Fatal error: Cannot declare class Human, because the name is already in use in .../B.php on line 3
```

### 原因
- A.php,B.phpで同じクラスを定義していて、名前が重複しているから。

### エラー解決
- A.php、B.phpに`namespace xxx;`を追加

```php:A.php
<?php
namespace A1; //これを追加した
class Human{
  public function run(){
    return 'a1 run';
  }
}
```

```php:B.php
<?php
namespace B1; //これを追加した
class Human{
  public function run(){
    return 'b1 run';
  }
}
```

先ほど同様に、これら２つのファイルを読み込みHumanクラスのインスタントを生成して、runメソッドを実行する。

```
<?php
require_once 'A.php';
require_once 'B.php';
$human = new A1\Human();
echo $human->run().'\n'; //「a1 run」と出力

$human = new B1\Human();
echo $human->run().'\n'; //「b1 run」と出力 
```

A1というnamespace(名前空間)に属するHumanクラス、B1というnamespaceに属するHumanクラス、というようにそれぞれ区別できて、エラーは解決。
C++とWin32APIでマウスを押したりホイールをまわしたり

```cpp:tmp.h
void	lclick(int x,int y){
	SetCursorPos(x,y);
	mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
	mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
}
void	rclick(int x,int y){
	SetCursorPos(x,y);
	mouse_event(MOUSEEVENTF_RIGHTDOWN,0,0,0,0);
	mouse_event(MOUSEEVENTF_RIGHTUP,0,0,0,0);
}
void	wheel(int w){
	mouse_event(MOUSEEVENTF_WHEEL,0,0,w,0);
}
```
あとは適当にlclick(120,300);等等と書けばカーソルが瞬間移動してスクリーン座標120,300を左クリックしてくれます。
wheel(-100);と書けばウィンドウが下にスクロールします。
他の人はSendInput関数を使う方法を紹介していますが私の環境ではなぜかスクリーンセーバが起動します。意味不明なので上記が堅実です。
KMLデータを一気にPostGISで処理する

#外部のKMLデータを簡単にハンドリングしたい

オープンデータなどで自治体から公開される空間情報（GIS）では、KMLやKMZ（KMLをZIP圧縮したもの）を見かけるようになりました。

##面倒なデータベースへのロード

KMLはXML形式のテキストデータです。これをデータベースに読み込むには２つの方法があります、

 1. コンピュタープログラムでXMLを読込み、成形した後にデータベースに取り込む
 2. データベースにXML型のデータとして取り込み、成形する

どちらもXMLデータを読込み加工するプロセスを取りますが、「１」の方式ではデータベース以外にプログラミングが必要です。「２」の方法では、XMLを取り込んでからは全てデータベースのSQLで記述します。

##PostgreSQLにKMLデータをロード

PostgreSQLにはXML型が定義してあり、XMLデータを読込・検索・加工が可能です。XML型のテーブルを作成し、データをロードします。

```sql:STEP1_create_table.sql
--XML型のテーブルを作成する
CREATE TABLE t_kml(kml xml);
```

COPY文を使って、外部ファイルのKMLをテーブルに読み込みます。
（MACやLINUX環境が前提です。Windowsの場合はCygwinなどでcat,sed,trが使えるようにして下さい。）

```sql:STEP2_copy_from_kml.sql
COPY t_kml FROM 
PROGRAM 'cat /tmp/od_gis_10121_kokudo.kml | sed -e ''s/xmlns=[^"]*\"/\hoge="/g'' | tr -d ''\n'' '
DELIMITER '*';
-- /tmp/od_gis_10121_kokudo.kml がkmlファイルのフルパス
```

###ｋｍｌを読み込むコツ
- 名前空間(xmlns)の削除 
    - ｘｍｌの名前空間の宣言`<kml xmlns="URLなど" >`があると、XMLデータのロードに失敗することから、COPYコマンドの`PROGRAM`(PostgreSQL 9.3以降）を用いてsedコマンドでxmlnsをhogeに置換しています。（なぜxmlnsがあるとNGなのかは、私の勉強不足でよく分からない）
- 改行記号の削除
    - COPY文は改行記号で行を判別してしまいます。xml型はxmlドキュメント全体を１行のデータとして取り込む必要がありますので、改行記号が邪魔です。そこで` tr -d '\n'`でKMLデータの全ての改行記号を削除しています。

##空間データの抽出

今回は新潟市のオープンデータ[国道](http://www.city.niigata.lg.jp/shisei/seisaku/it/open-data/opendata-gis/od-gis_dourosuido/od-gis_kokudo.files/od_gis_10121_kokudo.zip)を例に説明します。
線形状で表現されていて`LineString`というタグの中に格納されています。xpath関数を用いて、xmlの中の`LineString`タグを抽出してみます。

```sql:STEP3_select_LineString.sql
SELECT 
 unnest( line_data )::text AS line
FROM 
 (SELECT  
   xpath(E'//LineString' , kml ) AS line_data 
  FROM t_kml
 ) AS main ;
```

- 解説　` xpath(E'//LineString' , kml )` 
    - kml列に格納されているXMLデータからLineStringタグを抽出します
    - 戻り値はxml配列型
- 解説 `unnest( line_data )::text`
    - unnsetは配列型のデータを複数の行に変換する変換する関数です

##空間分析

抽出したLineStringタグを空間情報に変換して、空間分析を実施します。

```sql:STEP4_get_legth.sql
WITH base AS (
	SELECT 
	unnest(pm)::text AS line
	FROM (SELECT  xpath(E'//LineString' , kml ) AS pm  FROM t_kml ) AS main 
) 
SELECT 
 SUM( ST_Length( ST_GeomFromKML( line ) ::geography ) )/1000 AS km_length , COUNT(*) AS road_link_num
FROM 
base 
;
```

- 解説 :`　ST_GeomFromKML( line )`
    - ST_GeomFromKMLはKMLのタグを投入すると空間情報（geometry型)に変換します
- 解説 :`ST_Length`
    - 線分形状の長さを算出する関数です。geography型のデータは

実行結果

| km_length| road_link_num |
|:-----------|------------:|
| 115.57520633318|35|  

実行の結果、新潟市の国道の長さは１１５ｋｍであることが分かりました。
Go言語をyumで入れる

公式ページの[Getting Started](https://golang.org/doc/install)に書いてあるのはアーカイブをダウンロードして展開する方法ですが、epelリポジトリを追加することでyumでインストールすることができます。ただし、現時点で配布されているバージョンは`1.5.1`です。

> Golangのリリース履歴
Go 1.6 (February 2016)
Go 1.5 (August 2015)
Go 1.4 (December 2014)
Go 1.3 (June 2014)
Go 1.2 (December 2013)
Go 1.1 (May 2013)
Go 1 (March 2012)

## 環境
CentOS release 6.7 

## epelリポジトリの追加
epelを追加していない場合は追加

```sh
$ sudo yum install epel-release
```

##  golangのインストール
以下だけ。

```sh
$ yum install -y golang
```

念のため確認

```sh
$ go version
go version go1.5.1 linux/amd64
```

## ディレクトリの作成
デフォルトはGOPATHは設定されていないっぽいですが、
GOPATHになり得るディレクトリは`/usr/share/gocode`に作成されているので変更する必要がなければ、そのままPATHの設定を行う。
自分は変えたかったので以下を作成

```sh
$ mkdir /usr/local/gocode
$ mkdir /usr/local/gocode/{src,bin,pkg}
```

## PATHの設定
yumの場合は`/usr/lib/golang`にgolangがインストールされるのでGOROOTに指定する。
GOPATHは作成したディレクトリを指定する。

```sh
$ echo export GOROOT=/usr/lib/golang >> ~/.bash_profile
$ echo export GOPATH=/usr/local/gocode >> ~/.bash_profile
$ echo export PATH=$PATH:$GOROOT/bin:$GOPATH/bin >> ~/.bash_profile
$ source ~/.bash_profile
```

以上で完了。
回路シミュレーション LTspice の使い方(4) 「ウィーンブリッジ発振回路」FETで自動ゲイン制御する

## 概要
「ウィーンブリッジ発振回路」をFETで自動ゲイン制御する

## はじめに

前回、「回路シミュレーション LTspice の使い方(3) 「ウィーンブリッジ発振回路」の挙動」で作成した発振回路では、規定の増幅率(ゲイン)の維持が難しく、正弦波のピークが歪んでしまった。
http://qiita.com/exabugs/items/fd447b7bdf578c832c4b

その後の調査で、接合型FET で自動ゲイン制御 (AGC (Automatic Gain Control)) できることがわかり、早速、試してみる。


## 接合型FET
まず、LTspiceにFETモデルを追加する。
「秋月」で入手可能な接合型FETで、かつ、LTspiceモデルがある部品を探す。

東芝製 接合型 FET 「2SK369V」 がよさそう。

「東芝製 接合型 FETモデルをLTSpiceに追加する」
http://www.eleki-jack.com/audio2/2009/10/_fetltspice.html

上記対応済みの部品セットをGithubで公開しておきます。(LTspiceのlib配下)
https://github.com/exabugs/LTspice

## 部品配置
 「2SK369V」 を配置するには、まず 「njf」を配置して、
![スクリーンショット 2016-03-21 23.29.47.png](https://qiita-image-store.s3.amazonaws.com/0/69410/4a534747-f901-0ce2-5db9-49a78d661853.png)

「Pick new transistor」で 「2SK369V」 を選択する。
![スクリーンショット 2016-03-21 23.31.47.png](https://qiita-image-store.s3.amazonaws.com/0/69410/a6a5bb6f-56af-a8d8-975a-f2dbfb72741d.png)


## 回路図
AGC (Automatic Gain Control) として 「2SK369V」 を追加した回路が以下

![スクリーンショット 2016-03-21 23.16.20.png](https://qiita-image-store.s3.amazonaws.com/0/69410/d7299a8b-2465-6382-1a25-15a6d879ed74.png)



## シミュレーション結果
(青いラインは、FETのゲートに加わるゲインの制御信号の様子)
![スクリーンショット 2016-03-22 0.20.15.png](https://qiita-image-store.s3.amazonaws.com/0/69410/3b76036c-52ed-44b2-9488-881a8fa4b7ab.png)


頂点部分を拡大
おぉ！歪んでいない！
![スクリーンショット 2016-03-21 23.35.43.png](https://qiita-image-store.s3.amazonaws.com/0/69410/fe2bfa53-1176-cdc3-9501-64b1237780a4.png)


時間軸を拡大
まずまず綺麗な正弦波に改善されている。
![スクリーンショット 2016-03-22 0.25.39.png](https://qiita-image-store.s3.amazonaws.com/0/69410/1e06123b-4ae3-4934-57aa-8dc62e22480e.png)


FFT結果
![スクリーンショット 2016-03-22 22.22.39.png](https://qiita-image-store.s3.amazonaws.com/0/69410/d739f76a-4f8e-fa6d-fcd8-d6f9658982c8.png)


## まとめ
 - 接合型電界効果トランジスタ(Ｊ-ＦＥＴ)は低ドレイン電圧のとき、電圧で制御できる可変抵抗として動作する。
 - 「ウィーンブリッジ発振回路」において、接合型FETによって自動ゲイン制御することができるようになった。
 - 自動ゲイン制御(AGC (Automatic Gain Control)) は、とても便利だ。これは重要な回路に違いない。
 - 本当はESP8266(ESP-WROOM-02)の電子工作がしたいのに、段々と、路線が外れてきている。

## 参考文献

 - 連載（2）LTSPICEで回路の検討　ウィーンブリッジ発振回<br>
http://www.eleki-jack.com/KitsandKids2/2008/11/2ltspice.html
 - 電圧制御可変抵抗<br>
http://analog-engineer.cocolog-nifty.com/blog/2008/12/post-fec8.html
 - 単電源・ウィーンブリッジ発振回路 (FETでゲイン制御する)<br>
http://kosakai.world.coocan.jp/wb_fet_tandengen.html

## LTspiceモデル
サイト「エレキジャック」で配布しているLTspiceモデル
http://www.eleki-jack.com/

 - 東芝製　接合型 FETモデルをLTSpiceに追加する<br>
http://www.eleki-jack.com/audio2/2009/10/_fetltspice.html
 - 日本製ダイオード・モデルをLTSpiceに追加する<br>
http://www.eleki-jack.com/audio2/2009/03/ltspice.html
 - LTspice用ツェナー･ダイオードのデータ<br>
http://www.eleki-jack.com/audio2/2009/05/ltspice_1.html
 - 東芝製トランジスタ・モデルをLTSpiceに追加する<br>
http://www.eleki-jack.com/audio2/2009/07/ltspice_2.html
whoopsでエラー画面をリッチにしよう！！

Whoopsは開発段階のエラー画面に様々な情報を表示してくれるライブラリです。
メリットは以下3点

- デバッグに必要な様々な情報を表示することが出来る
- 様々なフレームワークに対応している
  - CakePHP2、CakePHP3、Laravel等々対応しています
- 導入が簡単(composerでインストールするだけ)

whoops公式サイト
https://filp.github.io/whoops/

## インストール

### CakePHP3へインストール

```
require oldskool/whoops-cakephp:~2.1

# bootstrap.php
Plugin::load('WhoopsCakephp', ['bootstrap' => true]);
```

### CakePHP2へインストール

```
composer require oldskool/whoops-cakephp:dev-cake2

# bootstrap.php
CakePlugin::load('WhoopsCakephp', array('bootstrap' => true));
```

### whoops単体で使う場合

```
composer require filp/whoops
```

## CakePHP3で動かしてみる

### デフォルト

![2016-03-21_23h48_53.png](https://qiita-image-store.s3.amazonaws.com/0/49429/b29dc6d5-2d28-9433-31cf-9d1cfadceb0c.png)

### whoops対応後

![2016-03-21_23h49_25.png](https://qiita-image-store.s3.amazonaws.com/0/49429/f4d1ac2b-5cc9-e5e8-37a7-99427d2152ef.png)

※StackTrace、対象部分のコード、変数が全て確認することが出来る


## 問題点

CakePHPの場合は `ErrorHandler` を完全に上書きするので `ErrorHandler` を拡張するライブラリと相性が悪い。。。
SFTPを用いて特定ユーザをchrootする方法

#SFTPを用いて特定ユーザをchrootする方法
FTPの変わりにセキュアなSFTPを運用したいが、そのまま運用してしまうとどんなユーザでも「/」以下が丸見えになってしまう。また本来とは違ったディレクトリに対して誤操作してしまう可能性がある。そのため、例えば「hogehoge.xxx」ドメインの運用ユーザは「/var/www/hogehoge.xxx」が「/」となるようにシステム側でしたい。そのためにsshのchrootという仕組みを使用する。

#運用の前提
- 「hogehoge.xxx」ドメインの運用ユーザ名は「hogehoge.xxx」とする。
- hogehoge.xxxユーザはSFTPのみ使用でき、ssh自体のログインできない物とする。
- 鍵形式でのログインとする。

#ディレクトリの作成
WEBからのドキュメントルートは「/var/www/hogehoge.xxx/doc_root」にしておき、.sshファイルはWEBからは見えないようにしておきます。

```lang:
mkdir -p /var/www/hogehoge.xxx/doc_root
mkdir -p /var/www/hogehoge.xxx/.ssh
```

#ユーザ・グループの作成
「chroot_sftp」グループに属しているとホームディレクトリにchrootすると後でsshに設定しますのでユーザを「chroot_sftp」に属させます。

```lang:
groupadd -g 2002 hogehoge.xxx
useradd -u 2002 -g 2002 -N -s /sbin/nologin -M -d /var/www/hogehoge.xxx hogehoge.xxx
usermod -aG chroot_sftp hogehoge.xxx
```

#鍵の作成
[セキュアなSSHサーバの作成](http://qiita.com/kite_999/items/aa03870eb071683a8feb)の手順でhogehoge.xxxユーザの鍵を作成
その中の公開鍵を次の「authorized_keys」の内容に貼り付けます。

#authorized_keysの作成
先ほど作成した鍵の内容でファイルを作成します。

```lang:
vi /var/www/hogehoge.xxx/.ssh/authorized_keys
```

#ファイル、ディレクトリ属性の変更
chrootするためには「/var/www/hogehoge.xxx/」自体はrootの持ち物にしておく必要があります。

```lang:
chown -R hogehoge.xxx:hogehoge.xxx /var/www/hogehoge.xxx
chmod 700 /var/www/hogehoge.xxx/.ssh/
chmod 600 /var/www/hogehoge.xxx/.ssh/authorized_keys
chown root:root /var/www/hogehoge.xxx
```

#sshd_configの修正
下記を最下部に追加します。

```lang:/etc/ssh/sshd_config
Match group chroot_sftp
  ChrootDirectory ~
  ForceCommand internal-sftp
  X11Forwarding no
  AllowTcpForwarding no
```

反映
`/etc/init.d/sshd restart`

よく
`Subsystem sftp  /usr/libexec/openssh/sftp-server`
自体をコメントアウトするなどありますが不要だと思います。
マッチで上書きしているので。お任せします。

以上でwinscpなどで入ると「/var/www/hogehoge.xxx/」が最上位となり、またputtyではログインできないようになります。

以上。
[JavaScript] Reactive vs Promises

from [RxJS Observables vs Promises](https://egghead.io/lessons/rxjs-rxjs-observables-vs-promises)

根據以上影片
本文稍做修改來介紹Reactive與Promise的差異

先看以下sample

```js
console.clear();

var promise = new Promise((resolve) => {
  setTimeout(() => {
    resolve(42);
  }, 500);

  console.log('promise started');
});

promise.then(x => console.log(x));

var source = Rx.Observable.create((observer) => {
  setTimeout(() => {
    observer.onNext(43);
  }, 400);

  console.log('observable started');
});

source.forEach(x => console.log(x));
```

console

```text
"promise started"
"observable started"
43
42
```

依序promise.**then**行為及訂閱或觀察Observable source.**forEach**
初始化分別印出**promise started**及**observable started**
然後再印出**43**之後才是**42**
因為source的timeout時間較promise的短

###Lazy
```js
console.clear();

var promise = new Promise((resolve) => {
  setTimeout(() => {
    console.log('promise timeout hit');
    resolve(42);
  }, 500);

  console.log('promise started');
});

// promise.then(x => console.log(x));

var source = Rx.Observable.create((observer) => {
  setTimeout(() => {
    observer.onNext(43);
  }, 400);

  console.log('observable started');
});

// source.forEach(x => console.log(x));
```

console

```text
"promise started"
"promise timeout hit"
```

由此可以看到
當**new Promise**物件就會執行初始化印出**promise started**
並且在500毫秒時印出**promise timeout hit**
但因為註解promise.then行為所以不會取x值印出42
而另一方面註解訂閱或觀察Observable
則不會執行初始化當然也就不會印出observable started及43

###Disposable, Repeatable, Retry
```js
console.clear();

var promise = new Promise((resolve) => {
  setTimeout(() => {
    console.log('promise timeout hit');
    resolve(42);
  }, 1000);
  
  console.log('promise started');
});

promise.then(x => console.log(x));
promise.then(x => console.log(x));

var source = Rx.Observable.create((observer) => {
  var id = setTimeout(() => {
    console.log('observable timeout hit');
    observer.onNext(43);
  }, 800);
  
  console.log('observable started');
  
  return () => {
    console.log('dispose called');
//     clearTimeout(id);
  };
});

var disposable = source.forEach(x => console.log(x));

setTimeout(() => {
  disposable.dispose();
}, 500);

source.forEach(x => console.log(x));
```

console

```text
"promise started"
"observable started"
"observable started"
"dispose called"
"observable timeout hit"
"observable timeout hit"
43
"promise timeout hit"
42
42
```

一開始訂閱或觀察Observable
所以會初始化印出**observable started**
disposable物件在500毫秒後會先呼叫**dispose**
然後印出**dispose called**
之後800毫秒時
因為Observable已經被dispose
所以只會印出**observable timeout hit**
而不會有**onNext**行為

但是為了驗證Observable可以repeatable及retry
最後一行再訂閱或觀察Observable source.forEach
則這次不但再次印出**observable timeout hit**
也會執行**onNext**行為印出**43**

至於promise初始化印出**promise started**後
1000毫秒時印出**promise timeout hit**
即使有2次promise.**then**行為仍只會得到2次x值**42**
並不會再次印出promise timeout hit
這是Promise與Observable差別所在

##Promise
- Scala: Future
- Java: CompletableFuture
- C#: Task

Promise相關的term在不同語言
keyhac1.77とautohotkeyの比較ポエム

※ 私がAHKを完全に使わなくなったのでもう比較することはないし，この記事を書く上での視点に意味がなくなったので更新はやめます．
Keyhac Ver1.77時点の情報であるため，誤りがある可能性も十分あります．差分は作者のブログなどで確認してください．

## 用途

---
- アプリケーションランチャー及びアクティブ化
- 無変換+anykeyでvimみたいな動きとか
- ~~ウィンドウ別の動きの設定~~今は使わなくなった．
- MX ERGOの拡張ボタンへの割当

---

## 環境
- Win10 （記事更新時点で最新のもの）
- keyhac 1.77


## autohotkey
### 良い所
- ある単純な機能を実現するためのコードが短くて済む
- wikiの情報が非常に豊富
- マウスの組み合わせもカスタマイズ可能.
- {blind}でshift+割り当てたホットキーとかできる.

### 悪い所
- キーすり抜け問題がどう頑張っても残る
- あまり綺麗ではない構文
- スクリプトの知識がahkにしか使えない
- 複雑なことをやろうとすると情報がない


## keyhac
### 良い所
- モダンなpython3系でカスタマイズ出来る
- pythonなので構文が綺麗
- キーすり抜けが発生しない
- 複雑なことをやろうとした時はpythonなので情報が多い
- 定型文機能や大量の履歴を持てる強力なクリップボード+αな機能(エクセルなど他のクリップボード管理系アプリとは良く競合する）
- U0等の新たに修飾キーを宣言できる書き方が非常に汎用性が高い
- 同作者とのcfilerやcraftlaunchとの設定ファイルが似通っているので非常にやりやすい
- キーボードマクロが直感的で使いやすい

### 悪い所

- ahkみたいにキーバインド記述に特化されてるわけではないので,単純な機能を実装するにも書くコード量が多い
- ~~通知領域から消えるバグが有ってその度タスクマネージャから消してやる必要がある．（再現出来ていないがエクスプローラークラッシュ時に高確率で起こる？）→別ソフトが原因でエクスプローラがよくクラッシュしていたらしく、それを取り除けばそんなに気にならなくなった~~ver1.76から解消された．
- マウスとの連携が出来ない
- ~~同一クラスのウィンドウがあった場合，明示的にアクティベートできない~~ver1.77からはActivateWindowCommand関数に正常な場合そのウィンドウの戻り値が帰ってくるようになったのでAHKと同レベルになった．
- ここのソフト全般に言えるけど，変な使い方をすると結構壊れて，そのときに他のプログラムを巻き込んだりする．
    - 例えばAlt-Aに存在しないコマンドを割り当てるとｐｃ全体のフレームレートが落ちて数秒後にクラッシュするなどと言った現象が起きる．
    - とは言ってもこのソフト使う人の層からして大丈夫でしょ．と思わなくもない．
- macをサポートしている(宗教上の理由)

## まとめ
MouseGestureL.ahkとこれで完全にまかなえるようになった．
キーバインド変更にとどまらない付帯機能を使うならば，今やAHKを選ぶ理由としては開発の活発性ぐらいだろうと思う．

とは言っても私が同作者のフリーソフトを３つも使っているので，大分バイアスはかかっていると思う．
（自分用メモ）Tomcat HttpServlet json サンプル

自分用のメモです。

Java + Eclipce + Tomcat8 で作ったサーブレットのコード。
単純に小文字を大文字にして、json形式でクライアントに返すプログラム。

```
package com.service;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class TranslateService
 */
@WebServlet("/TranslateService")
public class TranslateService extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * コンストラクタ
     * @see HttpServlet#HttpServlet()
     */
    public TranslateService() {
        super();
    }
    
	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String param = request.getParameter("param");
		param = param.toUpperCase();
	
		response.setContentType("application/json;charset=UTF-8");
		PrintWriter pw = response.getWriter();
		pw.println("{\"result\" : \"" + param + "\"}");
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}

}
```

以下のページを参考にさせていただきました。
ありがとうございます。
http://codezine.jp/article/detail/1464
http://www.javaroad.jp/opensource/js_tomcat2.htm
Androidのコードを 見やすく！ 書きやすく！ するアノテーション その２

Android開発をするときに使うと便利なアノテーションのまとめです。
以前投稿させていただいた [Androidのコードを 見やすく！ 書きやすく！ するアノテーション](http://qiita.com/teao26/items/657d65af9d4675d64592) が存外好評でしたので、第2弾を書かせていただきます。
私もまだまだ勉強中ですが、便利なものはガンガン使って、効率よく開発したいものです。

# メソッドの引数に渡す値の範囲を明示する
`@Size` `@IntRange` `@FloatRange`
値の範囲を絞ることができます。
メソッドの引数に`@IntRange`を付与した場合、受け取る値をここで指定した範囲に絞ることができます。
呼び出し側でこの範囲外の値を渡そうとした場合エラーが表示されるようになります。
![intRange1.png](https://qiita-image-store.s3.amazonaws.com/0/50067/28ec089a-81b6-535b-eddc-7fdd02a0d37f.png)
また、メソッドに`@IntRange`を付与した場合には、戻り値を指定した範囲内に限定することができます。
retrun句で範囲外の値を返そうとした場合にエラーが表示されるようになります。
![intRange2.png](https://qiita-image-store.s3.amazonaws.com/0/50067/5be98086-65fe-2a77-b51a-e26dc9f85ed4.png)
また、`@Size`を使うと、Stringの文字列長を指定したり、
![size1.png](https://qiita-image-store.s3.amazonaws.com/0/50067/5ba75744-6750-625f-2777-486215c146d9.png)
配列の長さを指定することができます。
![size2.png](https://qiita-image-store.s3.amazonaws.com/0/50067/1d308ed8-68f6-f180-6651-b2d843f51dbb.png)



# 引数にカラーコード整数を明示する
`@ColorInt`
色情報を整数で渡すことを明示できます。
リソースIDではないことを明示するもので、リソースID以外のintは通してしまうため、`@ColorRes`（前回紹介）と対で使うとよさそうです。
こちらを指定した場合、リソースIDを渡そうとするとエラーが表示されるようになります。
![colorInt.png](https://qiita-image-store.s3.amazonaws.com/0/50067/dc233412-65eb-6f52-a498-42ccaae2ef1a.png)


# メソッドの実行スレッドを明示する
`@UiThread` `@MainThread` `@WorkerThread` `@BinderThread`
メソッドの実行されるスレッドを明示することができます。
Androidの実装では、描画処理や通信処理などスレッドを意識して実装しなければなりませんが、このアノテーションを使うことでIDE上でエラーを表示してくれるようになります。
例えば、`@UiThread`を付けたメソッドはUIスレッド以外で呼び出そうとした場合エラーが表示されるようになります。
![uiThread.png](https://qiita-image-store.s3.amazonaws.com/0/50067/92a19701-11fa-846f-f67d-4e70b31aa205.png)
また、`@WorkerThread`を付けたメソッド内でUI処理を行おうとするとエラーが表示されるようになります。
![workerThread.png](https://qiita-image-store.s3.amazonaws.com/0/50067/a49daa8e-3b35-378d-3935-c81698ae8fd0.png)



# 値がNullになる可能性を明示する
`@Nullable`
メソッドの引数にNullが来る可能性があることを明示的に指示します。
これを指定していると、この値を使おうとした場合にNullである可能性がある警告が表示されるようになります。
![nullAble1.png](https://qiita-image-store.s3.amazonaws.com/0/50067/01a12837-2aa4-0f91-6167-4b890004a4f4.png)
また、メソッドに`@Nullable`を付与した場合、呼び出し側に戻り値がNullである可能性があることを明示的に知らせることができます。
呼び出し側が、このメソッドからの戻り値を使用する場合にNullの可能性がある警告が表示されるようになります。
![nullAble2.png](https://qiita-image-store.s3.amazonaws.com/0/50067/9c408a07-6618-e8c8-293c-caf6c22fc67b.png)


#メソッドがオーバーライドされた場合にsuperを呼ぶ必要があることを明示する
`@CallSuper`
継承されたクラスで`@CallSuper`を指定したメソッドをオーバーライドした場合superを呼ぶことを義務付けることができます。
オーバーライドしたメソッドでsuperを呼んでいないとエラーが表示されるようになります。
![callSuper1.png](https://qiita-image-store.s3.amazonaws.com/0/50067/6e8898ca-035d-e3dc-ed5d-c8a2a4470d51.png)
![callSuper2.png](https://qiita-image-store.s3.amazonaws.com/0/50067/f7027f93-6091-d075-a622-b4b83f159800.png)

# メソッドの戻り値を使用することを義務付ける
`@CheckResult`
メソッドに`@CheckResult`を付与することで、呼び出し元が戻り値を使用することを義務付けることができます。
呼び出しもとで戻り値を使っていない場合にエラーが表示されるようになります。
![checkResult1.png](https://qiita-image-store.s3.amazonaws.com/0/50067/d47088f4-0559-35fd-2d36-7b8af00c76b2.png)
また、戻り値を使わない場合には同様のほかのメソッドを呼び出すべきであるならば、そちらに誘導することもできます。
![checkResult2.png](https://qiita-image-store.s3.amazonaws.com/0/50067/0a30cf61-639b-9d25-41f0-34488d0ef387.png)
ズンドコキヨシ with Common Lisp

# 何の記事？
最近（？）流行のキヨシチェック、Common Lispはなかったようなのでやってみました。

# ズンドコズンドコ

```cl:zundoko.lisp 
;;;; zundoko problem

;; 初期化
(defun init-zundoko ()
  ; ズンドコ状態
  (defparameter *zundoko-stat* '())
  ; ズンドコ定義
  (defvar +zun+ 0)
  (defvar +doko+ 1)
  ; キヨシ判定時のズンドコパターン
  (defvar +zundoko-pat+ (list 0 0 0 0 1)))

;; キヨシチェック関数
(defun zundoko (out-stream)
  (setf *zundoko-stat* (append *zundoko-stat* (list (random 2))))

  ;; ズンドコしすぎないようにcdrする
  (if (> (length *zundoko-stat*) 5)
    (setf *zundoko-stat* (cdr *zundoko-stat*)))

  (if (equal (length *zundoko-stat*) 5)
    ;; 要素が5個ならキヨシ判定
    (progn 
      ;; 現在の状態でズンドコする
      (mapcar 
        (lambda (x)
          (if (equal x +zun+)
            (format out-stream "ズン ")
            (format out-stream "ドコ ")))
        *zundoko-stat*)

      ;; パターンにマッチしたら＼キヨシ／する
      (if (reduce (lambda (x y) (and x y)) (mapcar #'equal *zundoko-stat* +zundoko-pat+))
        (progn 
          (format out-stream "＼キヨシ／")
          t)
        nil))

    ;; 要素が5個未満ならズンドコチャージ中
    (progn 
      (format out-stream "ズンドコチャージ中")
      nil))
)

;; 初期化
(init-zundoko)
```
```(zundoko t)```するとキヨシチェックしてくれます。
```(zundoko nil)```すれば画面出力はなくなるので、たとえば初心者の勉強用に、
「この関数を10,000回実行した際に＼キヨシ／する確立を求めよ」みたいな課題にきっとつかえるだろう
という希望を少なくとも書いてる時点ではもっています。:)

#Lispっぽくない
ごめんね、一生懸命ズンドコするからゆるして＞＜
sed（だけ）でズンドコキヨシ

他のコマンドを一切使わず、sedだけで[ズンドコキヨシ](http://qiita.com/shunsugai@github/items/971a15461de29563bf90)してみた。



## 使い方

sed単体では乱数を発生できないため、標準入力（または入力ファイル）から乱数種となる文字列（ASCIIで7バイト以上）を入力する必要がある。それ以外は標準のズンドコキヨシの規定に従う。

```shell-session
me@here $ echo hogehoge | sed -f zundoko.sed 
ズンドコズンズンドコズンドコズンズンドコズンドコドコドコズンズンドコドコドコドコ
ドコドコズンズンドコズンズンズンズンドコキ・ヨ・シ！
```

動作確認： GNU sed 4.2.2 （`--posix` 指定時も可）

## ソースコード

```text:zundoko.sed
:L1
y/!"#$%&'()*+,-.0123456789:;<=>?@/abcdefghijklmnpabcdefghijklmnop/
y/ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`/abcdefghijklmnopabcdefghijkmnop/
y!qrstuvwxyz{|}~/!abcdefghijklmno!; s/[\]/l/g
s/[^pabcdefghijklmno]//g
/^......./! { N; s/\n//g; b L1; }
s/^\(.......\).*/\1/
s/\([pabcdefg]\)/0\1/g; s/\([hijklmno]\)/1\1/g; y/hijklmno/pabcdefg/
s/\([pabc]\)/0\1/g; s/\([defg]\)/1\1/g; y/defg/pabc/
s/p/00/g; s/a/01/g; s/b/10/g; s/c/11/g; x
:L2
/^.\{28\}/! { x; s/^\(.\)\(.\{24\}\)\(.\)\(..\)/\2\3\4:\1\3/
  s/:\(.\)\1/0/; s/:../1/; x; s/^/*/; b L2; }
s/.//g
:L3
/00001$/! { x; s/^\(.\)\(.\{24\}\)\(.\)\(..\)/\2\3\4:\1\3/
  s/:\(.\)\1/0/; s/:../1/; x; G; s/\n.*\(.\)$/\1/; b L3; }
s/0/ズン/g; s/1/ドコ/g; s/$/キ・ヨ・シ！/
q
```

## まとめ

というわけで、人生で初めて書いたsedスクリプトがズンドコになってしまった…（うわぁ）。
A-Frameをさわってみた

[VR-FREEK](http://www.amazon.co.jp/VRFREEK-%E3%83%96%E3%82%A4%E3%82%A2%E3%83%BC%E3%83%AB%E3%83%95%E3%83%AA%E3%83%BC%E3%82%AF-2016%E5%B9%B4-03-%E6%9C%88%E5%8F%B7/dp/B01CD7QZK6)という雑誌の中で、A-Frameを使った3DCGコンテンツの作成方法が載っていたので、実際にさわってみたときの感想やメモです。

## A-Frameとは？
2015年12月にMozillaからリリースされた3DCGコンテンツをHTMLで作成することができるオープンソースのフレームワーク。→[A-Frame](https://aframe.io/)
OculusRiftなどに対応したVRウェブサイトを簡単に構築できるらしい。  
web上に3DCGコンテンツを作成する場合、WebGLを使う方法が多く取られているが、WebGLよりも敷居が低いため初めて3DCGコンテンツを作成する場合は取り掛かりやすい？？

2016年3月時点でのバージョンは、v0.1.3でv0.2.0がリリース間近といった状況。
https://github.com/aframevr/aframe/releases

※ Chrome, Firefox, Safariで確認。IE11は動かなかった。

## 開発環境をつくる
https://aframe.io/docs/guide/installation.html
上記ページより、jsファイルをダウンロードして読み込むか、npm上にも公開されているので、モジュール管理して開発を進める場合は、

```
npm i aframe -D
```

としても開発環境に導入することができます。

## つくってみる
htmlファイル上にA-Frameが提供している独自のHTMLタグを追加していき、コンテンツを作成します。

**\<a-scene>**タグが3DCG上の仮想空間を表す要素となるので、このタグの子要素に3DCGオブジェクトを配置していきます。

```
<a-scene>
  <a-sky color="#9fbfff"></a-sky>
  <a-sphere position="0 1.25 -1" radius="1.25" color="#EF2D5E"></a-sphere>
  <a-cube position="-1 0.5 1" rotation="0 45 0" width="1" height="1" depth="1"  color="#4CC3D9"></a-cube>
  <a-plane rotation="-90 0 0" width="4" height="4" color="#7BC8A4"></a-plane>
</a-scene>
```

<img width="910" alt="スクリーンショット 2016-03-21 19.17.55.png" src="https://qiita-image-store.s3.amazonaws.com/0/97036/d8d76a27-8f57-2bc6-1577-c447987b23dc.png">
  
*sample*
http://ryotahirano.github.io/A-Frame-sample/

アニメーションさせることも可能で(内部でtween.jsを使用)、**\<a-animation>**タグでアニメーションの指定を行います。

```
<a-sphere position="0 1.25 -1" radius="1.25" color="#EF2D5E">
  <a-animation attribute="position" from="0 1.25 -1" to="0 -1.4 0" dur="2000" repeat="indefinite" direction="alternate" ease="ease-out-bounce"></a-animation>
</a-sphere>
```

*sample*
http://ryotahirano.github.io/A-Frame-sample/animation.html
http://ryotahirano.github.io/A-Frame-sample/target.html


## まとめ
少ない工数でそれっぽいものを作ることはできそうだが、内部的にThree.jsやtween.jsを使っているため、細かいアニメーションの指定や表現方法を実装するためには、結局Three.js(WebGL)の知識が必要になるのでは？
jsをさわらない人がちょっとした3DCGを作るためのツールという感触。

まだまだA-Frameだけではできることは少なさそうですが、今後この手軽さのまま機能が増えていったら使う場面が出てくるかも。
SQL再帰WITH句の手習いズンドコキヨシ(※元ネタ有り)

懲りずにズンドコキヨシ。
ワイ将、明智重蔵氏 の 下記エントリに衝撃を受ける。彡(ﾟ)(ﾟ)

> Oracleの再帰With句でズンドコキヨシ
> http://qiita.com/AketiJyuuzou/items/c2bc63872125e7277e96

と云う訳(?)で、再帰WITH句の手習いがてら、リファクタリングっぽく似たのを作ってみた。

```sql
WITH rec(zundoko) AS (
  SELECT NULL FROM DUAL
   UNION ALL
  SELECT zundoko || MOD(TRUNC(DBMS_RANDOM.VALUE*10), 2)
    FROM REC
   WHERE zundoko IS NULL
      OR zundoko NOT LIKE '%00001'
)
SELECT kiyoshi FROM (
  SELECT REPLACE(REPLACE(zundoko, '0', 'ズン！'), '1', 'ドコ！') || 'キ・ヨ・シ！' AS kiyoshi
    FROM rec
   ORDER BY ROWNUM DESC
 )
 WHERE ROWNUM <= 1
/
```

結果は以下の通り、なるほどねぇ……彡(-)(-)

```sql
SQL> WITH rec(zundoko) AS (
  2    SELECT NULL FROM DUAL
  3     UNION ALL
  4    SELECT zundoko || MOD(TRUNC(DBMS_RANDOM.VALUE*10), 2)
  5      FROM REC
  6     WHERE zundoko IS NULL
  7        OR zundoko NOT LIKE '%00001'
  8  )
  9  SELECT kiyoshi FROM (
 10    SELECT REPLACE(REPLACE(zundoko, '0', 'ズン！'), '1', 'ドコ！') || 'キ・ヨ・シ！' AS kiyoshi
 11      FROM rec
 12     ORDER BY ROWNUM DESC
 13   )
 14   WHERE ROWNUM <= 1
 15  /

KIYOSHI
--------------------------------------------------------------------------------
ズン！ズン！ズン！ドコ！ドコ！ズン！ズン！ドコ！ドコ！ズン！ズン！ドコ！ドコ！ズ
ン！ズン！ズン！ドコ！ズン！ズン！ドコ！ドコ！ドコ！ズン！ドコ！ズン！ズン！ズン
！ドコ！ドコ！ドコ！ドコ！ドコ！ズン！ドコ！ドコ！ズン！ズン！ズン！ドコ！ズン！
ズン！ズン！ズン！ズン！ドコ！キ・ヨ・シ！
```

以前の旅人算もそうなんですが、
氏の記事は実にエッジが効いていて参考になります(｀･ω･)ゞ

> Oracle ACE 山岸賢治氏
> http://www.oracle.com/technetwork/jp/database/articles/vivadeveloper/index-1838333-ja.html
> US-OTNでは「Aketi Jyuuzou」、OTN-Japanのフォーラムでは「明智重蔵」のハンドルネームで活躍中。
> 「Oracle SQLパズル」を運営。
>　 
> 第1部 再帰with句の使用例
> http://www.oracle.com/technetwork/jp/articles/otnj-sql-image7-1525406-ja.html#a
> 
> 10-349 旅人算メソッドで連続日付をグループ化
> http://www.geocities.jp/oraclesqlpuzzle/10-349.html


ズンドコキヨシまとめは下記

> ズンドコキヨシまとめ
> http://qiita.com/shunsugai@github/items/971a15461de29563bf90
underscoreコードリーディング（identity）


underscoreに詳しくないので、勉強半分でソースコードを読む。



##利用するバージョン
[underscore.js(v1.8.3)](https://github.com/jashkenas/underscore/tree/1.8.3)


##identityとは


###[underscorejs.orgのidentity](http://underscorejs.org/#identity)

こんな説明。
>####_.identity(value) 
>Returns the same value that is used as the argument. In math: f(x) = x
>This function looks useless, but is used throughout Underscore as a default iteratee.


```javascript
var stooge = {name: 'moe'};
stooge === _.identity(stooge);
=> true
```

------------- 
argumentとして利用されるvalueと同じvalueを返す。例えば数学で言うとf(x) = xの数式のよう。
この関数は使いにくそうに見えるが、Underscore全体でdefaultのiterateeとして利用される。


###[underscore.identity](https://github.com/jashkenas/underscore/blob/1.8.3/underscore.js#L1281)
コード的にはこのあたり。

```javascript
  // Keep the identity function around for default iteratees.
  _.identity = function(value) {
    return value;
  };
```

引数のvalueを返す。
swift2 で 固定長分割

なんか、もっと良い方法があると思うんだけど、思いつかないので力技で実装です。

String+Splitter.swift

```swift

extension String {

  /** 文字列を固定長で分割する
  - Parameter len: 分割する長さ
  - Parameter handle: 分割ごとに呼び出される
  */
  public func Splitter(len: Int, handle: ((cut: String,isLast: Bool)->Void)) -> Void
  {
    var idx = self.startIndex.advancedBy(len)
    var sub = self.substringToIndex(idx)
    var other = self.substringFromIndex(idx)
    var dist = other.startIndex.distanceTo(other.endIndex)
    while ( dist>len ) {
      handle(cut: sub,isLast: false)
			idx = other.startIndex.advancedBy(len)
			sub = other.substringToIndex(idx)
			other = other.substringFromIndex(idx)
			dist = other.startIndex.distanceTo(other.endIndex)
    }
    handle(cut: sub,isLast: false)
    handle(cut: other,isLast: true)
  }

}


let testString : String = "Hello world"
testString.Splitter(3 , handle: {
	(cut: String,flg: Bool) -> Void in
	LOG("Splitter test \(cut), \(flg)")
})

let testString2 : String = "ハロー　世界よ！"
testString2.Splitter(3 , handle: {
	(cut: String,flg: Bool) -> Void in
	LOG("Splitter test2 \(cut), \(flg)")
})


Splitter test Hel, false
Splitter test lo , false
Splitter test wor, false
Splitter test ld, true

Splitter test2 ハロー, false
Splitter test2 　世界, false
Splitter test2 　よ！, true

```
PHPでDIを行いテスタブルなクラスへ

既存コードに対し、PHPUnitでテストコードを書く際に問題となる下記のようなクラス。
良いサンプルクラスを思いつかなかったのでデザインについてはあまり考えないでほしい。

```php
<?php

class Beer
{
    public function open()
    {
        $opener = new BottleScrew();

        if ($opener->pull()) {
            return 'success';
        }

        return 'open';
    }
}

class BottleScrew
{
    public function pull()
    {
        return true;
    }
}

$beer = new Beer();
$beer->open();
```

これ（Beer::open）に対しテストコードを書く時、どうすれば良いか。

-このクラス（メソッド）の開発者を弾劾しチームに対しテストコードを書けない責任は自分にはないことを示した上で諦める
-@codeCoverageIgnoreアノテーションを用いなかったことにする
-DI（依存性の注入）する

パッと思いつくのはこの３つの方法。
クラスを作成した当人がいれば真っ先に一つ目の方法を選ぶが、そうでもない時は基本的に三つ目を選択するのが良いのだろう。
というわけで、PHPでのDIについて紹介する。

#DI（依存性の注入）とは

クラス間の依存性を解消するための方法。
密結合から疎結合に。
簡単にいえば、「外でインスタンスを生成してから、中に入れろ」という話。

#３つのDI

Wikipediaで「DIの種類」として下記３つが紹介されていたので（2016/03/21時点）、それぞれを冒頭の例で紹介する。
※どうしても、ヒンティングをBottleScrewにする気にならなかったのでオープナーインターフェースを用意。

##インターフェース注入

```php
<?php

class Beer
{
    private $_opener;

    public function open(Opener $opener)
    {
        if ($opener->pull()) {
            return 'success';
        }

        return 'fail';
    }
}

interface Opener
{
    public function pull();
}

class BottleScrew implements Opener
{
    public function pull()
    {
        return true;
    }
}

$beer = new Beer();
echo $beer->open(new BottleScrew()) . PHP_EOL;
```

##setter注入

```php
<?php

class Beer
{
    private $_opener;

    public function open()
    {
        if ($this->_opener->pull()) {
            return 'success';
        }

        return 'fail';
    }

    public function setOpener(Opener $opener)
    {
        $this->_opener = $opener;
    }
}

interface Opener
{
    public function pull();
}

class BottleScrew implements Opener
{
    public function pull()
    {
        return true;
    }
}

$beer = new Beer();
$beer->setOpener(new BottleScrew());
echo $beer->open() . PHP_EOL;
```

##コンストラクタ注入

```php
<?php

class Beer
{
    private $_opener;

    public function __construct(Opener $opener)
    {
        $this->_opener = $opener;
    }

    public function open()
    {
        if ($this->_opener->pull()) {
            return 'success';
        }

        return 'fail';
    }
}

interface Opener
{
    public function pull();
}

class BottleScrew
{
    public function pull()
    {
        return true;
    }
}

$beer = new Beer(new BottleScrew());
echo $beer->open() . PHP_EOL;
```

#DIを行うメリット

テストコードが書ける以外にもDIを行うメリットはある。
（というか、密結合状態を平然と生み出すことは問題であって、その改善をメリットと呼ぶのもどうかと思うが……）

例えば、このビールを「栓抜き」ではなく、「歯」で開けれるようにもなる。
ポリリズ……ポリモフィズムですね。

```php
<?php

class Beer
{
    private $_opener;

    public function __construct(Opener $opener)
    {
        $this->_opener = $opener;
    }

    public function open()
    {
        if ($this->_opener->pull()) {
            return 'success';
        }

        return 'fail';
    }
}

interface Opener
{
    public function pull();
}

class Tooth implements Opener
{
    public function pull()
    {
        return false;
    }
}

$beer = new Beer(new Tooth());
echo $beer->open() . PHP_EOL;
```

いや、歯では開かないよな。
安価なArduinoProMicro互換機は、delay等が当てにならない？【要検証】

自作キーボードのために、AliExpressでArduinoProMicro互換機を輸入しました。キー入力感度調整のため、delay関数を利用していましたが、思ったようなdelay具合になっていなかったので書き残します。

## 主題
- 事象：スケッチ書き込み〜USB抜線までと、USB再結線までのディレイの待ち時間が違う。USB抜線まではdelayの待ち時間が短く、再結線後は待ち時間が遅延する。
- 事実：書き込み直後に60秒待つするプログラムによる計測…書き込み直後→60秒でwhileに突入、再結線直後→60秒でechoは10秒を示した。Arduino1秒が現実の6秒くらい？
- 気づいたとき：再結線時のマウスエミュレーションによるカーソル移動時に、ガビガビになる。（ディレイが伸びるので、マウス操作が処理落ちのように見える）
- 対処１:millisでディレイを代替する→効果なし<https://www.arduino.cc/en/Tutorial/BlinkWithoutDelay>
- 対処2:書き込みのボードを変えてみる。（ArduinoLeonard、AruduinoMicro、SparkfunProMicro16MHz→効果なし
- 対処3:Arduinoのフェーズビットを変更する→書き込み機器がないので未検証。
- 解決:できてない

```c:blinkを適当にコピペ
// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin 13 as an output.
  pinMode(13, OUTPUT);
}
int count=0;
// the loop function runs over and over again forever
void loop() {
    while (!Serial) {
      ; // wait for serial port to connect. Needed for native USB port only
    }
  count++;
  digitalWrite(13, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);              // wait for a second
    count++;
  digitalWrite(13, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);              // wait for a second
  Serial.println(count);
  if(count>=60){
    while(true){
    }
    
  }
}
```

## ところで
対応中に書き込みボードをミスってどうにもならない状態（レンガ状態？？日本ではなんていうのだろう？）になったので、復帰方法を探した。ProMicoroはデフォルトでリセットスイッチないので、自前でスイッチを用意するか、リード線で、簡単にできるとわかった。（外国からの輸入モノだったので、リセット機能が効かないかと超焦っりました。リセット機能は輸入物でもちゃんと効くんだよ〜という意味で書き残しておきます。）
適当にProMicro互換を買った方は、正しいボードを選択してください。（SparkfunのページからボードパッケージをDLして使いましょう。）

RSTとGNDを繋いで、ボタンをポチポチ2回押せばリセットできます。
Lランプがないので、COMポートをこまめにチェックしないとです。

#### How to Revive a “Bricked” Pro Micro
https://learn.sparkfun.com/tutorials/pro-micro--fio-v3-hookup-guide#ts-revive

#### Reset to Bootloader
https://learn.sparkfun.com/tutorials/pro-micro--fio-v3-hookup-guide#ts-reset

ちなみに買ったのはこれ。
```http:rul
ttp://www.aliexpress.com/item/Mini-Leonardo-Pro-Micro-ATmega32U4-5V-16MHz-Module-For-Arduino-Best-Quality/32284746884.html
```
VimでPython Doctestを実行するプラグインを作成する （2）


# はじめに
「[VimでPython Doctestを実行するプラグインを作成する （1）](http://qiita.com/daizutabi/items/66498fd9d3ab25c2d6ae)」の続きです．それなりに動くプラグインができましたので公開します．

https://github.com/daizutabi/unite-greater3


スクリーンショットを以下に示します.

![スクリーンショット](https://raw.githubusercontent.com/daizutabi/unite-greater3/master/resource/greater3.gif)

# greater3プラグイン
今回のプラグインはgreater3と名付けました．以下，ヘルプからの抜粋です．

greater3 プラグインは，Python doctestを実行します．標準出力・標準エラー出力にも対応しているので，Python モジュールの実行に使うこともできます．

## 概要

greater3 は編集中の Python ファイルの doctest を実行する Vim プラグインです。実行した doctest の結果は Unite インターフェースを用いて，一覧表示されます．一覧リストの中から元ファイルの doctest にジャンプしたり，doctest の出力を使って，元ファイルのソースコードを書き換えることができます．また，標準出力 stdout，標準エラー出力 stderr も Unite インターフェースに表示されますので，QuickRun の代わりに使用することができます．実行ごとにimport 文で指定されるモジュールのインポートを行わないので，起動時間の短縮が期待できます．

要件:
- Vim 7.4 以降
- Python 3.5 以降

最新版:
http://github.com/daizutabi/unite-greater3

現在のバッファを実行

```vim
:Unite greater3
```
    
ショートカットキーの割り当て．例：F10に割り当てる場合．`~/vimfiles/after/ftplugin/python.vim` などで，

```vim
nnoremap <silent> <buffer> <F10> :<C-u>Unite greater3<CR>
```

Unite バッファでの操作

* d:	カーソル位置にある doctest の Want/Got の表示/非表示をトグルする．
* b:	すべての doctest の Want/Got の表示/非表示をトグルする．
* e:	doctest の実行範囲をカーソル位置/ファイル全体の間でトグルする．
* yy:	doctest の実行結果で元ファイルのソースコードを置き換える．


## キーマッピング

Unite greater3 の実行をショートカットキーに割り当てることができます．
`~/vimfiles/after/ftplugin/python.vim` などで，

```vim
	nnoremap <silent> <buffer> <F10> :<C-u>Unite greater3<CR>
```
とします．

Unite バッファでのキーマッピングは，標準のアクションに対してエイリアスを設定することで行っています．具体的には，greater3 ソースの alias_tableを以下のように設定しています．

```vim
alias_table = {'*': {'delete': 'toggle', 'bookmark': 'toggle_entire',
\                    'edit': 'entire', 'yank': 'replace'}}
```

この設定は `g:greater3.alias` で変更できます．

## 設定

グローバル変数 `g:greater3` を使って動作をカスタマイズできます．
デフォルトの設定は，Pythonファイルが最初に読み込まれたタイミングで実行されます．それを上書きするためには，`~/vimfiles/after/ftplugin/python.vim` 等に上書きする設定を書いてください．

## ステータスラインプラグインとの連携
g:greater3.statusline でステータスラインプラグインとの連携を設定します．現在は，lightline との連携をサポートしています．

g:greater3.statusline = 'lighline' とすることで，lightline との連携が有効になります．具体的には doctest の結果をステータスラインに色付きで表示します．実際には，上記の設定はデフォルトで行われます．

.vimrc/_vimrc ファイルには以下のように設定してください．

```vim
" Unite がステータスラインを上書きするの禁止します．
let g:unite_force_overwrite_statusline = 0

" g:lightline の acitve 要素の好きな場所に 'greater3' を配置します．
" 例えば，
let g:lightline = {
\ 'colorscheme': 'solarized',
\ 'mode_map': {'c': 'NORMAL'},
\ 'active': {
\   'left': [['mode', 'paste'],
\            ['fugitive', 'filename', 'greater3']],
\  }
 \}
```

'greater3' が lightline の展開コンポーネントとして扱われます．
Goodfellow,Bengio,CourvilleさんのDeep Learning本の17章まとめ

# Goodfellow,Bengio,CourvilleさんのDeep Learning本の17章のまとめ
* 重要と思った部分だけ独断で抽出しています.
* 本当にメモ書き程度なので本を読まずにいきなりこれを読んでもわからない可能性がかなりあります.すみません.
* 間違っている記述があるかもしれません.
* 心眼で書いている部分があるかもです.

## 17 Monte Calro Methods

### 17.1 Sampling and Monte Calro Methods

#### 17.1.1 Why sampling?

#### 17.1.2 Basics of Monte Carlo Sampling

#### 17.1.3 Importance sampling

* $Var(\bar{s_q})=Var[\frac{p(x)f(x)}{q(x)}]/n$となる.($s_q$はimportance sampling estimator)
* importance samplingにおいて推定量の分散は提案分布の影響を相当受ける
* 直感的な解釈としてq(x)がp(x)f(x)に対して大きいときいらないsample(重み小さい)として,q(x)がp(x)f(x)に対して小さいときいるsample(重み大きい)とする.
*  提案分布が規格化されているときの推定量は不偏推定量
*  提案分布が規格化されていないときの推定量は漸近的に不偏推定量
*  高次元だと良い提案分布の選び方が難しいがdeep learningでも有用な時ある

### 17.2 Markov Chain Monte Carlo Methods

* モデルがどの状態でも確率が0にならないときに有効. つまりenergy-based model $p(x)\sim exp(-E(x))$に対して有効 (たいていの分布がこの形になることに注意)
* RBMのsamplingは普通にやると難しい.なぜならgraphはdirectedであったりacyclicalであるから. graphが方向づけされていたらancestral samplingすればいいのだがそういうわけにはいかない. そこでMCMC.(MCMCの一種としてGibbs samplingがある)
* 普通にMCMCすると相関が高いためn回に1回採用とかにすることもある.しかし今度は計算量が多くなる.つまり計算コストと独立のサンプルを取ってくることのトレードオフがある.
* mixing time(収束するまでの時間)がわからない.あるけど手法がheuristic.

### 17.3 Gibbs Sampling

* RBMでは有用. 実際,RBMにおいてvisible unitsはhidden unitsが与えられたときに条件付き独立であるため一気にGibbs samplingでupdateできる.

* undirected modelではGibbs samlingは定番手法

### 17.4 The Challenge of Mixing between Separated Models

* MCMCの欠点としてうまくmixしてくれないことがある. つまり本当は独立なサンプルが作られていろんなとこ行ってほしいけどなかなかそうはいかない.
* 実際に山が何個かあったときなかなか移ることはない. (high energyによるbarrierという解釈も)
* ジレンマの存在：　$P_{model}(h|x)$という事後確率からsamplingしたいことあるけど早くmixしてほしいから事後確率はhigh entropyであってほしい. 一方で特徴量抽出の観点からhとxの相互情報量は大きくなってほしい.このことは対立している. ($I(h,x)=H(h)-H(h|x)$に注意)
* クラス分類とかのsituationとかから想像できるようクラスごとに山みたいなのがあってそのような分布から上手くsamplingすることは難しい.

#### 17.4.1 Tempering to Mix between Models

* $p(x)\sim exp(-\beta E(x))$ とする. 本当は$\beta=1$のときからsampingしたいが$\beta<1$とすることで少し下駄を履かせる.

#### 17.4.2 Depth May Help Mixing

* 先ほどにも書かれていた通り$h$をよくencodeしたい(つまり相互情報量を大きくしたい)がそうすると$P(x|h)$と$P(h|x)$のエントロピーが下がって上手くmixしなくなる.
* そこで$H(h)$をあげることにする. hの分布が均一なようにする.
($I(h,x)=H(h)-H(h|x)$に注意)
* そのためにはdeepに構造をする必要がある.

## 参考文献
http://www.deeplearningbook.org/