OmniAICreator/Qiita-1.07M huggingface dataset:
Arduinoでいろいろ始めたい人が知っておいた方がいい、いろいろなこと

友人と一緒にArduinoで遊んだ時のメモです。LEDの使い方、Serial通信のことをまとめておきます。

##LEDの電流制限抵抗の求め方
```math
R = \frac{(V_{cc}-V_f)}{I_f}
```
VfはLEDの逆起電力、Vccは電源電圧、IfはLEDの定格電流としました。
また、例えばフルカラーLEDなどで、素子の輝度[mcd]がRGBで異なる場合、このように補正すると良いです。

```math
R = \frac{(V_{cc}-V_f)}{I_f\frac{l_0}{l}}
```

lは対象の素子の輝度、l0は基準の素子の輝度です。


##Serial通信で複数の信号を送りたいとき 
3つのデータを送りたいときは、Processing側で4つデータを送信する。最後の一つをダミーとして(0とか)、Arduino側で4つのデータを受信する。Serial.available()は読み込もうとしているデータのたまっている数を返す。

```java
import controlP5.*;
import processing.serial.*;
Serial myPort;
ControlP5 red,green,blue;
int Red = 100;
int Green = 100;
int Blue = 100;

void setup() {
  
  //change the port name to yours.
  myPort = new Serial(this,"YOUR_PORT_NAME",9600);
  
  size(600,600);
  setupSliders();
}

void draw() {
  myPort.write(Red);
  myPort.write(Green);
  myPort.write(Blue);
  myPort.write(0);
  background(Red,Green,Blue);
}

void setupSliders(){
  red = new ControlP5(this);
  green = new ControlP5(this);
  blue = new ControlP5(this);
    red.addSlider("Red")
  .setPosition(100,50)
  .setRange(0,255)
  .setSize(150,50);
    green.addSlider("Green")
  .setPosition(100,150)
  .setRange(0,255)
  .setSize(150,50);
    blue.addSlider("Blue")
  .setPosition(100,250)
  .setRange(0,255)
  .setSize(150,50);
}
```

```cpp
//Pin assignment.
int red = 9;
int green = 10;
int blue = 11;

//PWM brightness 0 to 255
int Red = 0;
int Blue = 0;
int Green = 0;

// the setup routine runs once when you press reset.
void setup() {
  // declare pin 9 to be an output:
  pinMode(red, OUTPUT);
  pinMode(green, OUTPUT);
  pinMode(blue, OUTPUT);
  Serial.begin(9600);
}

// the loop routine runs over and over again forever.
void loop() {

  //if bunch of data sent from Processing is stacked for over 3...
  if(Serial.available()>3){
    Red = Serial.read();
    Green = Serial.read();
    Blue = Serial.read();
    Serial.read();        //the last data is dummy
  }
  //write data
  analogWrite(green, Green);
  analogWrite(red, Red);
  analogWrite(blue,Blue);

}
```

##IoTっぽいことをやってみたい。
Arduinoとネットを繋ぐ良いサンプルとして、Arduino Networked Lampが有名です。
MacにVagrantでUbuntu14.04をインストールする

## VirtualBoxのインストール

下記のページからMac OS Xのfileをダウンロードしインストールを行う。

[VirtualBoxのダウンロード](http://www.oracle.com/technetwork/server-storage/virtualbox/downloads/index.html?ssSourceSiteId=otnjp "VirtualBoxのダウンロード")

## Vagrantのインストール

下記のページからMac OS Xのfileをダウンロードしインストールを行う。

[Vagrantのインストール](http://www.vagrantup.com/downloads.html "Vagrantのインストール")

インストール後、ターミナルでversionを確認する。(2015/07/27現在)

	$ vagrant version
	Installed Version: 1.7.4
	Latest Version: 1.7.4
	
	You're running an up-to-date version of Vagrant!

## VagrantCloudに登録

※ ユーザー登録しなくてもboxの追加はできますが、登録することでローカルで立ち上げた環境に外部からアクセスできるようになったり、boxを公開できたり色々便利です。

下記のページのヘッダー右側にある[Sign Up & Tutorials]より、新規登録を行ってください。

[VagrantCloud](https://vagrantcloud.com/ "VagrantCloud")

新規登録後、ターミナルでVagrantCloudにログインする。(登録したUsernameとPasswordを入力する)

	$ vagrant login
	…
	Atlas Username: 任意のUsername
	Password (will be hidden): 任意のPassword
	You are now logged in.

## Vagrantにboxを指定し実行

[Vagrantbox.es](http://www.vagrantbox.es/ "Vagrantbox.es")やgithubからboxを追加するのもアリですが、VagrantCloudの方が、boxのダウンロード数も一目で分かり便利で楽だと思います。

[Discover Vagrant Boxes](https://atlas.hashicorp.com/boxes/search?utm_source=vagrantcloud.com&vagrantcloud=1 "Discover Vagrant Boxes")からboxを探すことができるので,任意のディレクトリでubuntu/trusty64を指定しvagrantの初期化をする。

`$ vagrant init ubuntu/trusty64`

Vagrantを実行する。

`$ vagrant up`

VagrantでUbuntu14.04が立ち上がるはずです。

次回は、今回立ち上げたUbuntuを使ったサーバーの構築をしていこうと思います。
package.jsonのversionからgitタグを打つtips


あれ、versionいくつだったっけ？って`head package.json`をして確認してからするの面倒なので`.gitconfig`にaliasを書いとく

jsonをパースする[jq](http://stedolan.github.io/jq/)をインストールしておく

```prompt
brew install jq
```

`git ver`でローカルと`origin`にタグを打つ
`git unver`でタグを消す

```.gitconfig
[alias]
  ver = "!f() { cat package.json | jq .version -r | xargs git tag; cat package.json | jq .version -r | xargs git push origin; };f"
  unver = "!f() { cat package.json | jq .version -r | xargs git tag -d; cat package.json | jq .version -r | sed -e 's/^/:/' | xargs git push origin; };f"
```
【質問】pythonで%を使うとどうなるの？

pythonのreturn文やprint文で%がつかわれているのを度々見ます。
しかし、`%`の使い方はネットで調べてもピンとくるものがありません。

例えば下のコードは、二分グラフを作るコードの一部を抜き出したものですが、return文内で`%`が使われています。

```py3
class Vertex(object):
    """A Vertex is a node in  a graph"""
    def __init__(self, label = ''):
        self.label = label
    def __repr__(self):
        return 'Vertex(%s)' % repr(self.label)
    __str__ = __repr__
```

### 質問
1. この`%`はどのような意味があるのでしょうか。
2. 同時に、`__str__ = __repr__` の意味もよくわからないのでお聞かせねがいたいです。
[Unity] 爆風でRagdollを吹き飛ばす


今作っているゲームでRagdollを爆風で吹き飛ばす演出があるのでそのモックを作ったときのメモ。

![爆風サンプル](http://i.gyazo.com/ae209c23fa6d24aee4879281269fed4a.gif)

上記サンプルは[Github](https://github.com/edom18/ExplosionRagdoll)に上げてあります。

## 爆風の計算を行う

Unityにはデフォルトで、爆発による力を`Rigidbody`に適用する[メソッド（AddExplosionForce）](http://docs.unity3d.com/ScriptReference/Rigidbody.AddExplosionForce.html)が準備されています。

### AddExplosionForceの定義

定義は以下のようになっています。

```c#
public void AddExplosionForce(float explosionForce, Vector3 explosionPosition, float explosionRadius, float upwardsModifier = 0.0F, ForceMode mode = ForceMode.Force);
```

爆発の威力、爆発点、爆発半径を与えると爆発の状態をエミュレートして`Rigidbody`に力を与えてくれます。
例えば散らばったCubeそれぞれに適用してやればまさに爆弾が爆発したような演出が可能になります。

#### サンプル

当然ですが、Rigidbodyコンポーネントをアタッチしておく必要があります。
そのコンポーネントに対して`AddExplosionForce`を適用すると爆発の威力が該当GameObjectに適用されます。

```c#
Rigidbody rigidbody = GetComponent<Rigidbody>();
rigidbody.AddExplosionForce(m_force, m_position, m_radius);
```

-------------------------------------------

## Ragdollを設定する

次に、モデルデータに`Ragdoll`を設定します。これは、モデルのボーンを指定すると適切にコライダとジョイントを設定してくれる便利ツールとなっています。（デフォルトの機能です）
設定に関してはこちらの記事（[UnityでRagdoll物理](http://wonderpla.net/blog/engineer/Unity_Ragdoll/)）が参考になります。

以下のメニューからRagdollを選択します。

![Kobito.XlgEsN.png](https://qiita-image-store.s3.amazonaws.com/0/5616/17cab004-1040-16d5-ad32-56a2ff2eaf44.png "Kobito.XlgEsN.png")


-------------------------------------------

## 注意点

### Rigidbodyは追加しない

今回のサンプルを作成するにあたって注意点と微妙にハマりポイントがあったので書いておきます。

まず、冒頭では`Rigidbody`が必要だと書きましたが、`Ragdoll`を適用すると各体の部位にコライダと`Rigidbody`が追加されます。
なので改めて設定する必要はありません。


### RagdollのRigidbodyすべてに`AddExplosionForce`を適用する必要がある

`Ragdoll`で適用された`Rigidbody`は複数あります。
今回の例のように爆風のような演出をする場合はそれらすべての`Rigidbody`に`AddExplosionForce`を適用する必要があることに注意が必要です。（こちらの記事を参考にしました（[AddExplosionForce on ragdolls | Unity Answers](http://answers.unity3d.com/questions/149766/addexplosionforce-on-ragdolls.html)））

-------------------------------------------

以上を適用すると冒頭のアニメーションGifのような演出が達成できます。


## その他メモ

爆風のエリア内にどんなゲームオブジェクトがあるかは[`Physics.OverlapSphere`](http://docs.unity3d.com/jp/current/ScriptReference/Physics.OverlapSphere.html)を使うと便利です。

### Physics.OverlapSphereの定義

```c#
public static Collider[] OverlapSphere(Vector3 position, float radius, int layerMask = AllLayers);
```

Colliderを検出する範囲を示す球体の中心位置と半径を渡すと、その範囲内にあるColliderが配列で返ってきます。
Xcode7で実機デバッグ（Developerアカウント無しで）

つまるところ無料で。年間1万円も払う前に試したいことあるよ。。。

# Xcode7をインストール
現時点ではbeta版なので注意。
https://developer.apple.com/xcode/downloads/

# プロジェクトを開く
自分は既にXcode6で作ったprojectがあったのでそれをOpen。

# 実機に入れてRun
下記のページの手順に従えば良い。ざっくりいうと、
1. PCと実機をUSBでつなげて、上にあるメニューバーで実機を選択
2. Xcode7にAppleIDの登録
3. Teamを自分のAppleIDにして、Fix Issueしてもらう
4. Run

https://developer.apple.com/library/prerelease/ios/documentation/IDEs/Conceptual/AppDistributionGuide/LaunchingYourApponDevices/LaunchingYourApponDevices.html#//apple_ref/doc/uid/TP40012582-CH27-SW3

# 参考
http://qiita.com/Night___/items/ebe4d55b10804db9700c

Xcodeド素人なので、そもそもプロジェクトの"General"のタブを開くのに苦労するからつらい。ちょっと違うファイル見たりするとすぐ見失っちゃうし、どうやって戻ってこれたのかわからぬ。。。
SVGの text 要素がIEブラウザで表示されない

SVGを使ったグラフ表示を試しているときに、IEブラウザでのみテキスト文字列が表示されないことがあったのでメモまで。

結果から言うと、CSSで `line-height: 0px;` を指定しているのが原因だった。


```html
<html>

<style type="text/css">
<!--
    #main {
        line-height: 0px;
    }
-->
</style>

<body>

<div id="main">
    <svg style="width:300px; height:150px;">
        <circle cx="50" cy="50" r="50" fill="red"/>
        <text x="50" y="50" text-anchor="middle" fill="white">
           Hello World
        </text>
    </svg>
</div>

</body>
</html>
```

上記のHTMLファイルをIE (SVGがサポートされているIE9以降) で読み込むと、"Hello World" の文字が表示されない。Google ChromeやFirefoxであれば表示されることもあり、原因が分かるまで時間がかかった。

この `line-height: 0px` だが、以下のサイトにもあるようにdiv要素の隙間を消すために指定することがある。

* divの下に意図しない隙間ができる？
    * http://d.hatena.ne.jp/nug/20070501/1178016623

* HTML/CSS-margin:0にしても上の隙間が消えない！
    * http://kagan.hatenablog.com/entry/2014/08/09/190812

表題とは話題が変わるが、font-size で指定する単位が `px` か `pt`でもブラウザによって表示の大きさが変わる。Chromeは `px`, `pt` は区別がなく (`pt` ぽい振る舞い)、FirefoxやIEはちゃんと区別しているようで、表示の大きさが変わる。

SVGのブラウザ間の仕様差分はだいぶなくなってきているように思うが、複雑なSVGグラフィックを開発する際には、複数ブラウザで動作確認しながら作業を進めるのがよい。
firegestures 画像検索スクリプト

var srcNode = FireGestures.sourceNode;
var imgURL = getComputedStyle(srcNode, '').getPropertyValue('background-image');
 
if (imgURL == 'none')
imgURL = FireGestures.getImageURL(srcNode);
else
imgURL = imgURL.replace(/"|'/g,"").replace(/url\(|\)$/ig, "");
 
if (!imgURL)
throw "Not on a image";
 
// check the URL is safe
FireGestures.checkURL(imgURL, srcNode.ownerDocument);
 
imgURL = 'http://www.google.com/searchbyimage?image_url='
+ encodeURIComponent(imgURL) + '&num=10'
 
// open image in new tab
var background = gPrefService.getBoolPref("browser.tabs.loadInBackground");
if (event.shiftKey || event.ctrlKey)
background = !background;
gBrowser.loadOneTab(imgURL, null, null, null, background, false);
AWSで複数のリージョン間をVPNで結ぶにはどうすればよいか


# マルチリージョンVPN

AWSでは2015/7/27現在、各リージョンのEC2同士を通信する際に、セキュアな接続は提供されていない。
そのため、今回はマルチリージョンでの接続を行う際の構成を考えて構築しました。
尚、同一リージョン内であれば、VPCピアリングが利用可能です。


## 構成

|項目|実装|
|----|----|
| VPN_OS | VyOS |
| 冗長性(インターネット) | BGP |
| 冗長性(AWS内) | Serf |
| VPN | IPSEC  |

OSはCisco CSR 1000V も検討しましたが、無料で使える最善の選択として、VyOSを選定。
インターネット上の経路はBGPで冗長化する(OSPFでもよい)。
AWS内はSerfで冗長化を図った、これは実装が簡単であることが採用のポイント。
尚、LoopBackのIPの公告にOSPFを使用するが、AWSではインターフェイスが1つしかないため不要と考え実装してない。
VPNはIPSECにて実装、aes256/sha512が対応していることが条件。

## 構成図

![alt](https://s3-ap-northeast-1.amazonaws.com/photo.satohiroyuki.info/20150727/3region_vpn.png)


## 設定項目

こちらの　[AWSリージョン間接続 BGP冗長構成](http://qiita.com/SatoHiroyuki/items/4769e858df061a16a62c) を元に作成可能です。

追加項目としては、新しい接続対象を1つ追加することで対応できます。

BGP新しいピアを設定する場合

```
set protocols bgp [自AS番号] neighbor [VPN用アドレス] remote-as [AS]
set protocols bgp [自AS番号] neighbor [VPN用アドレス] soft-reconfiguration inbound
```


## 注意点

3リージョンの注意点としては、BGPの設計を把握している方が推奨になります。
障害ポイントを洗い出し、通信がどのような経路で障害を回避するのかを把握する必要があります。

起こりにくい障害ですが、例えば東京-バージニア-オレゴンをフルメッシュで接続している構成で、
東京-バージニア間で障害が発生した場合、東京→オレゴン→バージニア経由の通信があるということがあり得るということです。

そのような通信を行いたくない場合、該当の経路をフィルタリングする設定を追加する必要があります。


## まとめ

AWSでの各リージョン間との接続は、AWS独自の実装としてはSerfのみになります。
その他のIPSEC/BGPはAWS環境以外でも行っているお話ですので、
構築はネットワークを把握している方にお任せするのがよいと思います。
AutoLayout で UI を相対指定して 4, 4.7, 5.5 inch 全てに対応するコツ


iPhone のマルチデバイス対応なかなか大変ですよね．ただ iPhone5 以降の 3 サイズ (4inch, 4.7inch, 5.5inch) は，幸いなことに縦横比はどれもほぼ同じなので，等比率で拡大･縮小して対応できるとハッピーです．

しかし Storyboard のみでコンポーネントの位置やサイズを相対的に指定した UI を作るのって意外と面倒だったりします．そこで今回は，AutoLayout で View などを相対指定するために，自分がいつも使っているコツを書いてみようと思います．

## 対応方法

![image1.png](https://qiita-image-store.s3.amazonaws.com/0/7113/aea4238e-3c13-11df-6417-4da1cafb10f4.png)

上図のような 375:667 のビジュアル仕様書をデザイナーに渡されたとします．x, y 座標が 15, width, height が 50 で設定ボタンを配置したいですが，これらは絶対指定にするのではなく，例えば 320:568 の時はそれに応じて値を縮小したいですね．

このような場合，設置したいコンポーネントに対して，__固定された (少なくとも) 3 つの View で囲んであげる__ ことで，相対指定することができます．

### 具体的な手順

(1) ViewController の Simulated Size を Freeform にして，ビジュアル仕様書のサイズ (今回は 375:667) にあわせます．


(2) 設置したいコンポーネントの周りに 3 つの透明な View を用意し，以下のように Constraints をつけます．

![image4.png](https://qiita-image-store.s3.amazonaws.com/0/7113/edb5eabc-4498-32e0-56a4-d4f85751b063.png)

(3) これでコンポーネントの上左右を固定できるようになったので，あとは Aspect Ratio にチェックして完了です．

![image5.png](https://qiita-image-store.s3.amazonaws.com/0/7113/c6bcc3aa-7ec6-e47c-cfb4-224ffd078d1d.png)

これでどのようなコンポーネントも相対指定して設置できます．このテクニックをうまく使って快適なマルチデバイス対応ライフを送って下さい．
jQuery#text() の childNodes 互換性問題

`jQuery#text()` にnullや空文字を渡した時のふるまいについて、
jQuery APIレベルでは互換性は保たれているのだけれどDOMのchildNodesについて差分が出る。

https://api.jquery.com/text/
https://developer.mozilla.org/ja/docs/Web/API/Node/childNodes

```js:jQuery_1.11
jQuery('<span>').text('').children()
// []
jQuery('<span>').text('')[0].childNodes.length
// 1
```

```js:jQuery_2.1
jQuery('<span>').text('').children()
// []
jQuery('<span>').text('')[0].childNodes.length
// 0
```

これはjQueryを通さずにDOMを使っているツール(今回はCapybara)でjQuery 1.x -> 2.xへの移行をしている最中に
期待した動作をしなかったケースがあって気付いた。
bin-wrapperでバイナリを取り込むときにpostinstallにハマった話

最近良くバイナリファイルをbin-wrapperでラップして、npmプロジェクトに簡単に取り込めるようにしています。

* [https://github.com/k-kinzal/scala-bin](https://github.com/k-kinzal/scala-bin)
* [https://github.com/k-kinzal/sbt-bin](https://github.com/k-kinzal/sbt-bin)
* [https://github.com/k-kinzal/scalajs-standalone-bin](https://github.com/k-kinzal/scalajs-standalone-bin)

このときにbin-wrapperでラップしたバイナリに依存する、bin-wrapperでラップしたバイナリを作成すると、何故か1回目の`npm install`に失敗して、2回実行すると成功するという不思議な状況になりました。

![image](https://qiita-image-store.s3.amazonaws.com/0/5522/67c20dbb-9229-396c-de4e-9e4586fe3908.png)

* [https://travis-ci.org/k-kinzal/scalajs-standalone-bin/jobs/70056778#L100-L136](https://travis-ci.org/k-kinzal/scalajs-standalone-bin/jobs/70056778#L100-L136)

さらに、この失敗するモジュールを読み込んだプロジェクトで`npm install`すると、インストール順序が狂い出すという困った事態になりました。

意味わかんない。

# インストールに失敗したときの階層

仕方ないので、インストールして失敗したときに`node_modules`の階層構造を調べて見ました。

```
A
`-B
```

```
C
`-B
```

と言う構造のAモジュールにCモジュールをインストールしたときに

```
A
`-B
`-C
```

という構造になります。
この構造でBモジュールをインストールし終わった後に、Cモジュールの`postinstall`が実行されることを期待したいのですが、実際にはBモジュールのインストールが終わる前にCモジュールの`postinstall`が動いてしまいBモジュールの依存モジュールが見つからずに`Cannot find module`とエラーが発生してしまいます。

インストール前に`postinstall`が動いて困るなら、失敗した場合は遅延してリトライすればいけるのでは？と考えて試してみましたが上手く行きませんでした。
他にも`node shrinkwrap`を試したり、親子関係の依存にならないようにしてみたり、いろいろ試して見ましたがダメでした・・・。

# 対策

試行錯誤した結果、下記のように対策をとることになりました。

```json:package.json
"postinstall": "npm update && node install.js"
```

`postinstall`の実行のさいに依存モジュールの解決が終わってないなら、強制的にインストールすれば良いということで`npm update`を実行してやることにしました。


どう考えても悪手な臭いがぷんぷんします。

# さいごに

いったい、これはどうすれば良かったんでしょうか？
初めての`postinstall`でガンはまりして試行錯誤して、この結論に行き着きましたが、世の中の`postinstall`を使ってる人たちはどうしているんでしょうね。

そもそも組み方が悪かった疑惑もあるのですが、どうすれば良いのか上手いやり方をご存知の方がいましたら教えてください。
rails　メソッド関連

最近メソッド関連の理解がとぼしいなと感じている初心者です。

どうしたらメソッドを定義出来たり、読めたりすることができるんでしょうか？？

いまいち自由度が上がらなくて困っています。。

例えばRailsチュートリアルを読み進めることは出来ても理解が容易ではなく、一体あのレベルのコードをどうしたら初心者は可読できるようになるのでしょう？？

またeachメソッドやgetメソッドを自由に使えるのでしょう？？

こういった場で聞くことでは無いように感じますし、具体的ではないですが、どなたかのご助言をいただければと思い投稿させて頂きます。

よろしくお願い申し上げます。

参照
https://programmer-engine.work/
API > timestamps > ISO 8601 format > YYYY-MM-DDTHH:MM:SSZ

https://developer.github.com/v3/

> All timestamps are returned in ISO 8601 format:

```
YYYY-MM-DDTHH:MM:SSZ
```

<hr>
http://www.w3.org/TR/NOTE-datetime

>Complete date plus hours and minutes:
>      YYYY-MM-DDThh:mmTZD (eg <font color=blue>1997-07-16T19:20+01:00</font>)
...
> TZD  = time zone designator (<font color=red>Z</font> or +hh:mm or -hh:mm)

上記の青色の表示が表記例。
ZというのはTZDでタイムゾーン(+01:00などの記載)。
ES6 でこのように書いている

最近、ES6ばっかり書いていて完全に止められない状態になってしまっているのですが、ES5で書いていたときからプログラムの書き方自体が変わってきたなと感じる部分があるので列挙してみます。

# Destructuring assignments on formal argument

分割代入のシンタックス

```js
let obj = { a: 100, b: 200, c: 300 };
let { a, b, c } = obj;

console.log(a, b, c); //-> 100, 200, 300
```

これをメソッドとかコールバックの仮引数で使う。

```js
emitter.on("noteOn", ({ noteNumber, velocity }) => {
  // ここでなにか処理する
});
```

最初は引数の順番を気にしなくて良いとか、あとから雑な気持ちで引数を増やせて便利だなくらいに思っていたのだけど、最近はイベント発行側が受け取り側の変数名を束縛できるのでコードに一貫性を持たせられるというのが実はけっこう良いのではと思っている。

# Symbol
_2015/07/28 13:45 記述修正_
外部からアクセスしにくい、もしくは重複しない変数を作るのに使っている。

```js
import { EventEmitter } from "events";

export const EVENTS = typeof Symbol !== "undefined" ?
    Symbol("EVENTS") : "@mohayonao/${package-name}:EVENTS"; 

export default class SummerVacation extends EventEmitter {
  constructor() {
    super();
    this[EVENTS] = [];
  }

  pushEvent(event) {
    this[EVENTS].push(event);
  }
}
```

Symbolはユニークなので、こうしておくと気軽にインスタンス変数にアクセスできなくなるだけでなく、継承元が使っているインスタンス変数との重複を気にしなくて良くなる。上の例だと夏休みのイベントを管理するのに `this._events` を使ってしまうと EventEmitter が使っているのと被るので良くない。

`export` してあるのはテストで触れた方が楽なことがあるから。外部から気軽にアクセスできない方がよいけど、きちんと手順を踏めば別に触っても良いよというスタンス。

# Computed Property
メソッド命名規則を無視した特殊なメソッドを作るのに使っている。例はわかりにくいけど反応したいイベントハンドラを "/" 始まりのルールで記述しておいて実行できそうならするパターン。たとえば特定の URL パターンに反応させるとかが簡単に書ける。

```js
class Delegator {
  delegate(address, data) {
    if (address[0] === "/" && typeof this[address] === "function") {
      this[address](data);
    }
  }
}

let store1 = new class extends Delegator {
  ["/read/succeeded"](data) {}
  ["/read/failed"](data) {}
};

let store2 = new class extends Delegator {
  ["/read/failed"](data) {}
};

function doAction(stores, address, data) {
  stores.forEach((store) => {
    store.delegate(address, data);
  });
}

doAction([ store1, store2 ], "/read/failed", new TypeError());
```

flux アーキテクチャで実際に試してみた例
https://github.com/mohayonao/fluxx/blob/master/examples/todomvc/stores/TodoStore.js

他にはオブジェクトのプロパティを16進数で書きたいときにも便利

```js
const MIDIMessage = {
  [0x80] : "noteOff",
  [0x90] : "noteOn",
};
```

# Selective SuperClass
たとえば、node.js でも ブラウザでも使える MIDIKeyboard を扱うクラスというのを考えた時に一般的なクラスツリーだと以下のように考えると思う。

![extends1.png](https://qiita-image-store.s3.amazonaws.com/0/2568/53c0bff0-f0d1-16d4-31d9-206e61eab1f6.png)

このとき NodeMIDIKeyboard と WebMIDIKeyboard は同じMIDIメッセージパーサーを参照して同じような処理を2回書く必要があるのだけど、やることが全く同じなら以下のように親クラスを選択できたほうが簡単。ハードウェアに近い部分のAPIが異なる JavaScript の問題を上手く解決できていると思う。

![extends2.png](https://qiita-image-store.s3.amazonaws.com/0/2568/bc9d09a8-cdba-3402-79b8-268add667857.png)

```js:MIDIKeyboard.js
function _extends(MIDIDevice) {
  return class MIDIKeyboard extends MIDIDevice {
    // クラスの実装を書く
  };
}

export default { extends: _extends };
```

```js:WebMIDIKeyboard.js
import WebMIDIDevice from "@mohayonao/midi-device/webmidi";
import MIDIKeyboard from "./MIDIKeyboard";

export default MIDIKeyboard.extends(WebMIDIDevice);
```

```js:NodeMIDIKeyboard.js
import NodeMIDIDevice from "@mohayonao/midi-device";
import MIDIKeyboard from "./MIDIKeyboard";

export default MIDIKeyboard.extends(NodeMIDIDevice);
```

実際に試してみた例

- https://github.com/mohayonao/midi-keyboard
- https://github.com/mohayonao/launch-control
.NET Framework 3.5 インストール時の0x80071A90エラーを解決する

Windowsのヘルプ通りでもうまく行かなかったが、avastを切ったらいけました。
そういえば、この前は佐川のe飛伝IIとかも結構引っかかっていたし結構な曲者感。


参考：
[.NET Framework 3.5 error 0x80071A90 during installaton](https://rejzor.wordpress.com/2015/06/28/net-framework-3-5-error-0x80071a90-during-installaton/)
FirefoxのWebIDE起動してみた

## FirefoxのWebIDE起動方法

* FirefoxをインストールしていればWebIDEがすでに入っている。
* macであれば、`Shift+F8`

![スクリーンショット 2015-07-27 20.22.15.png](https://qiita-image-store.s3.amazonaws.com/0/25728/120e1c05-4406-e318-2cfe-58896940f742.png)

![スクリーンショット 2015-07-27 20.22.56.png](https://qiita-image-store.s3.amazonaws.com/0/25728/ec52eeff-fb29-18d3-0b8b-8693de9d698d.png)

![スクリーンショット 2015-07-27 20.24.29.png](https://qiita-image-store.s3.amazonaws.com/0/25728/591823e6-7236-b347-e5f8-13a84b20027b.png)

* `control+Space`で補完。
* 再生ボタンを押すとシミュレーターで動く。

![スクリーンショット 2015-07-27 20.25.07.png](https://qiita-image-store.s3.amazonaws.com/0/25728/d8cbf669-e203-618b-cff1-829aa1020c41.png)

## その他リンク

* [開発ツール | MDN](https://developer.mozilla.org/ja/docs/Tools)
* [Mozilla Hacks – the Web developer blog](https://hacks.mozilla.org)
* [caniuse](http://caniuse.com/)
* [mercurial](http://hg.mozilla.org/mozilla-central)
* [mozilla-b2g/gaia](https://github.com/mozilla-b2g/gaia)
* [gecko](https://github.com/mozilla/gecko-dev)
* [FxOS Code Reading for Beginners · FxOS-Code-Reading-Group/MainRepo Wiki](https://github.com/FxOS-Code-Reading-Group/MainRepo/wiki/FxOS-Code-Reading-for-Beginners)
AWSインスタンスのスケールアップを計画的・効率的に自動化する

AWSではスケールアウトを推奨しているが、スケールアウトを考慮していないアプリケーションの場合、改修にそれなりのコストが必要となってしまいます。
このようなときにすぐに始められる手段として、スケールアップ、スケールダウンがありますね。
AWS CLIでインスタンスのスケールアップ・ダウンを制御することは可能ですが、事例が少なかったので、メモとして残しておこう。

#【自動化事例】
◆AWSインスタンスタイプを計画的にスケールアップしコストの最適化を実現する ［2015年7月］
　～A-AUTO 50とAmazon EC2 API Toolsを連携させた自動化～
　https://a-auto50.unirita.co.jp/case_study4/

◆関連したブログ記事
　AWSのインスタンスタイプの変更をスケジューリングしインスタンスタイプを最適化する
　　http://a-auto50.blogspot.jp/2015/06/aws_18.html
　

#【非自動化】
◆AWS EC2インスタンス スケールアップ時の注意点【sysstatについて】［2015年6月］
　http://www.skyarch.net/blog/?p=3603

◆EC2インスタンススケールアップ（手動）［2013年10月］
　http://blog.serverworks.co.jp/tech/2013/10/28/how-tochange-instance-type
scala勉強ノート4 ～for式～

for式は式である。yieldしなかった場合にはUnit型の値が返る。yieldした場合には値の列挙が返る。

```scala
val x = for (i <- 1 to 10 by 2) i
val ys = for (i <- 1 to 10 by 2) yield i
```

toの代わりにuntilを使っても書ける。

```scala
val x = for (i <- 1 until 11 by 2) i
val ys = for (i <- 1 until 11 by 2) yield i
```

if制約は複数書ける。

```scala
val xs = for (i <- 1 to 20 if i % 2 == 0 if i % 3 == 0) yield i;
```

識別子に束縛されるのは値であって変数ではないので、↓はエラーとなる。

```scala
val xs = for (i <- 1 until 11 by 2) {
	i = 10
	i
}
```

```scala
val xs = for (i <- 1 to 10; i2 = i * i) yield { 
	i2 = 1
	i2
}
```
scala勉強ノート2 ～if式～

if式は式である。

```scala
val res = if ({ val res = 4 + 3; res * res } > 50) {
	println("kitty on your lap")
	111
}
```

返り値の型は勝手に推論される。↑の場合はAnyVal型。↓の場合はAny型。

```scala
val res = if ({ val res = 4 + 3; res * res } > 50) {
	println("kitty on your lap")
	"KOUL!!"
}
```
scala勉強ノート1 ～式ブロック～

式ブロックを使うと

```scala
val res = 4 + 3
val res2 = res * res
```

は

```scala
val res = { 
	val res = 4 + 3
	res * res
}
```

と書ける。こちらの方が

* 値や変数の有効範囲が狭くなるので良い。
* 1度しか使えない匿名関数となるので良い。

ので、

* 中間的な計算結果を使って所望の計算結果を得たい場合に使うべき。

と思われる。

勿論外部値や外部変数を参照することもできる。

```scala
val a = 12
val res = { 
	val res = 4 + 3 + a
	res * res
}
```

勿論x2入れ子にすることもできる。

```scala
val a = 12
val res = {
	val res = 4 + 3 + {
		val res = a
		res
	}
	res * res
}
```

勿論x3if式の条件式にすることもできる。

```scala
if ({ val res = 4 + 3; res * res } < 50)
	println("kitty on your lap")
```

勿論x4if式の本体にすることもできる。

```scala
if ({ val res = 4 + 3; res * res } < 50) {
	println("kitty on your lap")
	println("kitty on your lap")
}
```

勿論x5match式の対象にすることもできる。

```scala
{ println("kitty on your lap"); true } match {
	case true => 1
	case false => 0
}
```

勿論x6match式の本体（ｒｙ。

```scala
true match {
	case true => {
		println("true")
		1
	}
	case false => {
		println("false")
		0
	}
}
```

勿論x7match式のif制約の条件式（ｒｙ。

```scala
true match {
	case b if { val bb = b && b; bb || b } => 1
	case false => 0
}
```

勿論x8for式の反復子作成の際に使用することもできる。

```scala
for (i <- { println("for1"); 1 } to { println("for2"); 10 } by { println("for3"); 2 }) i
```

**それぞれの式ブロックは1回ずつしか評価されないことに注意しなければならない。**

勿論x9for式のif制約の条件式（ｒｙ

```scala
val xs = for (i <- 1 to 20 if { println("kitty on your lap"); i % 3 == 0 }) yield i;
```

**式ブロックは反復の度に評価されることに注意しなければならない。**↑の場合には20回評価される。

勿論x10関数の実引数（ｒｙ

```scala
def add(x: Int, y: Int) = x + y
add({ val t = 1; t + t }, 2)
add(y = { val t = 1; t + t }, x = 2)
```

勿論x11関数の既定の仮引数（ｒｙ

```scala
def add(x: Int = { println("kitty on your lap"); 1 }, y: Int) = x + y
```

**式ブロックは関数の呼び出しの度に評価されることに注意しなければならない。**
vim-sandwich とその周辺の設定


よさげプラグインの [machakann/vim-sandwich](https://github.com/machakann/vim-sandwich) を使ってみました。

代わりに vim-textobj-multiblock, vim-operator-surround を削除しました。
vim-expand-region, [machakann/vim-textobj-delimited](https://github.com/machakann/vim-textobj-delimited) (machakann さんにコメントを頂いて設定できました) も使っています。

以下のように # にカーソルがあったときに「vad」で「, fuga」を選択できるように設定しています。
expand-region を使うことで「,eee」で同じく「, fuga」を選択します。

```
hoge, fuga, homu
        #
```

.vimrc の抜粋を記載します。
NeoBundle がエラーとならない適切な箇所に記載してください。

```vim:.vimrc抜粋1
" neobundle#begin, neobundle#end 間
NeoBundleLazy 'terryma/vim-expand-region', {
      \   'autoload': {
      \     'mappings': ['<Plug>(expand_region']}}
NeoBundle 'machakann/vim-sandwich'
NeoBundleLazy 'machakann/vim-textobj-delimited', {
      \   'autoload': {'on_source': 'vim-expand-region'}}

```

```vim:.vimrc抜粋2
" neobundle#end 後
if neobundle#tap('vim-sandwich')
  nmap s <Nop>
  xmap s <Nop>

  let g:textobj#sandwich#stimeoutlen = 100
  let g:sandwich#recipes = deepcopy(g:sandwich#default_recipes)
  let g:sandwich#recipes += [{'buns' : ['「', '」']}]
  let g:sandwich#recipes += [{'buns' : ['【', '】']}]
  let g:sandwich#recipes += [{'buns' : ['（', '）']}]
  let g:sandwich#recipes += [{'buns' : ['『', '』']}]

  call neobundle#untap()
endif

if neobundle#tap('vim-expand-region')
  " ad: delimited
  " ib: sandwich
  let g:expand_region_text_objects = {
        \ 'iw'  : 0,
        \ 'iW'  : 0,
        \ 'iu'  : 0,
        \ 'ad' : 0,
        \ 'ib'  : 1,
        \ }

  call submode#enter_with('expand-region', 'nv', 'r', ',e', '<Plug>(expand_region_expand)')
  call submode#map('expand-region', 'nv', 'r', 'e', '<Plug>(expand_region_expand)')
  call submode#map('expand-region', 'nv', 'r', 's', '<Plug>(expand_region_shrink)')
  call submode#map('expand-region', 'nv', 'r', 'E', '<Plug>(expand_region_shrink)')

  call neobundle#untap()
endif

if neobundle#tap('vim-textobj-delimited')
  let g:textobj_delimited_patterns = [[', *', '\m\%(, *\)\?\%([^,[\]{}]\+, *\)\+\%([^,[\]{}]\+\)\?']]

  call neobundle#untap()
endif

```

[sandwich.vim を書きました - 書いたものなど](http://machakann.hatenablog.com/entry/2015/07/25/205921)
マルチドメインSSL

#目的
GIP・ドメインは1つ。サブドメインを作成しネームベースバーチャルホストで構築したサイトそれぞれにサーバ証明書を適用する。

#方法
1. [mod_gnutls](https://mod.gnutls.org/)を使用する。（単一のSSLセッションキャッシュを共有することで複数ドメインへ適用が可能になります。）
2. ワイルドカードサーバ証明書を使用する。
3. ロードバランサは使用しない。

#環境
* Ubuntu 14.04.1 LTS
* apache2 version:2.4.7-1ubuntu4.4
* libapache2-mod-gnutls version:0.5.10-4（GNUTLSとのSSLおよびTLS暗号化のためのApacheモジュール）

#設定

```
$ sudo apt-get install libapache2-mod-gnutls
$ sudo a2enmod gnutls
```

`$ sudo a2dismod ssl`
ports.confのssl_moduleの定義をコメントアウトでもOK。

```ports.conf
Listen 80
#<IfModule ssl_module>
#       Listen 443
#</IfModule>
```

mod_gnutlsのディレクティブを作る。

```ports.conf
<IfModule mod_gnutls.c>
        Listen 443
        SSLStrictSNIVHostCheck off
</IfModule>
```

default-ssl.confからサイトごとにconfを作成する。
$ sudo cp default-ssl.conf hoge1.test-ssl.conf

```hoge1.test-ssl.conf
<VirtualHost *:443>
ServerName hoge1.test.com
ServerAdmin admin@hoge1.test.ne.jp
DocumentRoot /var/www/sites-enabled/hoge1.test/htdocs

ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined

SSLEngine on

省略
```
有効化
`$ sudo a2ensite hoge1.test-ssl.conf`

mod_sslが使用されていないか確認する。
`$ grep -r "mod_ssl" /etc/apache2/sites-enabled/`

SSLを有効にしたいドキュメントルートを定義する。

```apache2.conf
<Directory /var/www/sites-enabled/hoge1.test/htdocs>
        Options FollowSymLinks
        AllowOverride All
        Require all granted
</Directory>
```

80番のアクセスを443番にリダイレクトする。

```htaccess.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond "%{SERVER_PORT}" "^80$"
RewriteRule "^(.*)$" "https://%{SERVER_NAME}$1" [R,L]
</IfModule>
```

文法チェックし、サービスを再起動する。

```
$ sudo apache2ctl configtest
Syntax OK
$ sudo service apache2 restart
```
rsyncオプション

# とりあえずrsync
## リモートサーバーからローカルサーバーにコピー
### 対象ファイルの確認
```bash
rsync -ahvn username@hostname:/var/www/html/* /var/www/html/ --max-size=10M
```
`-a` を指定することでなるべくコピー元のファイルと同一条件でコピーする。
`-h` でファイルサイズの視認性をよくする。
`-v` で詳細を出力する。
`-n` または `--dry-run` で対象ファイルを確認する。
`--max-size` で転送対象のファイルサイズの上限を指定できる。

### ファイルの転送状況の表示
```bash
rsync -ahv --progress username@hostname:/var/www/html/* /var/www/html/
```
```
html/huge/file.zip
      37.36M   1%    8.77MB/s    0:03:39

```
`--progress` を指定するとファイル単位で転送状況が表示される。

# rsync で ssh のポートを指定する方法
```
rsync -e "ssh -p 22222"
```
または

```
rsync --rsh="ssh -p 22222"
```

# rsyncのオプション

| オプション | 別名          | 意味 |
|------|--------------------|------------------|
| `-a` | `--archive`        | `-rlptgoD` と同じ |
| `-r` | `--recursive`      | 指定ディレクトリ配下をすべて対象とする |
| `-l` | `--links`          | シンボリックリンクをそのままシンボリックリンクとしてコピー |
| `-p` | `--perms`          | パーミッションをそのままコピー |
| `-t` | `--times`          | タイムスタンプをそのままコピー |
| `-g` | `--group`          | グループをそのままコピー |
| `-o` | `--owner`          | ファイル所有者をそのままコピー (root のみ有効) |
| `-D` |                    | `--devices --specials` と同じ |
|      | `--devices`        | ブロックデバイスをコピー (root のみ有効) |
|      | `--specials`       | 名前付きパイプや FIFO などの特殊ファイルをコピー |
| `-H` | `--hard-links`     | ハードリンクをそのまま反映 |
| `-h` | `--human-readable` | ファイルサイズの`bytes`を`K`や`M`で出力 |
| `-v` | `--verbose`        | コピーしたファイル名やバイト数などの転送情報を出力 |
| `-z` | `--compress`       | データ転送時に圧縮 |
|      | `--compress-level=NUM` | `NUM`がゼロでない場合 `--compress` オプションが暗黙的に指定される |
|      | `--skip-compress=LIST` |  |
| `-c` | `--checksum`       | タイムスタンプとファイルサイズではなくチェックサムで差分を確認 |
| `-u` | `--update`         | 転送先に既にファイルが存在し、転送先のタイムスタンプの方が新しい場合は転送しない |
| `-n` | `--dry-run`        | コピーや転送を実際には行わず転送内容のみ出力 |
|      | `--delete`         | 転送元に存在しないファイルは削除 |
|      | `--exclude=PATTERN` | 同期から除外 |
Rubyデザインパターン 2日目 : Strategy

Rubyデザインパターン学習のために、自分なりに読書の結果をまとめていくことに決めました。第2日目はStrategyです。(http://www.amazon.co.jp/gp/product/4894712857/ref=as_li_qf_sp_asin_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=4894712857&linkCode=as2&tag=morizyun00-22)

![スクリーンショット 2015-07-27 11.25.28.png](https://qiita-image-store.s3.amazonaws.com/0/80075/d68a4010-c177-4ef5-2f2e-899a76c76cb6.png)


# **<i class="fa fa-pencil"></i>　2日目 Strategy**

1日目のTemplateMethodでは、大きな欠点が一つありました。それは、継承をもとに全てを構築していくことです。

GoF Rubyデザインパターンでは設計原則として、**継承よりも委譲のほうが好ましい**と何度も書かれています。
なぜなら、継承はクラス同士の結合度が上がってしまうからです。

- **Template method　→　継承**
- **Strategy　→　委譲、集約**

Strategyパターンで機能を切り替えたければ、コンテキスト側がストラテジオブジェクト(HTMLフォーマッター部分と平文フォーマッター部分)を実行時に選択するだけで良いのです。
**コンテキストから見て、ストラテジのパーツは等価に見えるように構築**することにより、パーツを付け替えるようにコードを利用できるようになります。

※コンテキストとは、ストラテジを利用する側

```rb
class Report
  attr_reader :title, :text
  attr_accessor :formatter

  def initialize(formatter)
    @title = '月次報告'
    @text = ['順調', '最高の調子']
    @formatter = formatter
  end

  def output_report
    @formatter.output_report(self) 
  end
end

class HTMLFormatter
  def output_report(context) 
    puts ('<html>')
    puts (' <head>')
    puts ("  <title>#{context.title}</title>")
    context.text.each do |line|
      puts ("  <p>#{line}</p>")
    end
    puts (' </body>')
    puts ('</html>')
  end
end

class PlainTextFormatter
  def output_report(context)
    puts ("*****#{context.title}*****")
    context.text.each do |line|
      puts line
    end
  end
end

report = Report.new(PlainTextFormatter.new) # or HTMLFormatter.new
report.output_report

```

これでStrategyパターンの基本的な構築は完了しました。

ただし、現状ではあまりRuby的なコードではない事は確かです。

**<i class="fa fa-diamond"></i> それでは、Rubyの柔軟さを取り入れましょう!**

```rb
class Report
  attr_reader :title, :text
  attr_accessor :formatter

  def initialize(&formatter)
    @title = '月次報告'
    @text = ['順調', '最高の調子']
    @formatter = formatter
  end

  def output_report
    @formatter.call(self)
  end
end

HTML_FORMATTER = lambda do |context|
  puts ('<html>')
  puts (' <head>')
  puts ("  <title>#{context.title}</title>")
  puts (' </head>')
  puts (' <body>')
  context.text.each do |line|
    puts ("  <p>#{line}</p>")
  end
  puts (' </body>')
  puts ('</html>')
end

PLAIN_FORMATTER = lambda do |context|
  puts "*****#{context.title}*****"
  context.text.each do |line|
    puts line
  end
end

report = Report.new(&HTML_FORMATTER) #or PLAIN_FORMATTER
report.output_report
```

Procを利用することにより、わざわざストラテジオブジェクトのためにクラスを作成する必要がなくなりました。必要なクラスの量が減るのは、それだけでも嬉しいですよね。
Procオブジェクトなので、引数で指定するときはアンパサンド(&)を明示的に付けましょう。

```rb
report = Report new do |context|
  puts "****#{context.title}****"
  context.text.each do |line|
    puts line
  end
end

report.output_report
```
こういった呼び出し方もできるみたいですが、自分は前者のほうが好きです。

## **<i class="fa fa-star"></i>　まとめ**




Strategyパターンの恩恵は、ストラテジオブジェクトで手軽にアルゴリズムのパターンを増やし、切り替えられる事なので、コンテキスト側からストラテジ側がどう見えるかをしっかり考え、それにあった設計をすることが大事だと感じました。委譲をベースにしたパターンなので、サブクラスを汚染するTemplate Methodより安全である可能性が高いです。
またRubyはコードブロックを便利に扱える言語なので、RubyとStrategyは相性が良いと言えるでしょう。
第１回 東京大学ディープラーニング研究会

第１回東京大学ディープラーニング研究会
========

知人の川上さん＠CMU留学中が発表されるということで参加してきました。

松尾先生＠東京大学は、日本のAI研究の底上げを志しているということがひしひしと伝わってきました。私も、少しでも役に立てればと思いました。

川上さん＠CMUは、Theanoを使って、かなり具体的なDeep Learningの実装方法について説明されていて、これは役に立つと感じました。時間をとって試してみたいです。
[川上さんのハンズオンの内容](https://github.com/k-kawakami/Theano_Tutorial "Theano_Tutorial")

中山先生＠東京大学のDeep Motionのデモは、生で見れて良かったです。学習に時間はかかるのかもしれませんが、Deep Learningによる実用化が可能だとあらためて感じました。
[Deeplearning.jp](http://deeplearning.jp/ "Deeplearning.jp")

また、秋からはじめる予定とアナウンスのあったDeep Learningコースにも期待しています。

[メモ]
--------
場所: 東京大学工学部2号館1階212号講義室
日時: 2015/07/23(木)15:00〜18:00

15:00-15:30 東京大学における人工知能に関する取り組み（東京大学 松尾豊）
--------

## 顔画像認識で人間の精度を超える

* Marvin Minsky
 子どものできることは難しい

## Deep Learning の AI における意味

* AI における 50年来のブレークスルー
* ロバスト性を高めるための計算機パワー
* 初期仮説への回帰

## Deep Learning の今後の発展

* 画像（動画）
* マルチモーダル
* ロボティクス
* インタラクション
* 言葉とのひもづけ
* 言語から知識獲得

## 技術の発展と社会への影響

## 考えられるインパクト

* ゲーム（ブロック崩し）
* ロボット（穴を通す、蓋を閉める）
* PFI（レーシングゲーム、実機）

## 未来の社会と産業の構造変化を描く

* 1995年のインターネット
* Google
* Amazon
* Facebook

## 日本の未来へ

東大生はニーズをしらない
AIはニーズをしる必要がない
人工知能はアルゴリズムなので勝負できる

## 国内での動き

東大AIラボ、Deep Learningコースを作りたい

15:50-18:00 Deep Learning チュートリアル（カーネギーメロン大学 川上和也）
--------

## Deep Learning

CMUでスパイしてきた
機械翻訳、感情推定

## Image Recoginition

画像認識
オブジェクト認識、シーンラベリング

## Sequene Modeling

POSタギング、音声認識
シーケンス生成

## Crazy Applications

Context Free Grammar
Execute programs
Blues（音楽）
Conversion（会話）

## Linear & Logistic Regression

- Linear Regression
- Logistic Regression
	- Two-class
	- Multi-class

ロジスティック回帰が理解できればDPもOK

## Deep Networks

- Feature Extractor

$a_{1} = W_{1} x + b_{1} $
$z_{1} = \sigma(a_{1}) $
$a_{2} = W_{2} z_{1} + b_{2} $
$z_{2} = \sigma(a_2) $

高校で習っている方程式を多層にしてるだけ

## Deep Networks

- Ojective Functions

## Training Deep Network = Chain Rule!!

## Chaing Rule

- Chain Rule

$\frac{d E}{d W_{1}} = \frac{d E}{d z_{n}} \frac{d z_{n}}{d z_{n-1}} \frac{d z_{n-1}}{d z_{n-2}} ... \frac{d z_{1}}{d a_{1}} \frac{d a_{1}}{d W_{1}}$

Stochastic Gradient Descent

$W_{1} = W_{1} - lr \frac{d E}{d W_{1}}$

いまから、これをコーディングします

## Recipe

1. Choose appropriate objective function
2. Find good architecture
	1. Deep Layers
	2. Convolution, Maxpooling
3. Design good optimizer
	1. Adaptive Learning Rate
	2. Weight Decay
	3. Small Learning Rate
4. Initialize parameters (これはほぼカン)

## Hands On

- Theano
微分をしてくれる
Python で実装できる
GPU が利用できる

- Tool

theano.grad がめっちゃ使える
theano.shared をインクリメント


15:30-15:50 ディープラーニングとdeeplearning.jpについて（東京大学 中山浩太郎）
--------

## Deeplearning.jp 活動概要

## 計算機環境

## 輪読会

## 主な研究テーマ

## ハック会

## GeSdA を開発

## Teano / Pylearn2

- 有名どころは一通り実装されている
- Theano の自動微分が秀逸
- GPU / CPU 切り替えが楽
- YAML のネットワーク定義
- 拡張性が高い

## Caffe

- 画像処理では不動
- 高速
- コミュニティ力

## Torch7

- Facebookが参入
- Lua -> C
- シンプルに書ける

## GeSdA

- GPU
	- Numpy + Blas の5~16倍
- グリッドサーチ
- インタラクティブな可視化
- libSVM形式データ対応

## 可変長レイヤー数：YAML

## グリッドサーチ

## DeepMotion (Demo)

## まとめ

秋から東大でディープラーニングが学べる場を作ろうと思っている。
[Deeplearning.jp](http://deeplearning.jp/ "Deeplearning.jp") へ情報を公開
Everything と Vim の連携


（2015-10-04 いくつか要望を取り込んでいただいたので内容を修正）

Vim の [ompugao/ctrlp-locate](https://github.com/ompugao/ctrlp-locate) という素敵プラグインが公開されていたので使ってみた。
Everything の cui コマンドの `es` が使用される。
MSYS2 の locate が存在していると、それが使われてしまうので、`es` コマンドを使うように設定。
Vim のキャッシュ関係から目的外のファイルが引っかかることがあったので Everything 側で除外しておく。

オプション - 検索データ - 除外 - 検索対象外フォルダ一覧 で以下を登録
` *\.* ` は .hg, .neocomplete などを除外するため。

- $Recycle.Bin
- `*\.*`
- C:\Users\hokorobi\_vim\info

```vim:.vimrc
NeoBundle 'hokorobi/ctrlp-locate', {
      \   'autoload': {
      \     'commands': ['CtrlPLocate'],
      \   }
      \ }

if neobundle#tap('ctrlp-locate')
  nnoremap <Leader>e :<C-u>CtrlPLocate<CR>
  let g:ctrlp_locate_command_definition = 'es -n 100 {query}'

  call neobundle#untap()
endif

```
grouped_options_for_select で optgroup 要素に任意の属性を設定したい

[grouped_options_for_select](http://apidock.com/rails/ActionView/Helpers/FormOptionsHelper/grouped_options_for_select) なんてあまり使われてなさそうなのでニッチなネタですが、備忘録がてら投稿します。

`grouped_options_for_select` を使う際に `optgroup` 要素にも任意の data 属性を設定したいと思いました。しかし、リファレンスを見てもその方法は載ってない…。
仕方がないので [ソース](https://github.com/rails/rails/blob/626b10ef1f34fbc5595107e1cdbd3f839a46d96a/actionview/lib/action_view/helpers/form_options_helper.rb#L524) を読んでみました。

```rb
# grouped_options_for_select メソッドの一部
grouped_options.each do |container|
  html_attributes = option_html_attributes(container)

  if divider
    label = divider
  else
    label, container = container
  end

  html_attributes = { label: label }.merge!(html_attributes)
  body.safe_concat content_tag(:optgroup, options_for_select(container, selected_key), html_attributes)
end
```

すると `optgroup` タグを生成する際に `html_attributes` というローカル変数でオプションを渡しているみたいです。
そして `html_attributes` を作っている [option_html_attributes](https://github.com/rails/rails/blob/626b10ef1f34fbc5595107e1cdbd3f839a46d96a/actionview/lib/action_view/helpers/form_options_helper.rb#L736) の実装は以下のようになっています。

```rb
def option_html_attributes(element)
  if Array === element
    element.select { |e| Hash === e }.reduce({}, :merge!)
  else
    {}
  end
end
```

どうやら配列にハッシュを含めれば、そのハッシュの部分が `content_tag` のオプションに渡されそうですね。

```rb
grouped_options = [
  ['1 年生', [['nori', '乃莉'], ['nazuna', 'なずな']], { data: { grade: 1 }, class: 'hidamari' }],
  ['2 年生', [['yuno', 'ゆの'], ['miyako', '宮子']], { data: { grade: 2 }, class: 'hidamari' }],
  ['3 年生', [['sae', '沙英'], ['hiro', 'ヒロ']], { data: { grade: 3 }, class: 'hidamari' }]
]

# Rails コンソールで試したので、helper 経由で呼び出しています。
helper.grouped_options_for_select(grouped_options)
```

```html
<optgroup label="1 年生" data-grade="1" class="hidamari">
  <option value="nori">乃莉</option>
  <option value="nazuna">なずな</option>
</optgroup>
<optgroup label="2 年生" data-grade="2" class="hidamari">
  <option value="yuno">ゆの</option>
  <option value="miyako">宮子</option>
</optgroup>
<optgroup label="3 年生" data-grade="3" class="hidamari">
  <option value="sae">沙英</option>
  <option value="hiro">ヒロ</option>
</optgroup>
```

できた :v:
ロボットアプリケーションのライブラリを共有するプラットフォーム「ロボットライブラリ」の使い方

[ロボットスタート](http://robotstart.co.jp)代表の中橋です。今回はPepperなどのロボットアプリのボックスやアプリケーション自体を共有するサービス、[ロボットライブラリ](https://robo-lib.com/)を[OYOYO-Project](http://oyoyo-project.com/)さんと共同で作ったので、その使い方の記事となります。

---

![alt](http://robotstart.co.jp/assets/img/n183-01.png)

まず[ロボットライブラリ](https://robo-lib.com/)にアクセス。

![alt](http://robotstart.co.jp/assets/img/n183-02.png)

トップページが表示されたら画面上部メニューまたは画面中央の「新規登録」をクリック。

ここで、ユーザーID、ユーザー名、メールアドレスを入力します。利用規約も読んで問題なければ、登録完了です。

続いてプロフィールの設定。アイコンや自己紹介を設定してください。

続いて「公開する」メニューから「プロジェクトの作成」を選びます。

ここでプロジェクト名、プロジェクトの説明、対応ロボット選択、プロジェクトのアイコン画像、プロジェクトの詳細説明画像を入力します。

続いてファイルのアップロードとなります。

ファイルはZip形式でまとめてアップすることもできます。ファイルを個別に選択することもできます。

また、デベロッパーのみなさんが普段お使いのGitからもファイルの操作ができます。通常のGitサーバとしても、お使いいただけますのでご活用いただければと。

----

同じようなアプリを作るのはやめて、他の人が作ったソースを有効活用して、素敵なロボットアプリができるといいですね。
画面内を素早くカーソル移動する方法のまとめ

# はじめに
表題について、個人的によく用いる方法をまとめておく。

# 各種コマンド・パッケージ
## isearch
`C-s`と`C-r`で起動できる、一番ポピュラーな方法。候補がたくさんヒットした場合は連打する必要がある。
基本的に起動したウィンドウ内でのみ有効。

## ace-jump-mode
画面内で移動先の文字を明示的に指定してジャンプする。複数ウィンドウ、複数フレームにも対応できる。
MELPAからインストール可能。以下のリンクを参照されたい。

* [公式の使い方デモ](https://dl.dropboxusercontent.com/u/3254819/AceJumpModeDemo/AceJumpDemo.htm)
* [ace-jump-modeの紹介](http://d.hatena.ne.jp/syohex/20120304/1330822993)
* [emacs ace-jump-mode.el : 【インクリメンタルサーチ王者陥落】3ストローク以下でカーソルを飛ばせ](http://rubikitch.com/2014/10/09/ace-jump-mode/)
* [Emacsで1～3ストロークで画面上の任意の場所に移動するための設定](http://d.hatena.ne.jp/rkworks/20120520/1337528737)
* [ace-jump-modeのソースコード（github）](https://github.com/winterTTr/ace-jump-mode)

ace-jump-modeについては基本的に英数字のみを対象にジャンプ候補を生成するが、漢字かな交じりの日本語に対応させることも可能である。
設定は以下を参考に。

* [emacs ace-pinyin.el : 【念願のMigemo化】ace-jump-char-modeが日本語文字に対応！(元中国語) ](http://rubikitch.com/tag/ace-pinyin/)

## jaunte
ace-jump-modeよりもシンプルなのが良い。

* [ソースコード](https://github.com/acple/jaunte)

## avy
機能的にはace-jump-modeとほぼ同等。ace-jump-modeと比べて開発がアクティブである。逆にace-jump-modeはあまりアクティブではない。
MELPAからインストール可能。以下のリンクを参考にするとよい。

* [emacs avy.el : 【画面内移動】ace-jump-modeの新実装！より汎用的に使いやすく](http://rubikitch.com/2015/05/20/avy/)
* [avyのソースコード（github）](https://github.com/abo-abo/avy)

ちなみにバージョン0.3.0時点で提供されている「主要な」コマンドは次の通りである。もちろんこれ以外のコマンドも存在する。

|コマンド名|説明|
|:----------------------|:----------------------------------------------------|
|avy-goto-word-0　| 画面中の「全ての」wordの先頭文字に対してジャンプ候補を生成する。|
|avy-goto-word-1　|画面中のwordの先頭文字に対してジャンプ候補を生成する。ただし指定した一文字に対して。|
|avy-goto-char    |指定した一文字を対象に、画面中にジャンプ候補を生成する。|

isearch中に発動させたい場合は、avyが提供している`avy-isearch`という関数を`isearch-mode-map`の適当なキーバインドに設定すればよい。

## avy-migemo
avyがmigemo対応したもの。個人的に非常にオススメ。

* [ソースコード](https://github.com/momomo5717/avy-migemo)

## ace-isearch
筆者作のパッケージであり、isearch, ace-jump-mode, avy, そしてhelm-swoopの統合を試みたものである。
挙動としては、１文字isearchがace-jump-mode (or avy)、2文字以上6文字以下で通常のisearch、それ以上の文字数でhelm-swoopが発動する。 
MELPAからインストール可能。詳細は以下のリンクを参考に。

* [emacs ace-isearch.el : 超isearch＝isearch＋ace-jump-mode＋helm-swoop　カーソル移動と検索を統合！](http://rubikitch.com/2014/10/08/ace-isearch/)
* [ace-isearchのgithubページ](https://github.com/tam17aki/ace-isearch)

helm-swoopについては以下を参考に。ace-isearchについても少し紹介されている。

* [emacs helm-swoop.el : 【これはすごい】バッファ全体をMigemo絞り込み検索して走り回れ！Emacs Advent Calendar 2014](http://rubikitch.com/2014/12/25/helm-swoop/)

helm-swoopは今回の記事の趣旨とは関係ないが、非常に強力な検索機能を提供するので、是非使ってみて欲しい。

# おわりに
デフォルトのisearchも悪くはないが、ace-jump-modeやavyといった便利なパッケージがあるので積極的に使うと良い。今回紹介しなかったが、pophintも設定次第で便利に使えるのでは思われる。
Oracleのテーブルのレコード全件をCSVファイルに出力するPythonスクリプト

以前に作ったPythonスクリプト。
指定したテーブルのレコードをCSVファイルに出力する。

# 環境

* CentOS 6.4
* Python 3.3.0
* Oracle Client 11.2.0.3.0
* ライブラリ： cx_Oracle

cx_Oracleのインストール方法は以下参照。
 http://mokky14.hatenablog.com/entry/2014/12/17/150854

# スクリプト

```py3:tbl2csv.py
#!/usr/bin/python3

import cx_Oracle
import sys
import csv
from itertools import chain

argvs = sys.argv
argc = len(argvs)
if argc != 2:
  print('Usage: %s TableName' % argvs[0])
  quit()

table_name = argvs[1].upper()
file_name = table_name + '_data.csv'

with cx_Oracle.connect('scott','tiger','xx.xx.xx.xx/tns_service_name') as conn:
  # テーブルの列名取得
  column_name_sql = 'select column_name from user_tab_columns where table_name = :tbl'
  cur_columns = conn.cursor()
  cur_columns.execute(column_name_sql, tbl=table_name)
  columns = cur_columns.fetchall()
  cur_columns.close()
  columns = tuple(chain.from_iterable(columns))

  # テーブルのレコード全件取得
  data_sql = 'select * from %s' % table_name
  cur_data = conn.cursor()
  cur_data.execute(data_sql)
  with open(file_name, 'w') as f:
    csv_writer = csv.writer(f)
    csv_writer.writerow(columns)
    while 1:
      rows = cur_data.fetchmany(50)
      if len(rows) == 0:
        break
      csv_writer.writerows(rows)
  cur_data.close()
```

テーブルのレコード50件ずつfetchしてファイル出力。フェッチ件数が0件になったら処理終了。
フェッチループの書き方がいまいちな気がする。。
Bridging-HeaderがあるのにCocoaPodsでインストールしたObjective-CのライブラリがSwiftで読み込めない


Bridging-Headerでimportしているのにも関わらず、CocoaPodsでインストールしたObjective-CのライブラリがSwiftで読み込めなかった。

BuildSettings→Search Paths→User Header Search PathsにPods/**を設定すると読み込むようになった。

![スクリーンショット 2015-07-27 17.57.14.png](https://qiita-image-store.s3.amazonaws.com/0/44218/cc581bbb-5b6a-3860-af31-9b094d42a939.png "スクリーンショット 2015-07-27 17.57.14.png")
Go の expvar パッケージを使ってアプリケーションのメトリクスを公開する


`expvar` パッケージは手軽にメトリクスを公開するのに使えて便利なのですが、複数の値を公開するための例があまり公開されてなくて分かりにくかったので書いておきます。

## expvar.Map を使う

`mychat` というチャットアプリを作ってると仮定して、送受信メッセージ数と、同時接続数を公開してみます。 `/debug/vars` を見た時に、次のような形でメトリクスを公開します。

```json
...
mychat: {
  "conns": 42,
  "msg_recv": 10480,
  "msg_sent": 88946
},
...
```

メトリクスのためだけにパッケージを作っておきましょう。

```go:src/mychat/metrics/metrics.go
package metrics

import (
	"expvar"
)

var (
	Map = expvar.NewMap("mychat") // expvar.NewXxx() は直接公開するメトリクスを作成する。

	Conns = new(expvar.Int)  // Map に入れる値などは expvar.NewInt() ではなく new(expvar.Int) で作る

	MessageRecv = new(expvar.Int)
	MessageSent = new(expvar.Int)
)

func init() {
	// init() で Map に 値を登録していく
	Map.Set("conns", Conns)
	Map.Set("msg_recv", MessageRecv)
	Map.Set("msg_sent", MessageSent)
}
```

## 値を更新する

metrics パッケージのグローバル変数として公開されている `*expvar.Int` 型を直接カウンタとして使います。

```go:src/mychat/handler.go
package mychat

import (
	"log"

	"mychat/metrics"
)

// ...

func (c *conn) readloop() {
	metrics.Conns.Add(1)
	defer metrics.Conns.Add(-1)
	for {
		msg, err := c.read()
		if err != nil {
			if err != io.EOF {
				log.Error(err)
			}
			break
		}

		metrics.MessageRecv.Add(1)
		c.handleMessage(msg)
	}
}

// ...
```

## まとめ

一番重要なのは、 expvar.NewInt(name) と new(expvar.Int) の違い (トップレベルで公開されるかどうか) です。

Go で `NewXxx()` という関数を見つけると `new(Xxx)` をしちゃいけない気がするかもしれませんが、実際には許されていて `NewXxx()` は汎用コンストラクタではなく特定用途向けという事が多いので、ちゃんとドキュメントを読むか、最悪ソースを読みましょう。 (一番いいのはドキュメントを読んだ上でソースコードを確認することです。)

実は今回の例は Int.Add しか使ってないので、 [Map.Add](http://golang.org/pkg/expvar/#Map.Add) を使うだけでも実現可能です。
しかしカウンタじゃなくて現在値を表す場合に `Map.Set` が `Int.Set` のラッパーではなく `Map.Set("rooms", len(room))` のような使い方はできません。

また、メトリクス名のリファクタリングや、 Map の入れ子構造をリファクタリングしたくなったときのことを考えると、この例のように独立したパッケージを用意して、メトリクス値ごとに変数を用意することをおすすめします。
入社一年目の新人とVaultを学ぶ。チュートリアル編②

#Vault 0.2 とは
Vault 0.2は、2015/07/14にリリースされたばかりの
非常に新しい機密情報管理ツールです。

思ったより長くなってしまったので2つに分けました。
以前の記事はこちらから→[入社一年目の新人とHashicorp社のVaultを学ぶ。チュートリアル編①](http://qiita.com/hikachan/items/bdd942bc8e05085576ec)

以下続きです。

#Step 6: Read and Write Secrets (Step 5がなぜか無い・・)

>Vaultの準備ができました。
これでデフォルトであるマウント済みのシークレットバックエンドで、
機密情報を読み込んだり、書き込んだりできます。

>Vaultに書き込まれた機密情報は暗号化され、バックエンドのストレージに書き込まれます。
バックエンドのストレージメカニズムは、複合化された値を見ることはなく、
Vault抜きで複合化する手段も持っていません。

書き込むコマンド：
```vault write secret/hello value=world```

実行結果
>Success! Data written to: secret/hello

読み込むコマンド：
```vault read secret/hello```

実行結果
>Key            	Value
lease_id       	secret/hello/*********
lease_duration 	2592000
lease_renewable	false
value          	world

lease というのが非常に気になる。
lease が切れると値が無効になるのだろうか・・

#Step 7: Seal your Vault

>これもまたVaultを閉じるAPIです。
これは現在の暗号キーを捨てることにより、データの復旧には、もう一度複合プロセスが必要になります。
Sealing はルート権限と1つの演算子しか必要としません。

>これにより、侵入が感知された際、Vaultデータを簡単にロックし、ダメージを最少にとどめることができます。
データのアクセスには、マスターキーの破片が必要不可欠です。

vaultを閉じるコマンド:
```vault seal```

実行結果:
>vault is now sealed

無事封印できたようです。

#Last Step: You're finished

>`fu`コマンドでフルスクリーン表示できます。
Vault CLIは HTTP APIを利用します。
これでvaultへのフルアクセスができます。
Vaultのすべての機能はAPIを通してコントロールすることができます。
次は[intro guide](https://vaultproject.io/intro/index.html)を読むと良いでしょう。
より多くの情報（ユースケース、サンプル等）を提供しています。

お疲れ様でした。
さすがにチュートリアルだけあって、
はまるところはなかったかと思います。

次はIntroduction to Vault ですかね？
RailsアプリケーションをCircleCI, Capistranoで自動デプロイ


Capistranoの設定
---

参考サイト
http://chroju89.hatenablog.jp/entry/2014/02/20/000348

1. Railsアプリケーションの作成
  RubyMineでRailsアプリケーションを新規作成。
  この時点でリポジトリ登録しといた。

2. Gemfile にcapistrano系を追加
  ※deploy先がrvmの場合、capistrano-rvmを入れる。

  ```ruby:Gemfile
  group :development do
      gem 'capistrano', '~> 3.1.0'
      gem 'capistrano-rails', '~> 1.0.0'
      gem 'capistrano-bundler', '~> 1.1.2'
      gem 'capistrano-rvm'
  end
  ```

3. bundle install

4. bundle exec cap install

5. Capfileの編集
  require 'capistrano/deploy' の下に追加

  ```ruby:Capfile
  require 'capistrano/rails'
  require 'capistrano/bundler'
  require 'capistrano/rvm'
  ```

6. config/deploy.rbの編集
  以下を編集、追記

  ```ruby:config/deploy.rb
  set :application, 'rails-cap'
  set :repo_url, 'git@github.com:nomuson/rails-cap.git'
  set :deploy_to, '/var/www/rails-cap'
  set :scm, :git
  ```

7. config/deploy/ 配下の設定ファイルを編集

8. 実行

  ```
  bundle exec cap production deploy
  ```

CircleCIの設定
---

参考サイト
http://qiita.com/ysk_1031/items/f584a0599791bdba132a

1. リポジトリを選択

2. アプリケーションにcircle.ymlを作成

3. deploy用のshファイルを作成

4. IAMユーザーの作成
  - circle_ci ユーザを作る
    https://console.aws.amazon.com/iam
  - ユーザーに権限を付与する

5. CircleCIにIAMユーザーのCredentialsを設定
  Project Settings -> [Permissions] AWS Permissions

6. CircleCIに対象サーバの秘密鍵を設定
  Project Settings -> [Permissions] SSH Permissions

※ 1Containerまで無料。2Containerから$50ずつ月額課金。