OmniAICreator/Qiita-1.07M huggingface dataset:
Node.js 実践講座 〜基礎編〜 その3

# はじめに
この記事では、標準ライブラリの使用方法の解説の一部をご紹介します。今回はurlとhttpによるHTTPリクエスト送信のサンプルプログラムを作成します。

# ワークスペースの作成

下記コマンドでプログラムを格納するディレクトリを新たに作成します。

```
mkdir workspace/js/basic/02-standard-library
mkdir workspace/js/basic/02-standard-library/02-url-and-http
touch workspace/js/basic/02-standard-library/02-url-and-http/index.js

cd workspace/js/basic/02-standard-library/02-url-and-http
```

または、

```
mkdir -p workspace/js/basic/02-standard-library/02-url-and-http
touch workspace/js/basic/02-standard-library/02-url-and-http/index.js

cd workspace/js/basic/02-standard-library/02-url-and-http
```

# url.parseによるURL解析

ソースコードの内容を下記に示します。

```index.js(ver.1)
'use strict';

var url = require('url')
var http = require('http')

if (require.main === module) {
  main({ argv: process.argv })
}

function main(options) {
  var argv = options.argv
  var href = argv[2]
  var target = url.parse(href)

  console.log(href)
  console.log(target)
}

```

下記コマンドを下記に示します。

```
node index.js http://google.com/
```

実行結果の例を下記に示します。

```
http://google.com/
Url {
  protocol: 'http:',
  slashes: true,
  auth: null,
  host: 'google.com',
  port: null,
  hostname: 'google.com',
  hash: null,
  search: null,
  query: null,
  pathname: '/',
  path: '/',
  href: 'http://google.com/' }

```

`url.parse`関数は文字列として与えられるURLを解析し、その結果を返します。

# HTTPリクエストの送信

ソースコードの編集後の内容を下記に示します。

```index.js(ver.2)
'use strict';

var url = require('url')
var http = require('http')

if (require.main === module) {
  main({ argv: process.argv })
}

function main(options) {
  var argv = options.argv
  var href = argv[2]
  var target = url.parse(href)

  var req = http.request(target, function (res) {
    console.log('success!')
  })

  req.end()
}

```

実行コマンドは同じです。

```コマンド
node index.js http://google.com/
```

予期される実行結果を下記に示します。

```実行結果
success!
```

`http.request`関数は第1引数として与えられるURLに対してHTTPリクエストを作成します。第2引数として与えられるコールバック関数はレスポンス受信時に呼び出されます。このコールバック関数の第1引数には`http.IncomingMessage`オブジェクトが与えられます。

`http.request`は戻り値として`http.ClientRequest`オブジェクトを返します。このRequestオブジェクトのendメソッドを呼び出すことでHTTPリクエストを送信することができます。

# 受信内容の表示

ソースコードの編集後の内容を下記に示します。

```index.js(ver.3)
'use strict';

var url = require('url')
var http = require('http')

if (require.main === module) {
  main({ argv: process.argv })
}

function main(options) {
  var argv = options.argv
  var href = argv[2]
  var target = url.parse(href)

  var req = http.request(target, function (res) {
    res.on('data', function (data) {
      console.log('data', data.toString())
    })

    res.on('end', function () {
      console.log('end')
    })
  })

  req.end()
}

```

実行コマンドは同じです。

```コマンド
node index.js http://google.com/
```

予期される実行結果を下記に示します。

```実行結果
data <html> ...
end
```

`http.IncomingMessage`オブジェクトは`EventEmitter`を継承しているので、`on`メソッドでイベントリスナーを登録することができます。`data`イベントはHTTPレスポンスボディ受信時に発行され、第1引数として受信内容が`Buffer`型で与えられます。`end`イベントはHTTPレスポンスボディ受信完了時に発行されます。

# おわりに
次回は、cryptoによるSHA-256ハッシュ値計のサンプルプログラムを作成します。
STRSQLのOFFSETのその後

[以前の投稿（DB2 for iでもLIMIT OFFSET）](http://qiita.com/ushiday/items/9cda3e6037b7b857f68a)で、STRSQLではOFFSETが使用出来ない事を書き、中途半端な投げかけで終わっておりましたが、その後の使用出来ない事が明確になった為、お伝えしておきます。
Knowledge Centerに記載があります。でも日本語だと今日現在、表示されません。機械的に翻訳していると思っていたので、表示されないのが意外だった。

こちらより→[offset-clause](http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_72/db2/rbafzoffset.htm?lang=en)

Notes
Allowed use of OFFSET: The offset-clause is only allowed as part of the outer fullselect of a DECLARE CURSOR statement or a prepared select-statement. **It is not supported in interactive SQL.**

対話式でもiナビはＯＫです。

DWでのやり取りは[こちら](https://www.ibm.com/developerworks/community/forums/html/topic?id=3734b11e-e4d0-4498-953a-b4a530053441)

●Knowledge Center英語と日本語での表示違い

![2015-12-08_112030.png](https://qiita-image-store.s3.amazonaws.com/0/100029/a9fa63aa-ccee-a122-27cb-a872c692ae97.png)

![2015-12-08_112058.png](https://qiita-image-store.s3.amazonaws.com/0/100029/f6f4b2f3-64ec-177e-87df-285e0e823dc5.png)

何れにしても、ＳＱＬＲＰＧでは使用できるのでご安心を。
2015-12-09 c++ builder > LiveBinding入門してみた

この記事は[Delphi Advent Calender 2015](http://qiita.com/advent-calendar/2015/delphi)の9日目の記事です。

山本さん、お疲れ様でした。
様々なバージョンの話とその時々の背景が面白かったです。

<hr>
LiveBindingという機能を知ってから３年近く、「気になる気になる」と思いながら他の興味のあるものばかりしてきました。

[しかしこれは裏を返せば，未完了の仕事は人の関心を奪い取る力があると考えることもできる。 @ Radium Software Developmentさん](http://www.radiumsoftware.com/0509.html#050913) にあるように、時々ふと思い出して関心を奪い取ってきたので、Advent Calenderを機にちょっと入門してみました。

以下のリンクとしてページを分けています。

実際に入門して、まだ良い使い方を見つけてません。
他の方の投稿など見ると、やはりLiveBindingが良い、との記載もあるようで、その良さがまだ分かっていない状態です。
org-mode でプレゼンのスライドを作る


org-mode でプレゼンのスライドを作る。HTMLスライドの中でも reveal.js が良さそう。自分の会社のブラウザはモダンじゃないものばかりだけど、PDFにも対応しているので問題無い。また会社のPCはWindowsなので、その対応も含めている。

ox-reveal を使用して実現してみた。

### 準備

プレゼンライブラリの reveal.js と org-mode ファイルを reveal.js 形式にする ox-reveal を用意する。

#### reveal.js のダウンロード
公式ページ、あるいはGithubのページからライブラリ一式をダウンロード。

- [Reveal.js HTML Presentations Made Easy(公式)](http://lab.hakim.se/reveal-js/)
- [hakimel/reveal.js Github)](https://github.com/hakimel/reveal.js/)

#### ox-reveal のインストール
```M-x package-install ox-reveal```

init.el に追加

```lisp
;; ox-reveal の読み込み
(load-library "ox-reveal")
```

### ox-reveal 使用方法

reveal.jsディレクトリは書き出し先に配置してある必要が有る。
org-mode ファイルを開いた状態で 

- ```C-c C-e R R``` でプレゼンファイル書き出し
- ```C-c C-e R B``` でプレゼンファイル書き出して開く


...と思いきや ```C-c C-e R B``` が効かない。
ファイルの書き出しはされるが、開くタイミングで下記のエラーが発生している。
```browse-url-default-windows-browser: ShellExecute failed: 指定されたファイルが見つかりません。```

どうやら ```./hoge.html``` というパスで開こうとしていて、
会社のWindows では ./ の解釈が出来ない様子。


### ox-reveal (on Windows) 問題点

- Windows でも```C-c C-e R B``` を動作させたい 
- reveal.js ディレクトリをいちいち配置するのが結構面倒

#### ox-reveal にモンキーパッチ
```lisp
(setq my-reveal-src-dir "/path/to/reveal.js-dir")

;; Windows だと C-c C-e R B でファイルを開くのに失敗するので,修正モンキーパッチ
;; ついでにエクスポート先に reveal.js ディレクトリが無ければ、ソースディレクトリからコピーする処理を追加
(defun org-reveal-export-to-html-and-browse
  (&optional async subtreep visible-only body-only ext-plist)
  "Export current buffer to a reveal.js and browse HTML file."
  (interactive)
  (let ((reveal-src-dir my-reveal-src-dir)
        (export-dir (file-name-directory buffer-file-name))
        (export-file (org-reveal-export-to-html async subtreep visible-only body-only ext-plist)))
    (unless (file-directory-p (concat export-dir "reveal.js"))
      (copy-directory reveal-src-dir export-dir))
    (browse-url-of-file (expand-file-name export-file))))
```   

### まとめ

Windowsで開くようになったし、いちいちreveal.jsの配置を意識しなくても良くなった。
これでプレゼン資料が捗る。
快適。
2015-12-09 c++ builder > LiveBinding > 3. 疑問点 > Form間のLiveBinding / 値の変換後での代入 / ソースのメンテナンス性

```txt:動作確認
C++ Builder XE4
```

c++ builder > LiveBinding入門してみた
http://qiita.com/7of9/items/72cd03dcaa999ed6ea85
<hr>

LiveBinding を入門する中で疑問点が出てきた。


## Q1. Form間でLiveBinding できないのか?

Unit1のTColorBoxからUnit2のTEditのColorプロパティを変更できないのか?

試しにプロジェクトを作ってみたが、Unit1のLiveBinding デザイナにおいて、Unit2のTEditを足す方法がよくわからない。


## Q2. 値を変換して代入できないのか?

値をそのまま代入するLiveBinding はできるが、

```math
y = fnc(x)
```
のような変換式を通した代入はできないのだろうか?

例えば、切片と傾きを考慮した以下の式を用いてLiveBindingしたい。

```math
y = ax + b
```

具体例としては、TrackBar1のpositionを使って、Label1のFontSizeを変更する、など。


## Q3. ソースのメンテナンス性はどうか?

同じ処理を以下の２つの方法で実装できる場合、どちらが今後メンテナンスしやすいか?

1. LiveBindingで実装
2. コードで実装

特に、振舞を読取る時にどちらがやりやすいだろうか。



IDEを開けばLiveBindingデザイナから振舞がわかりやすい。しかしながら、デザイン数が増えた時にみやすいかどうか。レイヤーというのはそのための機能なのか。

一方で、エディタ主体でコーディングする時、検索対象に.dfmファイルも含めることになる。

```Unit1.dfm
object BindingsList1: TBindingsList
    Methods = <>
    OutputConverters = <>
    Left = 20
    Top = 5
    object LinkControlToPropertyColor: TLinkControlToProperty
      Category = #12463#12452#12483#12463' '#12496#12452#12531#12487#12451#12531#12464
      Control = ColorBox1
      Track = True
      Component = Edit1
      ComponentProperty = 'Color'
    end
  end
```

同じ処理はソース実装では以下のようになる。

```
void __fastcall TForm1::ColorBox1Change(TObject *Sender)
{
	Edit1->Color = ColorBox1->Selected;
}
```

Edit1->Colorを変更しているものを検索するとき、エディタなりIDEなりの検索機能で検索した時、LiveBindingでは上記のControlの行からComponentPropertyの行まで(4行分)を見て分かる。

一方で、ソースでは`Edit1->Color = ColorBox1->Selected;`で読める。

「Edit1->Colorを変更するコンポーネントは何か」を調べたい時、コーディング実装の方が調べやすいかもしれない。
2015-12-09 c++ builder > LiveBinding > 2. 使用理由 > クライアント層のコーディングを減らす / グラフィカルな操作

```txt:動作確認
C++ Builder XE4
```
c++ builder > LiveBinding入門してみた
http://qiita.com/7of9/items/72cd03dcaa999ed6ea85
<hr>

LiveBinding の入門をする中で、この機能の使用理由について気になった。

色々調べた中で興味を引いたのが以下。


## クライアント層のコーディングを減らす

http://codezine.jp/article/detail/6771?p=2

> 特に最近では、Webサービス経由でデータを扱ったり、多層化してクライアント側で直接データベースのデータを扱わなかったりするような形態が増えてきており、上記のやり方が通用しなくなってきています。
...
そうすると、中間層では引き続きコンポーネントを使って効率化したとしても、クライアント層でUIとデータを結び付けるコーディングが増加してしまいます。ロジックまわりでなく、UIまわりの制御に膨大なコードを書くとなると、生産性低下に直結してしまいます。


データベースで多量のデータセットを扱う時にはUIの実装に対して便利なのかもしれない。


## グラフィカルな操作

以下ではバーの操作で色プロパティを変更している。

http://afsoft.jp/program/delxe3/p12_184.html

こういう処理は今後は自分に関係するかもしれない。

一方で、こういう処理はコードでも対応できるのではないかと思っている。
2015-12-09 c++ builder > LiveBinding > 1. 使用例と関連ファイルの中身

```txt:動作確認
C++ Builder XE4
```

c++ builder > LiveBinding入門してみた
http://qiita.com/7of9/items/72cd03dcaa999ed6ea85
<hr>

[チュートリアル @ XE8](http://docwiki.embarcadero.com/RADStudio/XE8/ja/%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB%EF%BC%9A%EF%BC%BBLiveBinding_%E3%83%87%E3%82%B6%E3%82%A4%E3%83%8A%EF%BC%BD%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%AB%E3%82%92%E3%83%AA%E3%83%B3%E3%82%AF%E3%81%99%E3%82%8B)

<!--
[チュートリアル @ appmethod](http://docwiki.appmethod.com/appmethod/1.16/topics/ja/%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB%EF%BC%9A%EF%BC%BBLiveBinding_%E3%83%87%E3%82%B6%E3%82%A4%E3%83%8A%EF%BC%BD%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%AB%E3%82%92%E3%83%AA%E3%83%B3%E3%82%AF%E3%81%99%E3%82%8B)
-->


##入門してみた

- フォーム : Form1
- ユニット : Unit1.cpp

1. Edit1, Label1, ColorBox1をForm1に追加
2. Form1上で右クリックで「ビジュアルにバインド」を選択
  - LiveBindingデザイナが開く

(この時に、Unit1.vlbファイルが以下の内容で生成された)

```
[Label1]
Coordinates=220,10,53,58

[ColorBox1]
Coordinates=127,10,74,58
Visible=True

[Edit1]
Coordinates=73,10,44,58

[]
Coordinates=175,1,91,36
```

次にLiveBindingデザイナで以下を行った。

1. Edit1の"..."を選択し、「バインド可能なメンバ」にて"Color"を選択
  - Edit1にColorが追加される
2. ColorBox1のSelectedからEdit1のColorへドラッグ
  - 両者のリンクが生成される

この段階でUnit.vlbファイルは以下のようになっている。

- Edit1に ExplicitSubNodes=Color が追加
- BindingsList1 が追加

```Unit1.vlb
[Label1]
Coordinates=360,10,53,58

[ColorBox1]
Coordinates=210,10,74,58
Visible=True

[Edit1]
Coordinates=73,10,44,80
ExplicitSubNodes=Color

[]
Coordinates=175,1,91,36

[BindingsList1]
Coordinates=136,87,91,36
```

また、Unit1.dfmに以下が追加されている。

```Unit1.dfm
  object BindingsList1: TBindingsList
    Methods = <>
    OutputConverters = <>
    Left = 20
    Top = 5
    object LinkControlToPropertyColor: TLinkControlToProperty
      Category = #12463#12452#12483#12463' '#12496#12452#12531#12487#12451#12531#12464
      Control = ColorBox1
      Track = True
      Component = Edit1
      ComponentProperty = 'Color'
    end
  end
```

Control = ColorBox1
Component = Edit1
ComponentProperty = Color
などからLiveBindingの動作が読み取れる。


実際にビルドして実行すると、ColorBox1を変更することで、Edit1の色を変更できる。

Label1に対しても同様にして色を変更できるようになる。
技術英語 > let’s now [do the numbers] here / trial calculation / outnumbered

@ LOE > August 3, 2012

http://loe.org/shows/shows.html?programID=12-P13-00031
>let’s now <font color=red>do the numbers</font> here. The first number that you have in your article here is two degrees Celsius.

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

<font color=red>trial calculation</font>
http://eow.alc.co.jp/search?q=trial+calculation&ref=sa

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

<font color=red>outnumbered</font>
http://eow.alc.co.jp/search?q=outnumbered

Star Trek Next GenerationでPicard艦長がウィル(またはウェスリー?)に語っていた戦いの話。敵の数が圧倒的に多い状況でうまく立ち回ったという話でoutnumberedが使われていた。

さらに関連したものはoutgunned.
CloudAtCostにRancherOSをインストール

# インストール

## 現在の設定確認

* CloudAtCost上のLinuxで作業。
* IPアドレス、デフォルトゲートウェイをメモっておく。
* [Releases · rancher/os · GitHub](https://github.com/rancher/os/releases)から`rancheros.iso`をダウンロード

```bash:
dd if=rancheros.iso of=/dev/sda bs=1M;sync;
```

* OS再起動させるとRancherOSが起動します。

## パーティション設定

```bash:パーティション
$ sudo fdisk -l /dev/sda

Disk /dev/sda: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x3c394a3d

Device     Boot   Start      End  Sectors  Size Id Type
/dev/sda1  *          0    59391    59392   29M 17 Hidden HPFS/NTFS
/dev/sda2         59392  1038335   978944  478M 82 Linux Swap
/dev/sda3       1038336 20971519 19933184  9.5G 83 Linux
```

```bash:/dev/sda2をext4でフォーマット
mkswap /dev/sda2
mkfs.ext4 -L RANCHER_STATE /dev/sda3
reboot
```

# IPアドレス設定

* [rancherio - RancherOSをCDブートで運用 - Qiita](http://qiita.com/tukiyo3/items/548d67b5aa5a308aac40#rancheros%E3%82%92cd%E3%83%96%E3%83%BC%E3%83%88%E3%81%A7%E9%81%8B%E7%94%A8)

```diff:/usr/share/ros/os-config.yml
   network:
     dns:
       nameservers: [8.8.8.8, 8.8.4.4]
     interfaces:
-      eth*:
-        dhcp: true
+      eth0:
+        address: 222.222.222.222/24
+        gateway: 222.222.222.221
```

* reboot

# debian-consoleに切り替え

```bash:
ros service enable debian-console
reboot
```

## swap自動マウント

```diff:/etc/rc.local
+ /sbin/swapon /dev/sda2
  exit 0
```

## sshd_config修正

```diff:/etc/ssh/sshd_config 
- #PasswordAuthentication yes
+ PasswordAuthentication no
```

## 状態確認(debian-console上)

```bash:ディスク
$ df -h 
Filesystem      Size  Used Avail Use% Mounted on
overlay         9.3G  438M  8.4G   5% /
devtmpfs        233M     0  233M   0% /dev
tmpfs           247M     0  247M   0% /sys/fs/cgroup
/dev/sda3       9.3G  438M  8.4G   5% /opt
none            247M  236K  247M   1% /run
shm              64M     0   64M   0% /dev/shm
```

```bash:メモリ
$ free -m
             total       used       free     shared    buffers     cached
Mem:           492        278        214        108         10        186
-/+ buffers/cache:         80        411
Swap:          477          0        477
```

## ファイアウォール(ufw)

```bash:
sudo apt-get install -y ufw
```

```diff:/etc/default/ufw
- IPV6=yes
+ IPV6=no
```

```bash:ファイアウォール設定
ufw default deny
ufw allow 22
ufw enable
```

```diff:/etc/rc.local
+ /usr/sbin/ufw enable
```

```bash:ファイアウォール状態
# ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing)
New profiles: skip

To                         Action      From
--                         ------      ----
22                         ALLOW IN    Anywhere
```
FileMaker14で追加されたボタンバー



[FileMaker Advent Calendar 2015](http://www.adventar.org/calendars/865)の9日目

# FileMaker14で追加されたボタンバー

## ボタンバーって？
> ボタンバーというレイアウトオブジェクトが導入されています。ボタンバーは、横または縦のバーにボタン、またはポップオーバーボタン（または両者の組合せ）を表示するためのレイアウトオブジェクトです。

こんなの
![151209-01.png](https://qiita-image-store.s3.amazonaws.com/0/89027/46dbfb3c-b60c-5a32-9d83-b0b8c974e6be.png)

要は複数のボタンを格納できるコンテナ
今まではひとつひとつボタンを作って[配置]－[グループ化]とかしていたやつです

詳しくは
[FileMaker Pro のボタンバーの概要](http://filemaker-jp.custhelp.com/app/answers/detail/a_id/14948/~/filemaker-pro-%E3%81%AE%E3%83%9C%E3%82%BF%E3%83%B3%E3%83%90%E3%83%BC%E3%81%AE%E6%A6%82%E8%A6%81)
を見てください


## ボタンバーの設定を見てみる
ボタンバーの設定を見てみると
![151209-02.png](https://qiita-image-store.s3.amazonaws.com/0/89027/7d7b26ed-707e-0a98-11a7-2476cc99c51d.png)
こんな感じ
とりあえずどんなことができるのか簡単にわかります

## ざっくり設定できる内容を挙げてみた
- ボタンを並べる方向
- ボタンの表示のさせ方(文字のみ、アイコンのみ、文字とアイコンの組み合わせ)
- ボタンバーに何個ボタンを並べるか
- 表示させるアイコンの選択
- アイコンの大きさ
- ボタンの種類の選択(ボタン、ポップオーバーボタン)
- ボタンが押された時の処理

## オリジナルのボタンも使えます
png形式、svg形式のアイコンを用意すれば使用できます
svg形式の方がベクターデータなので今後は主流になるかもしれないのと、最近ネット界隈でsvg形式の素材がたくさんあるので困らないかもしれません
アイコン一覧の下の[+]ボタンを押すと
![151209-03.png](https://qiita-image-store.s3.amazonaws.com/0/89027/c2774106-0fdc-0f8d-bfed-b3b216d72e0a.png)
となって
![151209-04.png](https://qiita-image-store.s3.amazonaws.com/0/89027/4264c232-fe13-44ba-b048-7214c29724a3.png)
こうなります

実際に置いてみると
![151209-05.png](https://qiita-image-store.s3.amazonaws.com/0/89027/beaa632c-1c8f-c30c-a181-c08d0e71de73.png)
こんな感じ
Icon made by [Freepik](http://www.freepik.com) from [www.flaticon.com](http://www.flaticon.com) is licensed under [CC BY 3.0](http://creativecommons.org/licenses/by/3.0/)

ボタンがひとつ入ったボタンバーを単なるボタンとして使ってもよいレベル

よさげなのが
> ボタンバーのセグメントのサイズは、ボタンバーのサイズ、および設定されているセグメント数に応じて変化します。つまり、単一のボタンバーのセグメントは、均等に配置され、見た目も統一されるということです。

ってこと
いちいち微妙に調整しなくてもよきにはからってくれそう

## こんな素晴らしいボタンバーなのに困ったこと
それは**みんながみんなFileMaker14を使っていない**こと

うちだけかもしれませんが、買い切りライセンスのユーザーさんが多くて未だ主戦場はFileMaker12かFileMaker13なのです
そうなると自ずとFileMaker12を使わざるをえない→せっかく追加されたボタンバーが使わせてもらえない
これは**大問題**です

UIコンポーネントに関してはバックポートをしてくれないのなら、いっそのことデータベースの互換性を切ってくれたらいいのに、などと黒い感情が湧いたりします

これが[FileMaker Advent Calendar 2015](http://www.adventar.org/calendars/865)の2日目の「FileMakerを仕事で使うならライセンス購入(年払い)で」につながる訳です
小型で安価なベアボーンPCによるNutanix Community Editionの作り方

# はじめに
この記事は[Nutanix Advent Calendar 2015](http://www.adventar.org/calendars/1124)の12月8日分として作成しました。
Nutanix Community Editionを試す時にネックになりがちなのが、システム要件を満たすマシンの調達です。

## 最小システム要件
- CPU: Intel製 物理4コア以上（2コア4スレッドだとNG、インストーラを誤魔化せばAMDも可）、Intel VT-x（商用版だとVT-dを使うがCEでは不要）
- Mem: 16GB以上
- Disk: SSD 200GB以上、HDD 500GB以上（両方SSDでもOK）
- NIC: Intel製（実際にはBroadcomやRealtekでも動くので現在はあまり問題にならない）

もちろんハイスペックなPCやサーバーを使えばいいのですが、お財布が痛かったり設置場所が問題なったりします。究極はクラウド版ですが、1時間あたり約1＄なので、ずーっと動かしっぱなしは辛い。

そこで、小さなベアボーンPCでCEを動かせないか画策してみました。結論としては成功。


# システム要件を満たすベアボーンPC探し
#### Intel
小さなベアボーンといえばIntel NUCですよね。
しかしスペックを確認してみると、高性能なCPUを積んだモデルでも2コア4スレッドなので残念ながらNG。

#### ASRock
変態的なことをしたいときに頼りになるのがASRockですよね！
実際探してみたら、いいものがありました！
###### Beebox N3150
![asrock.PNG](https://qiita-image-store.s3.amazonaws.com/0/76398/86c085f0-380b-cde6-d6f6-a76939ad965d.png)
Intel N3150というのはモバイル向けであるBraswell世代のCeleronなのですが、物理4コアなんです。Intel VT-xも有効。NUCサイズのベアボーンの場合、モバイル版のCore i5等だと逆に2コア4スレッドだったりすることが多いです。）
また、Intel的にはメモリ8GBまでなのですが、ASRockさんは16GBまでのサポート！
サポートしてない容量でも実際は動く、というのはよくある話ですが公式に書いてあるのは嬉しい。
価格としても￥22,000くらいから手に入りますのでお手頃です。

## その他のパーツ集め
ベアボーンPCを使えば、CPU・NICは揃いました。
あとはメモリ、SSD・HDD、あと忘れてはいけないのがCEのイメージを入れるUSBメモリ。

#### メモリ
BeeboxはSO-DIMM スロット×2なので8GBを2枚使います。
DDR3L 1600MHzに対応と書いてあります。(=PC3L-12800)
通常のDDR3は1.5Vですが、DDR3Lは1.35Vの低電圧版です。
パッケージにDDR3と書いてあっても、動作電圧が1.35Vに対応しているという表記があればおそらく大丈夫。

#### SSD&HDD
Beebox非常に小さな筐体サイズのため、2.5インチスロットは1つしかありませんが、mSATAスロットがあります。なので
- mSATAスロット：200GB以上のSSD
- 2.5インチスロット：500GB以上のHDDまたはSSD
という組み合わせで搭載しましょう。

### USBメモリ
Nutanix CEのイメージを書き込むには8GB以上の容量が必要です。
NUCから大きなUSBメモリが飛び出しているのは残念なので、小さいものを選ぶと見栄えは良いかと思います。私はBuffaloのを使ってます。
http://buffalo.jp/product/usb-memory/design/ruf3-ps/
差し込むUSBポートによって起動デバイスとして認識しなかったりするので注意。私の構成では背面下側に指して動作してます。

# 組み立てた
出張先のビジネスホテルで組み立てました…。
![beebox-boot.jpg](https://qiita-image-store.s3.amazonaws.com/0/76398/78e4a2a7-6d68-2797-0cc3-e91ee7ede6f9.jpeg)

ちゃんと動きました！ただしCPUクロックがMaxで2.08GHzなので遅いです。
また、メモリが16GB構成だとCVMに12GB持っていかれるので、あまりゲストOSを動かせません。
Nutanixの画面を見てみたいとか、勉強してみたいとか、そういう用途に限られますね。

# おわりに

部品さえ集められれば、Nutanix CEを動かすのは全く難しくないので、ぜひトライしてみてください。
今回ご紹介した構成は、6万円ぐらいで作れました。ほとんどメモリとSSDの値段。
高性能ものだとベアボーンだけでそれぐらいの値段になったりするので…。

また、サイズが気にならない方は、ヤフオク等で古めのワークステーションやサーバーのほうが、CPUやメモリ容量の点で幸せかもしれません。結局のところ、単に私が「CEをNUCサイズのPCで動かしたかった」というだけです。

余談ですが、Beeboxには別件で制作したNutanixシールがピッタリの大きさでした。
シールが欲しい方はぜひお声掛けくださいませ。（だいたいいつも何枚か持ち歩いてます）
![beebox.jpg](https://qiita-image-store.s3.amazonaws.com/0/76398/cc4db238-56ce-b591-cde0-f354674d8561.jpeg)
paiza POH kirishima #paizahack_lite (Swift)


|問題|https://paiza.jp/poh/kirishima|
|:--|:--|
|C/Go/C#/VB/JavaScript|http://qiita.com/cielavenir/items/aad18ccc8463e77a1c87|
|Java/CoffeeScript/Ruby/PHP/Python|http://qiita.com/cielavenir/items/d07e62d1dc61c2915003|
|Perl/Scala/F#/D|http://qiita.com/cielavenir/items/0b338f5c1b2e57ed915e|
|最速解答|http://qiita.com/cielavenir/items/2afc31eb9718e3170755|
|Swift|http://qiita.com/cielavenir/items/16440e1e3713a41a3830|

とりあえず、0.05s/0.22sという記録を出すことができた。
https://paiza.jp/poh/kirishima/result/1a27ff7a
以下がコードである。

```swift:paizapoh3.swift
//usr/bin/env xcrun swift $0 $@;exit

//let M=getInt(),N=getInt()
let M=Int(readLine()!)!,N=Int(readLine()!)!
var num=[Int](count:N,repeatedValue:0)
var cost=[Int](count:N,repeatedValue:0)
var total=0
var i=0,j=0

for j=0;j<N;++j {
	let a=readLine()!.characters.split{$0==" "}
	//let q=getInt()
	//let r=getInt()
	let q=Int(String(a[0]))!
	let r=Int(String(a[1]))!
	total+=q
	num[j]=q
	cost[j]=r
}
var bag=[Int](count:total+1,repeatedValue:0)
for i=1;i<=total;++i {bag[i] = -1}
var t=0
for j=0;j<N;++j {
	t+=num[j]
	for i=t;i>=num[j];--i {
		if bag[i-num[j]]>=0 {
			let x=bag[i-num[j]]+cost[j]
			if bag[i]<0||bag[i]>x {
				bag[i]=x
			}
		}
	}
}
j = -1
for i=M;i<=total;++i { if j<0||(bag[i]>=0&&j>bag[i]) {j=bag[i]}}
print(j)
```

しかし。`let x=bag[i-num[j]]+cost[j]`を変数にキャッシュせず展開するとTLEになる。
https://paiza.jp/poh/kirishima/result/2523d778
0.05秒 vs 3.00秒以上、である。60倍以上もの差。もはやSwiftの構文木のバグであるとしか思えない。とても怖い。
Lightning Componet でページ遷移する〜LightningRouter の提案〜

# Lightning Component のページ遷移の問題点

Lightning Component は「 Single-Page-Application (SPA) を構築できるフレームワークだ！」なんて触れ込みもありましたが、実のところ1ページ内でViewを切り替えるための Router をライブラリに持っていません。
また、ページ内でのView切替するための仕組みもなく、以前紹介し唯一の可能性であった [navigateToComponent()](http://qiita.com/a_kuratani/items/958b942afc794f7916f5) もお蔵入りになってしまっています。

つまり、Lightning Component のページ遷移を考えたときによい解決策がない状態でした。

# LightningRouter の提案

実は、Winter'16 で [aura:locationChange](https://developer.salesforce.com/docs/atlas.ja-jp.lightning.meta/lightning/ref_aura_locationChange.htm) イベントが追加されました。このイベントは、URLのクエリー文字列やハッシュが変更されたタイミングで発火するものです。この機能追加によって、待望の Router 機能を実装できるようになりましたので、Lightning Component を実現する LightningRouter コンポーネントをサンプル実装してみました。

## サンプル実装
ルーティングを処理するコンポーネントのサンプル実装です。
初期表示するコンポーネント、ルーティング情報を属性として与えられることで、動作するようになっています。ルーティング処理自体は、locationが変化した際に発生するイベントを受け取り、ルーティング情報に従って{v.body}に表示するコンポーネントを切り替えているだけで単純なものです。

```xml:src/aura/LightningRouter/LightningRouter.cmp
<aura:component>
  <aura:handler event="aura:locationChange" action="{!c.render}" />
  <aura:handler event="init" action="{!c.render}" />
  <aura:attribute name="init" type="String" access="global" />
  <aura:attribute name="route" type="String" access="global" />

  {!v.body}
</aura:component>
```

```js:src/aura/LightningRouter/LightningRouterController.js
({
  render : function (component, event, helper) {
    var token = event.getParam("token");
    var querystring = event.getParam("querystring");

    var route = JSON.parse(component.get("v.route"));
    if($A.util.isUndefined(token)) {
      token = component.get("v.init");
    }
    var cmpName = route[token];

    $A.createComponent(
      "c:" + cmpName,
      {
        "aura:Id": cmpName,
      },
      function(newCmp){
        if (component.isValid()) {
          var body = component.get("v.body");
          body.pop();
          body.push(newCmp);
          component.set("v.body", body);
        }
      }
    );
  }
})
```

## 利用方法
下記のように呼び出します。init 属性には初期表示する Lightning Component、route 属性には、ハッシュとそのハッシュがセットされた場合に表示する Lightning Component をJSON(連想配列)で記述します。

```xml:src/aura/LightningRouterApp/LightningRouterApp.app
<aura:application>
    <c:LightningRouter
        init="Sample1"
        route='{
            "Sample1" : "Sample1Cmp",
            "Sample2" : "Sample2Cmp"
        }'
    />
</aura:application>
```

あとは、ページとして表示する Lightning Component を用意し、下記のようにアンカータグでハッシュを呼び出せば、表示する Lightning Component を切り替えてページ遷移します。

```xml:src/aura/Sample1Cmp/Sample1Cmp.cmp
<aura:component>
  <div>
    Hello, Sample1!
    <a href="#Sample2">Sample2</a>
  </div>
</aura:component>
```

```xml:src/aura/Sample2Cmp/Sample2Cmp.cmp
<aura:component>
  <div>
    Hello, Sample2!
    <a href="#Sample1">Sample1</a>
  </div>
</aura:component>
```

## GitHubリポジトリ
サンプルソースコードについては、ここで公開しています。
https://github.com/kuratani/LightningRouter

# おわりに
以上のように、 Winter'16 で追加になったイベントを用いて、これまで Lightning Component になかった Router機能を実装しました。今回実装したものは、単純に Lightning Component を切り替えるシンプルな実装となっています。
実際に製品開発などで利用する場合は、~~Salesforce1で動作するように修正する、~~ページ遷移時のアニメーションを追加する、など必要に応じて拡張していく必要があります。
Arch Linux のライブ起動イメージに入っているパッケージ (2015年12月版)

この記事では、Arch Linux のインストールだけでなく、日常の PC レスキュー全般にも大変便利な Arch Linux のインストールメディアに入っているパッケージについて紹介してみたいと思います。

なお、この記事では Arch Linux のインストール方法については一切触れません。それについては[公式 Wiki の日本語版](https://wiki.archlinuxjp.org/index.php/)に大変詳しく書かれているのでそれを参照してください。

# インストールメディアに入っているパッケージ

Arch Linux のインストールメディアは最新のもので 650MB 程度と、この手の存在では容量が少ない方ではないでしょうか。

デフォルトの状態で入っているパッケージを適当にかいつまんで紹介してみます。最新の一覧は [archiso (Arch Linux のライブイメージ生成システム) の git repo](https://projects.archlinux.org/archiso.git/tree/configs/releng/packages.both) とかで確認できます。

## ディスク・ストレージ・ファイルシステム系

- `btrfs-progs`, `dosfstools`, `f2fs-tools`, `nfs-utils` `nilfs-utils`, `ntfs-3g` (ファイルシステム固有のパッケージ)
- `clonezilla`, `ddrescue`, `fsarchiver`, `partclone`, `partimage` (ハードディスク・パーティションのサルベージなど)
- `dmraid`
- `gptfdisk`, `parted` (いわゆる `fdisk`, `gdisk` と `parted`)
- `testdisk` (壊れたディスクからなんとかしてデータを引っ張りだすやつ)
- `smartmontools` (ディスクの S.M.A.R.T. 値を見たりするやつ)

## ネットワーク系

- `darkhttpd` (軽量 HTTP サーバ)
- `dhclient`
- `dnsmasq`
- `dnsutils` (`dig(1)` とか)
- `elinks` (Web ブラウザ)
- `irssi` (IRC クライアント)
- `lftp` (FTP クライアント)
- `nmap` (高機能ポートスキャナ)
- `ppp`, `rp-pppoe`
- `tcpdump`
- `openvpn`, `vpnc`
- `openssh`
- `wget`
- `wireless_tools`, `wpa_actiond` (無線 LAN 関連)
- `wvdial` (モデム操作など)

## その他

- `rsync`
- `vim-minimal` (vi じゃなくて Vim です)

こんなところでしょうか。実は Web ブラウザも入っているので、インストールメディアがあるだけでほとんどのことが出来てしまうということがお分かりいただけたと思います。

また、インターネットに接続できる環境なら、以下の様な手順を踏むことで新たにライブ環境上にパッケージを追加することも当然可能です。

```
# pacman -Syy # パッケージデータベースが存在しないので強制取得
# pacman -S emacs-nox gauche # ここに並べる
```

# 余談: Arch Linux のインストールメディアのつくりかた

Arch Linux のインストールメディアは、archiso というツールで生成されています。

archiso では、おおまかに

- chroot して
- シェルスクリプトを実行して rootfs を作って
- Squashfs にして
- イメージを固める

というようなことをやっています。

イメージのプロビジョニング自体はすべてシェルスクリプトで制御されているので、それを適当に書き換えれば、好きなようにカスタマイズしたオリジナルな Arch Linux インストールメディアを作れます。

このアドベントカレンダーの3日目の記事のように iso ファイルから Squashfs を引っ張りだして編集することもできます (参照: [Arch Linux インストールCDリマスター](http://qiita.com/tukiyo3/items/5f55484f955b8a785b4d))。
100MB越えの巨大SDKをCocoaPodsで扱う

こちらは [iOS Second Stage Advent Calendar 2015](http://qiita.com/advent-calendar/2015/ios-2) の12/9の記事です。

こんにちは。 @shobyshoby です。

皆さん、100MB越えの巨大なSDK[^1]をiOSアプリに組み込もうとして困ったことはありませんか？
私はあります。

100MB越えのファイルは[GitHubに置けない](https://help.github.com/articles/working-with-large-files/)ため、frameworkを導入するだけで一苦労でした。
その知見をお伝えします。

# 背景
* ビルド済みのframeworkのみが配布されているタイプのSDK
* frameworkが単体で100MBを超えている

ビルド済みのframeworkのみが配布されているSDKを導入する場合、
専用のリポジトリにframeworkを置いてpodspecを書くか、プロジェクトのリポジトリに含めてしまうか、どちらかの手段をよく使うと思います。

ただし、単体で100MBを超えている場合、そもそもGitHubにPushできなくなってしまうため、どちらの方法も取ることができません。

# 解決策
S3にzipで圧縮したframeworkを置き、CocoaPodsの機能を使って取得することで解決しました。

podspecではsourceにzipファイルを指定することができます。
https://guides.cocoapods.org/syntax/podspec.html#source

そのため、以下のようなpodspecを記述することで、GitHubにファイルを上げなくても済みます。

```json
{
    "source": {
        "http": "https://~~~~/LargeSDK.zip"
    },
    "vendored_frameworks": [
        "LargeSDK/LargeSDK.framework"
    ],
    "public_header_files": "LargeSDK/LargeSDK.framework/Versions/A/Headers/*.h",
    "resources": "LargeSDK/LargeSDK.framework/Versions/A/Resources/LargeSDK.bundle"
}
```

# まとめ
100MB越えのファイルはGitHubに置けないため、S3にzipファイルを置き、それを参照するようなpodspecを書くと解決できます。

# 補足（余談）
[Git Large File Storage](https://git-lfs.github.com/)も検証したのですが、以下の点を考慮してS3を選びました。

* CocoaPodsがGit LFSに対応していないため、SDKをプロジェクトのリポジトリに含める必要がある
 * Podsディレクトリでキャッシュできないため、CIで回すたびに巨大なファイルがfetchされてしまう
* 全iOSエンジニアにGit LFSクライアントの導入を強制する必要がある
* Git LFSがS3と比べて割高
* frameworkの差分は管理する必要がない

Git LFSはまだまだこれからな気がしています。


[^1]: [Adobe Creative SDK](https://creativesdk.adobe.com/)というSDKが100MBを超えていました
課題管理ツールのコメントに想いを残す


コミュニケーションアドベントカレンダー9日目の記事です。

課題管理ツールのコメントについて自分の中で守っているルールがあるのでそれを共有したいと思います。

## 自分ではない誰かが、いつか見る事を想定する

[mironalさん](http://qiita.com/mironal)の投稿、『[issue を雑に作らないために](http://qiita.com/mironal/items/735c2c3bb658eba2f7d2)』の

>どの画面での遷移アニメーションだよ！
そもそも遷移アニメーションってなんだよ！
再現手順は？
どのバージョンで発生するの？
バグならバグってラベル付けて！
誰かにアサインしようよ！
誰もこれ見て状況を把握できねぇよ！！！

にあるように課題管理ツールのコメントは **自分ではない誰かが、いつか見る事** を想定して書くべきです。

## よく見る悪い例

チケットのステータスだけが変わりクローズされたチケット(かなり極端に悪い例ですが)

![スクリーンショット 2015-12-09 0.40.49.png](https://qiita-image-store.s3.amazonaws.com/0/56178/11498023-07a8-7231-6e29-083d9b5ad891.png "スクリーンショット 2015-12-09 0.40.49.png")

おそらく実際に開発していた担当者は何かの方針のもとに進めていると思われるが、あとから第三者がみた時には何があったかはわからない状態。

## コメントには想いを残す

**自分ではない誰かが、いつか見る事** を想定して私はコメントに **想い** を書くようにしています。

ここで言う **想い** とは **どうしてそのように結論づけたのか** ということを言葉にしたものになります。

例えば

- モジュール間を疎結合にするためにwrapperを作るべきだが納期的に厳しいので直接呼び出す実装にした
- APIのパラメータの必須/任意が不明だったのでお客様に確認したところ任意だったことがわかった
- このチケットではひとまず動くための実装しかしていない

などです。

**想い** が書いてあることで、その時にその人がどう考えて進めたかをコメントから知ることができます。

## 何故みんな書かないのか？

`A. 面倒くさいから`

おそらく書かない人のほとんどが面倒くさいからと感じているのではないでしょうか。
つまり 面倒くささ > メリット となっているのです。


## 想いが役に立つ時(メリット)

チケットを後から見るタイミング = **不具合発生時**


チケットを後から見るタイミングは往々にして不具合が起きた時が多いと思います。
その際に『よく見る悪い例』のようなコメントが空っぽのチケットだと情報が何も得られず一から調査しなければなりません。

例えばこのチケットに

```
loginのAPIはサーバの仕様がまだ未確定な部分があるため変わる可能性があるが進捗を進めるために2015/XX/XX現在の仕様で実装している
```

のようなコメントが書かれていれば、APIの仕様が変わったのかもしれないというあたりをつけることができます。

## まとめ

- 課題管理のコメントは **自分ではない誰かが、いつか見る事** を想定しよう
- コメントには **想い** を残してあげよう
- 面倒と思わずに長い目で開発していこう

開発は一人で進める事の方が少ないと思います。
なので常に自分以外の人のことを意識してあげると開発がスムーズになると思います。

ただあくまで **想い** は課題管理ツールのコメントに必要な一要素であり、それだけではまだ不足かと思います。
先ほど引用させて頂いた[mironalさん](http://qiita.com/mironal)の投稿、『[issue を雑に作らないために](http://qiita.com/mironal/items/735c2c3bb658eba2f7d2)』のこの辺りのツッコミでもあるように、チケットに書かなければいけないことはたくさんあります。
>どの画面での遷移アニメーションだよ！
そもそも遷移アニメーションってなんだよ！
再現手順は？
どのバージョンで発生するの？
バグならバグってラベル付けて！
誰かにアサインしようよ！
誰もこれ見て状況を把握できねぇよ！！！

その辺はまた記事にしたいと思います。
Android Studio 2.0 をためしてみる

# はじめに
Android Studio 2.0 Previewの気になる機能
**"Instant Run"**
を試してみました

# まずはダウンロード
http://tools.android.com/download/studio/builds/2-0-preview
から落としてきたzipを適当なところに解凍

# ビルドツールとかアプデ
Preference開くと**"Instant Run"**って項目があります
**"Update Project"**ってボタンがあるので押します
![スクリーンショット 2015-12-09 1.08.22.png](https://qiita-image-store.s3.amazonaws.com/0/4873/9438f900-c35a-2814-644d-fa3841ce7e52.png)


そうするといくつかファイルが更新されます
全部は確認してませんが

```java:app/build.gradle
buildToolsVersion '23.0.2' // 元は22.01
```
になってました

# 実行
通常のビルドと同じくRunします
そうするといつもの緑の▲ボタンの横に変なマークが出てました
![スクリーンショット 2015-12-09 0.33.07.png](https://qiita-image-store.s3.amazonaws.com/0/4873/7289d598-07bb-3727-afc6-0ba5ab64fb98.png)

この状態で何か更新（ためしにstring.xmlでも）して
再度▲ボタン押してみると

数秒で画面がアプリの画面がリフレッシュして
![device-2015-12-09-010619.png](https://qiita-image-store.s3.amazonaws.com/0/4873/0fb50e96-b2c6-23f4-fa09-eef726c2e721.png)

トーストが出て
最初のActivityすっとばして起動中のActivityが表示されました
先ほどの変更もちゃんと反映されてます

一応インストールログも

```text:log
# 最初の起動
DEVICE SHELL COMMAND: pm install -r "/data/local/tmp/{PACKAGE NAME}
DEVICE SHELL COMMAND: am start  -n “{ACTIVITY NAME}“ -a android.intent.action.MAIN -c android.intent.category.LAUNCHER

# 修正後の再起動
Client not ready yet..01:06:12: Incrementally updating app on the following device: {DEVICE NAME}
Incremental update complete.
```

ちゃんとIncremental updateって出てますね〜

# まとめ
最初のビルドは若干早く感じました
修正後の再ビルドの際はビルドも起動もとにかく早かったです
どの修正まで適用してくれるのかドキュメントと照らし合わせて気になるところですが
レイアウトの変更で再インストールするあの手間を考えると爆速な気がします
これは早く安定版欲しい
Java8を使い始めてよく書いたラムダ式


10月末からJava8を使い始めたのでよく書いた/レビューしたラムダ式をまとめる。他にもあったかもしれない

ラムダ対象にするクラス

```MasterData.java
import lombok.AllArgsConstructor;
import lombok.Data;

import java.util.Date;

@Data
@AllArgsConstructor
class MasterData {
    private int id;
    private String name;
    private Date start;
    private Date end;
    private int sort;
}
```

### 条件でフィルタ

```java
long now = new Date().getTime();
List<MasterData> filtered = list.stream()
        .filter(masterData -> masterData.getEnd().getTime() > now)
        .collect(Collectors.toList());
```

### 最初の1件取得

```java
MasterData findOne = list.stream()
        .filter(masterData -> masterData.getId() % 2 == 0)
        .findFirst().get();
```

### ソート

```java
List<MasterData> sorted = list.stream()
        .sorted(Comparator.comparing(MasterData::getSort))
        .collect(Collectors.toList());

```

### 特定のプロパティだけ抜き取る

```java
List<String> names = list.stream()
        .map(MasterData::getName)
        .collect(Collectors.toList());
```

### 最大を求める

```java
MasterData max = list.stream()
        .max(Comparator.comparing(MasterData::getSort))
        .get();
```
Express4でPUTとDELETEを受け取る

# Express4でPUTとDELETEを受け取る

##VIEW側

```jade
form(method="post", action="users/#{id}")
  input(type="hidden", name="_method", value="PUT or DELETE")
  input(type="submit", value="Update")
```
formタグのmethod属性はPUT,DELETEに対応していないのでform内にhidden要素を２行目の様に書く。

##middlware側
予め以下をプロジェクトディレクトリにインストールしておく

```bash
$ npm install --save method-override
$ npm install --save body-parser
```

インストールしたら`app.coffee`に以下を追記する。

```coffeescript:app.coffee
methodOverrive = require 'method-override'
bodyParser = require 'body-parser'

app.use bodyParser.json()
app.use bodyParser.urlencoded extended: false
app.use methodOverride (req, res) ->
  if req.body? and typeof req.body is 'object' and `'_method' in req.body`
    method = req.body._method
    delete req.body._methodn 
    return method

app.put 'users/:id([0-9]+)', (req, res) ->
  console.log 'PUT'

app.delete 'users/:id([0-9]+)', (req, res) ->
  console.log 'DELETE'
```

coffeescriptだと`'_method' in req.body`で判定できなくて結構嵌った。
たぶんcoffeeのコンパイラはfor文内のinだと勘違いしてるっぽい？
なのでそこだけ\` \`で囲んで生のjavascriptを書き込んでる。

これでPUTもDELETEもルーティング出来た！

時代のトレンドはES6みたいだけど、正直まだまだcoffeeのほうが高機能じゃね？と思ってcoffeeを使い続ける。
ソシャゲエンジニアが機能開発で気をつけるべき5つのこと

本記事は[マイネット Advent Calendar](http://qiita.com/advent-calendar/2015/mynet) 9日目の記事です。

[3日目](http://do7be.hatenablog.com/entry/2015/12/03/000000)も書きましたがエンジニアの@do7beです。

業務ではソーシャルゲームの運営を担当しています。インフラからバックエンドからフロントまでほぼ全てを扱っています。運営と言うと定常イベントをまわすだけに聞こえるかもしれませんが、実際は月に3~5程度の機能開発も行っています。我流ではありますが、今回はその経験で得られた機能開発において気をつけるべき5つのことについてお話していきたいと思います。

## 1. 定常コストを限りなくゼロに

ソーシャルゲームの特徴として、月に決まったイベントが数個開催されるというものがあります。基本的にこれを定常イベントと呼び、どのタイトルでも定常イベントの準備が運営メンバーの業務の主軸となっています。この定常イベントというものが厄介で、今月のイベントの準備を終えても来月、再来月と毎月毎月行わなければなりません。ここで毎回ソースコードを修正しなくてはならない運用は避けるべきで、全てDBにマスタデータを入稿することでイベントの準備が完了するようにすべきです。

**気をつけるべき点**

* VIEWに今月のイベント特有のテキストを書かない
* 定数に今月のイベント特有のIDを代入しない
* DBにデータを入稿することでイベント準備が済むようにする

## 2. パフォーマンス無視は未来の自分を殺す

機能開発の中には、カードに対して新しい軸のパラメータを実装する、などの要件があります。ここで参照系の処理のパフォーマンスに気をつけないと恐ろしいことになります。なぜなら、カードを数百枚持てるゲームから数千枚持てるゲームまであるので、多少の計算量だったはずが、1画面表示するのに30秒かかってしまうなどの問題が発生したりします。

**気をつけるべき点**

* N+1クエリを極力作らない
* スキップ系条件分岐前で関係ないクエリを発行しない
* どうしてもクエリが重い場合はKVSを用いる

## 3. ログには調査に必要なものを

障害時やユーザ側操作ミスによってお問い合わせが来ることがあります。この度にDBにSELECTを発行して調査していると、調査手順が煩雑になったりわかりづらかったりするのであまりよろしくありません。また、エラーログも重要で、アラートが頻繁に発生した際にどのデータが問題なのか、誰がどのタイミングでどの画面にアクセスした際に発生しているのかを探るための情報が必要です。

**気をつけるべき点**

* 正常ログにはどこまで処理が終わったか、どんなデータを用いたかを残しておく
* エラーログには誰がどんなデータでどのアクションを行ったか残しておく
* ログは機能種別ごとに出力する

## 4. 本質的なテストを書こう

**動くものが正義**とおっしゃる方もいるかと思いますし、実際動かないものより動くもののほうが正しいとは思います。が、機能開発時はいいとして、問題は改修時です。例えば返却データの修正、チューニング、リファクタリングなどを行った際に、開発時と同様に隅から隅まで検証する必要があるでしょうか？検証する必要があるとしたら、確認が大変なのにリファクタリングなどを行いたいと思うでしょうか？こういった背景から、テストを動かすことで動作の担保がとれることに重要性が生まれてきます。長年運用するサービスだからこそ、より良くしていくためにもテストは必要です。特に、機能の本質的な要素を満たしているテストが必要です。

**気をつけるべき点**

* 機能の本質的な動作を満たすこと（データの加工・DBインサートなど）
* 様々なデータインプットに対応したアウトプットを予期する


## 5. データ参照・操作系ツールは必ず用意

ソシャゲ業界では、エンジニアがいちいちDBにSELECTクエリを発行してマスタデータを確認したりする、なんてことをしないためにDB参照用のツールを用意しているタイトルがほとんどかと思います。ここで、マスタデータのみならずユーザに紐づくデータの確認機能を設けることもあります。これは障害時・調査対応時などに特に役立ちます。チームには非エンジニアも多く配属されており、基本的に誰でもデータ参照を行うことが出来る環境にすることでチームの連携が取れ、チーム全体の効率が向上することになります。こういった背景から参照ツールは確保しておくべきです。

また、「間違えてゲーム内ショップでアイテムを購入してしまった。返却してほしい」などのお問い合わせに対応する際に、DBにUPDATE文をそのまま叩こうとすると、手順ミスでスレーブを更新してしまったり、作業手順が煩雑になるなどの問題が発生します。なので、機能開発時は必ず関係するデータ更新系のスクリプトを用意しましょう。ここで肝心なのが、「ゲーム内コードを動作させてデータを更新する」ことです。これにより、データ更新漏れなどの余計な障害を起こさずに済みます。

**気をつけるべき点**

* データ参照ツールは必ず用意
* データ更新系スクリプトは必ずゲーム内コードを動作させること


## まとめ

私がソーシャルゲームの運営を行ってきた中で得た教訓や先人の知恵などをまとめてみましたがどうだったでしょうか。まだまだ気をつけるべきことはたくさんあるとは思いますが、とりあえず今回の5つのことを気をつけることで、ゲーム運営においてより良いエンジニアリングが行えることを願っております。
もう一つのREPL


------------------------------------------------------------------------------------------------
この記事は、[2015 Clojure Advent Calender](http://qiita.com/advent-calendar/2015/clojure) の17日目の記事です。

去年にひきつづき Advent Calenderので苦戦してしまった。今回は、当初の予定は間に合わず、ちょっと
頭をよぎったREPLについて書くことにしました。しかも、遅刻。

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

## 運用中のシステムのREPLにアクセスする
最近「REPL駆動開発」なんていう言葉も出てきて、REPLが一般的になりつつあります。
clojureで開発をするときにREPLを使うというのは普通のことですし、僕の場合、ちょっとしたデータの解析をするとか、Project Eulerを解くとか、そんなときはjarにせずに、REPLで結果を出してしまってそれで終りということもよくあります。

さて、そんな便利なREPLですが、たいていの場合は開発時にしか使っていないだろうと思います。
ところが、Lisp界隈には運用中のシステムに直接接続してそれを書き換えてしまうという文化があります。そしてその入口もREPLです。 clojureもLispの一員ですので、同じことができます。
運用中のシステムにREPLで接続して、開発中と同じように、新しい関数を定義したり、再定義したり、Varを追加したりなどいろいろなことができて、それが、すぐさま環境に反映されて利用することができるわけです。

たとえば、僕は、職場の開発チーム用にちょっとした便利ツールをWeb経由で提供しているのですが、運用しているWebサーバーは別チーム管理なので、あまり頻繁に差し替えとかお願いしにくかったりします。
ですが、REPLを組み込んであるので、機能変更や追加などはちょいとREPLにつないでうらうらっとやってしまうのです。 また、DBのメンテナンスなども、わざわざそのためのWebインターフェースを書くのも面倒だったりするので、REPLから直接やってしまいます。
だだ、運用しているイメージの上だけの変更ですので、サーバーがリスタートしたりなどすると、その変更は消えてしまうので、イメージを書き換えておくことは必要ですけどね。

また、1.8の新しい機能に、[socket server](http://clojure.org/repl_and_main)があります。用途はいろいろありそうですが、REPLに使うのが一般的でしょう。 言語の基本機能として、ソケットがサポートされたことで、便利になるかもしれませんね。(今でもたいして面倒ではないですけど)

## nREPL
nREPLのnはnetworkのnで、ネットワーク経由でREPLにアクセスできるようにするためのモジュールです。
clojureのREPLをネットワーク経由で利用するための機能を持っています。また、ミドルウェアを組み込んで、機能を追加することができるようにもなっています。

### nREPLの情報
nREPLのgithubサイトは[ここ](https://github.com/clojure/tools.nrepl)です。
README.mdを読むと使いかたがわかるのですが、プロセスのなかにREPLを組み込むためのモジュールの説明だけあって、使うことが目的の場合ちょっと難しいです。

使う視点に立った場合、使い方ベースで記述してある開発環境側での説明の方がわかりやすいですね。僕はcider派なので、[ciderのページ](https://github.com/clojure-emacs/cider#basic-usage)を参照してます。他のIDEとかツールの場合もそれぞれの場所に書いてあると思います。
これらを読めば使いかた判ってしまうのですが、軽く説明しときます。


### やってみよう
それほど難しいことではなくて、モジュールを追加して、サーバーを起動するだけです。

- project.cljのdependenciesにnreplのモジュールを追加する。
`[org.clojure/tools.nrepl "0.2.11"]`

- nsのreqireにnreplモジュールを追加するを追加する。

```clojure
[clojure.tools.nrepl.server :as nrepl]
```

- nreplサーバーを起動する。

```clojure
(defonce nrepl-server (nrepl/start-server :port 7888))
```

これで、起動しているマシンの7888ポートで、replが接続を待ってくれます。
これだと素のままなので、ciderを使う場合はciderのミドルウェアをハンドラとして指定しておくといろいろ便利な機能が使えます。

```clojure
(defonce nrepl-server (nrepl/start-server :port 7888 :handler cider-nrepl-handler))
```

起動するポイントはどこでもいいのですが、webサーバー系であればinit関数などの起動時に呼ばれる関数内に入れればいいでしょう。

また、常時起動しておくのは怖いということであれば、起動ルートを作ってそこに入れればよいでしょう。
停止するのは、

```clojure
(nrepl/stop-server nrepl-server)
```

とします。
この例のように`defonce`にしてしまうとと、2度目の起動ができません。`atom`にするなどしましょう。

### 接続する
お使いの環境で、REPLに接続すればいいのですが、ciderの場合は、`cider-connect`とすると、ホストとポートを聞いてくれるので、必要な情報を入力します。
稼動しているシステムのソースを開いていれば、後は、通常のREPLの使いかたとまったく同じ。いろいろできます。

## おしまい
稼動中のシステムにREPLで接続して動作を変えてしまおう、っていう話は、Lisp界隈では普通のことですが、Clojureを含めてよそではあまり聞いたことが無いので、書いてみました。
Common LispのCLOSなどは、クラスを再定義すると、そのクラスの生成済みのインスタンスまで変更できてしまうという驚きの機能まで言語仕様として入っていたりします。

本番稼動中のシステムを変更するっていうのは、現実的にはなかなか難しいことではありますが、サービスを停止することなく、改善/修正できるというのは、それはそれで価値のあることだと思います。

では、良いクリスマスになりますように。
エディタ初心者がSublimeTextでHTML5/CSS3を書く環境を作るのに苦労した話

![advent_calender_9.png](https://qiita-image-store.s3.amazonaws.com/0/70014/7adb4f89-162c-1a4f-cb89-6c5448bd8f3a.png)

この記事は [Goodpatch Advent Calendar 2015](http://qiita.com/advent-calendar/2015/goodpatch) 9日目の記事です。
昨日はProttチームの同僚 @hanamiju の『[【OSX】Viewにブラーをかける](http://qiita.com/hanamiju/items/7b7465c4a7bf1d617690)』でした！

---

こんにちは。@hasedaです。Goodpatchの[Prott](https://prottapp.com)チームでCS(Customer Success)を担当してます。QiitaでGoodpatchのアドベントカレンダーをやると聞き、初心者の記事もwelcomeということで記事を書いてみました。

この記事では、エディタ初心者がHTML5/CSS3を書く環境を作るまでについて書きます。

#脱メモ帳！のきっかけ
仕事や私用で少しずつHTML/CSSを書く機会ができて、メモ帳から、いわゆる玄人っぽい『テキストエディタ』に昇格しました！ :tada: 

同僚の @yoshiko_pg が「[HTML5/CSS3モダンコーディング](http://www.amazon.co.jp/dp/B0176GNY26/)」という本を出版したので、さっそく本に書かれているコードを書き進めてみました。しかし、Macのメモ帳(テキストエディット.app)は自動補完もなく、文法のミスを指摘してくれる機能もないため、第1章を進めるだけで半日以上かかりました。
例えば単語を間違えて ```margin-buttom: 15px;``` と書いてCSSが反映されなかったり、書き進めていくうちに閉じタグの ```</div>``` が行方不明になったり。。。あっという間に時間が過ぎてしまいました。
こんな調子ではあまりにも非効率なので、HTML5/CSS3を書く環境を作ることにしました。

#Sublime Textとの出会い
 [ mac テキストエディタ おすすめ ] とググった記事で、[Sublime Text](http://www.sublimetext.com/)を知りました。
![search-google.png](https://qiita-image-store.s3.amazonaws.com/0/70014/31a59ac5-c5cc-e7af-d399-2b9fce2603bf.png)

他のエディタも少し見てみたのですが、前述のカーソル複数選択やプラグインが充実しているという記事を見て、Sublime Textを選びました。

#「なんちゃらLinter」というプラグインを導入すれば良いらしい
構文エラーがあった時に、リアルタイムで指摘してくれると嬉しい。
調べてみるとSublime Textで HTML5/CSS3 を効率的に書いていくには、SublimeLinterというプラグインを入れると良いことがわかりました。
以下、手順です。

##1.Package Controlの導入
SublimeLinterプラグインを入れるためには、どうやらPackage Controlが必要らしい。参考にしたのはこのブログ記事。
・[Sublime Text - Package Control のインストール](http://webkaru.net/dev/sublime-text-package-control/)

##2.SublimeLinterのインストール
 続いて本命のSublimeLinterを入れます。参考にしたのは、Qiitaのこの記事。
・[Sublime Text 3 で構文エラーチェックする設定のまとめ](http://qiita.com/Sugima/items/e3ad6c0405c3939dee3b)

---

基本プラグインとしてのSublimeLinterを入れると、それぞれの言語でリアルタイムに構文をチェックをしてくれるプラグインを入れることができるようになります！

##3. HTML5のLinterをインストール
Sublime Textで```SublimeLinter-html-tidy```を入れるのと、ターミナルから```tidy-html5```を入れます。参考にしたのはQiitaのこの記事。
・[SublimeText3でHTML5の構文チェック](http://qiita.com/maccotsan/items/eebd7aa5932b74b48eff)
> 補足：途中ターミナルでvimから抜けられなくなり、この記事に助けられました。（ここで ```:wq``` を覚えました）
・[覚えておきたいターミナルでのvim/lessの抜け方](http://hack.aipo.com/archives/7660/)

##4. CSS3のLinterをインストール
Sublime Textでこの2つのPluginをインストールします。
Package Control: Install Package → CSS3
Package Control: Install Package → SublimeLinter-csslint
をインストールします。

##5. SublimeTextを再起動
SublimeText3を再起動します。完了！ :confetti_ball: 

---

以上でひとまず、僕が考える理想のテキストエディタのできあがりです。
文章にするとこれだけなのですが、実はこの環境を作るだけでも、さらに半日かかってしまいました :sweat: 

#その他のプラグイン
Sublime Textには他にも便利なプラグインがたくさんあります。
・カラーコードって視覚的に表示してくれる Color Highlighter
・Shift-JIS等の日本語ファイルをUTF-8で開いてくれる ConvertToUTF8
などは非常に重宝しています :laughing: 

#終わりに
以上、エディタ初心者がSublimeTextでHTML5/CSS3を書く環境を作るのに苦労した話でした。
この記事がこれからSublime Textを使う方の参考になったら幸いです。
明日はGoodpatchのiOSエンジニア @HirokiTerashima から、[iOSのUIテストについての話](http://qiita.com/HirokiTerashima/items/ff993ee1916734e3d76b)をお届けします。お楽しみに！
Swift で NSCalendarUnit の bitmask を指定する

NSCalendar の ``components:fromDate:`` を Swfit で使おうと思ったら bitmask の指定の仕方がわからなかったので調べた。

```swift
let comp = NSCalendar.currentCalendar().components( [.Year, .Month, .Day ], fromDate: NSDate())
```

Objective-C のバーティカルバーではなく、 ``[.Hoge, .Fuga]`` と配列のように指定する。
Scala で Play Frameworkプロジェクトを作成する



## 前提条件
* OS : MacOS X
* brewインストール済み
* Scala : version 2.11.x


## 1. インストール

```bash
# brewのリポジトリ更新
$ brew update

# Play Framework インストール
$ brew install typesafe-activator

# インストール確認
$ which activator
/usr/local/bin/activator
```

# 2. プロジェクト作成

```bash
# 新しいアプリケーションを作成
# 適当なフォルダ<path>で作業を行う。
$ cd <path>
$ activator new play-hello-world play-scala

Fetching the latest list of templates...

OK, application "play-hello-world" is being created using the "play-scala" template.

To run "play-hello-world" from the command line, "cd play-hello-world" then:
/<path>/play-hello-world/activator run

To run the test for "play-hello-world" from the command line, "cd play-hello-world" then:
/<path>/play-hello-world/activator test

To run the Activator UI for "play-hello-world" from the command line, "cd play-hello-world" then:
/<path>/play-hello-world/activator ui

```

# 3. Activator コンソールに入る

```bash
# 作成されたプロジェクトフォルダに移動
$ cd play-hello-world/
# Activator コンソールに入る
$ activator
[info] Loading project definition from /<path>/play-hello-world/project
[info] Set current project to play-hello-world (in build file:/<path>/play-hello-world/)
[play-hello-world] $
```

# 4. アプリケーション実行

```bash
# アプリケーションを実行
[play-hello-world] $ run
[info] Updating {file:/<path>/play-hello-world/}root...
[info] Resolving jline#jline;2.12.1 ...
[info] Done updating.

--- (Running the application, auto-reloading is enabled) ---

[info] p.c.s.NettyServer - Listening for HTTP on /0:0:0:0:0:0:0:0:9000

(Server started, use Ctrl+D to stop and go back to the console...)
```

# 5. 起動確認
プラウザで、http://localhost:9000/ にアクセス。
下の画面が表示されればOK。

![Welcome_to_Play.png](https://qiita-image-store.s3.amazonaws.com/0/11476/a6add0f4-9cea-e5c2-bd7d-5d7ed6c82cae.png "Welcome_to_Play.png")

# まとめ
Scalaで、Play Frameworkを使ったWebアプリケーションの雛形までできました。
次は、IDEのIntelliJ IDEA 15 CEをインストールして、アプリケーションをプロジェクトとしてImportします。

< Prev [Scala 2.11 で Hello World](http://qiita.com/gungnir_odin/items/3827d627ce32a67fcc5e)
Next > [IntelliJ IDEA 15 にPlayFrameworkのプロジェクトをインポートする。](http://qiita.com/gungnir_odin/items/199f54307fca2166c6c4)
[CakePHP3] もう毎回 h() なんて書きたくない!!

Advent Calendar何か書こうかなーと思っていた時に、ふと思い立ちプラグインを作成しました。

セキュリティ対策としてViewで扱う文字列にはHTMLエスケープが必要です。  

CakePHPには`h()`という`htmlspecialchars()`をサクｯと使えるものがあります。
が、
大規模なシステムになってくるとどうしても抜けが派生しがち。

その抜けをなくすためのplugin for CakePHP3を作成してみました。
要は`h()`なんて書かずにすべてエスケープされてやればいいんだ！

## リポジトリ
**name :** Altair
**github :** https://github.com/tutida/altair
**composer :** https://packagist.org/packages/tutida/altair

### 参考にしたPlugin
**k1low/escape :** https://github.com/k1LoW/escape

## やってること
ControllerからViewクラスに渡される変数は全て「$viewVars」に格納されるので、それを無差別にHTMLエスケープしてます。

## 使い方

```php
//AppController

    class AppController extends Controller
    {

        public function initialize()
        {
            $this->loadComponent('Altair.Altair');
        }
```
これだけで、viewのほうで毎回、`<?= h($variable); ?>`とか書かずに済みます。

```php
//エスケープ済み
<td><?= $user->username ?></td>
<td><?= $user->password ?></td>
<td><?= $user->created ?></td>
<td><?= $user->modified ?></td>
```

## CakePHP2との違い
### find()の返り値がオブジェクト
CakePHP2の場合、paginate()やfind()の結果は配列でしたが、
CakePHP3よりそのあたりがオブジェクトとなったので、HTMLエスケープをするのか多少面倒。

### formへ入力される値はデコードする必要あり
CakePHP2の場合、edit画面などでformへ入力される値は`$viewVars`ではなく`$this->requst->data`を参照していました。
CakePHP3の場合は、`$viewVars`に格納されているformに対応するEntityオブジェクとを参照するため、
すべての変数を無差別にHTMLエスケープしている実装だと、formに入る値もエスケープされてしまいます 
![2015-12-03_10h57_28.png](https://qiita-image-store.s3.amazonaws.com/0/74129/d8dea4bb-4886-c2b1-1637-2665d79a8228.png)
なので、FormHelperを継承したDecodeFromHelperをPluginに含めています。
inputに入力される値は再びデコードする仕様です。
`※なので、FormHelperを別でオーバーライドする場合は意図通りの動きをしません...`
何かいい案あったら是非ご意見を。

## 是非機会があれば使ってみてください。  
穴だらけだと思うので、皆さんのフィードバックで育てていきたいと思います。
brew caskでcharmが更新されない時の対処法

# この記事について

- `brew cask install pycharm-ce`
- `brew cask install --force pycharm-ce`
- `brew cask uninstall pycharm-ce && brew cask install pycharm-ce`

などとやっても、
PyCharm4系から5系にアップデートするときにコマンドの`charm`だけが4系を参照していたので調べてみました。

# 方法

`Menu`バーの`Tools -> Create Command-line Launcher...`から作れました

<img width="415" alt="Screen_Shot_2015-12-09_at_12_29_13_AM.png" src="https://qiita-image-store.s3.amazonaws.com/0/58141/1f93306b-9b2e-2a4f-767d-b8343ae9ccf6.png">
看護師 x vvvv


#Digital Hospital Art
看護師の視点を生かし、vvvvでプログラミングを行い、
病院でのデジタルアートなどの活動を実施しております。

__「医療現場に夢や魔法を届けたい」
「身体可動制限があっても自由に表現出来る世界をつくりたい」
「医療現場に当たり前にアートが溢れるようになってほしい」__

上記を目標に掲げ、活動をしております。
http://www.digitalhospitalart.com/

看護師の視点を生かしプログラミングをしているのですが、
医療とテクノロジーの接点のきっかけとなりうるポイントを伝えたいと思います！
最後まで読んだ方には、エッセンスを込めた__パッチのダウンロードURL__も！！笑

##テクノロジーは魔法であり、希望である
小児で退院しても人混みに行けない子、
筋肉が衰えていくALSをはじめとする疾患や、
事故などで機能を失った人へも、
__エンターテイメントとしての楽しめる魔法や
失われた機能をセンサー・デバイスで機能で未来への希望をとどけることができます。__

◎プロジェクションによる魔法の扉とプレゼントの企画
![スクリーンショット 2015-06-29 23.44.44.png](https://qiita-image-store.s3.amazonaws.com/0/37495/6f1903de-a627-1084-8cb2-4bc848811a8d.png)
https://www.youtube.com/watch?v=w_UFpdWvKD8


◎Eye Trackerで部屋の色を変える。
　筋肉が衰えた方でも使用可能。
　新たな身体機能の拡張をすることができる。
![スクリーンショット 2015-05-05 17.20.14.png](https://qiita-image-store.s3.amazonaws.com/0/37495/bbdecf47-09d6-3a77-38e6-eb11b795ae2b.png)



##身体可動性に合わせたプログラミング
身体可動性に制限がある方に合わせたプログラムの組み方をすることが大切。
個別性があり、それぞれにその場で合わせて対応できるようなプログラムの組み方をします。その場で数値を変え、その場の反応に応じて調整していく。

◎Leap Motionを使用し、手をかざすと桜の花びらが散る。
![tumblr_inline_nnvb1wP9He1si12z8_500 2.png](https://qiita-image-store.s3.amazonaws.com/0/37495/fa963dd7-28d4-c88e-d18a-4dd324c99633.png)


##生きてく上で必要はないことこそ必要である
普段好きな音楽を聞いたり、好きな映画を見たり、
絵を描いたり、踊ったり、生きていくのに必ずしも必要ではないが、
その人なりの表現ができるようなことが大切である。

◎プラネタリウム
七夕のプロジェクト。星空を投影し、LeapMotionで操作。
星座が現れたり、月が現れたり、星が流れたり。
![dc0630100.JPG](https://qiita-image-store.s3.amazonaws.com/0/37495/7df73968-276a-f5a2-49c3-0e19f0b41728.jpeg)


◎オドリハ カラダノ カキネヲ コエル
車椅子生活の中学生。Wiiリモコンでダンス用のプログラムを組む
<img width="574" alt="スクリーンショット 2015-06-27 22.43.50.png" src="https://qiita-image-store.s3.amazonaws.com/0/37495/fc833a41-996b-d505-f975-2dbe1bfa1a4f.png">
https://www.youtube.com/watch?v=Xualsv7mieA


##その他：遠隔でのプログラミング教育
vvvvは、看護師である僕も覚えることができた言語でした。
__七夕のプラネタリウムのプロジェクト__は、
遠隔でvvvvを教育し、プロジェクトを実施しました！

下記が、そのパッチです。
遠隔で対応していただくため、下記の内容に注意したパッチングになっています。
・__身体状況に合わせたセンサーの選択__
→病棟の患者の層を聞き、使用するセンサーを選択。
 今回はLeapMotionを使用
・__個別にその場で値を調整できるように__
→様々な身体可動性に合わせて、その場で調整します
・__PCのスペックに合わせたレンダリングができるように__
→星空がテーマですが、PCのスペックに合わせ調整できるようにしている

vvvv Nurse Patch Download ↓
https://drive.google.com/file/d/0B-aWXftvAHSxZlpqV3RNSHk2Tzg/view?usp=sharing
※画像部分は抜いてありますので、何か入れ込んでください。

##おわりに
看護師でプログラミング素人でもここまでできるようになったvvvvです！
遠隔での教育でも1ヶ月程度で最低限習得できるというポテンシャルもある！
医療とアート、テクノロジーの分野の方々をつなぐきっかけをつくっていけたらと思います！