OmniAICreator/Qiita-1.07M huggingface dataset:
Swift 2 で強化されたコメント表記をまとめた #1


XcodeでSwift1.xのコードを変換すると、文書コメント（関数やメソッドなどのコメント）も一緒にコンバートされるので気づいた人もいると思いますが、文書コメントの記法が変わりました。
以前はパラメータやリターンコード、あとはリスト表記など簡単なものしかありませんでしたが、Swift 2になりmarkdown記法に似た感じに変更され、コメントコマンドもかなり増えてます。
Playgoundのドキュメントレンダリング用とシンボルドキュメントで記法が若干違うのですが、今回シンボルドキュメントの方を中心に書いてみました。

ここに[ドキュメント](https://developer.apple.com/library/prerelease/ios/documentation/Xcode/Reference/xcode_markup_formatting_ref/BlockQuote.html#//apple_ref/doc/uid/TP40016497-CH11-SW1)があります。


```swift:prayground
//: 1行のコメント
/*:
	複数行のコメント
*/
```

```swift:シンボルドキュメント
/// 1行のコメント
/**
	複数行のコメント
*/
```

## Line formmating

行を装飾するフォーマットで7種類のコマンドが用意されています。

* Block Quotes  
文字通りブロック単位でコメントを分ける。複数行を1つのブロックにするときは、各行の後ろに空白2つ必要。ブロックは前後にラインが引かれる。Playgroundのみ。

```swift:BlockQuotes
/*:
>ブロック1行目  
>ブロック2行目
*/
```

* Bulleted ListsとNumbered Lists   
リスト表現をする。「+」「-」を先頭に指定。数字+「.」で番号のリストを表現。

```swift:BulletedLists/NumberedLists
/**
- リスト表記
    - 2段目
     
1. 数字のリスト
*/
```
**表示例**
![BulletedListsNumberedLists.png](https://qiita-image-store.s3.amazonaws.com/0/3656/2a77d31a-d017-dea5-460b-9fbf74fe521e.png "BulletedListsNumberedLists.png")

----

* Code Blocks  
プログラムコードのブロックを指定できる。関数の使用例など書くのに便利。  
「\`\`\`\`」でブロック指定。(以下のコードでは\`\`\`\`となっているが、実際には「\」は削除します)  
※ [@gnueさん](https://twitter.com/gnue)から指摘があったのですが、実際には「\`」は3個で機能します。ちなみに公式ドキュメントでは4個となっていますので、ここでは4個で記載しておきます。


```swift:CodeBlocks
/**
以下コード
\````
func hoge() {
    print("sample")
}
\````
*/
```

**表示例**

![2.png](https://qiita-image-store.s3.amazonaws.com/0/3656/4cd59bab-40cf-fa69-ad8d-f3ee08298f1a.png "2.png")

----

* Headings
「#」で見出しを表現します。

```swift:Headings
/**
# 見出し1
## 見出し2
### 見出し3
*/

```

**表示例**

![3.png](https://qiita-image-store.s3.amazonaws.com/0/3656/cc9f3adc-3733-dd5b-c76a-2b0d6b352e0f.png "3.png")

----

* Horizontal Rules
「----」で区切り線が引けます。

```swift:HorizontalRules
/**
----
↑区切り線
*/
```

**表示例**
![4.png](https://qiita-image-store.s3.amazonaws.com/0/3656/a427ef28-153e-a5c0-e54c-71a2bd7ee377.png "4.png")

----

* Link Reference
「[文字列]:URL ホバー文字列」でリンクを定義し、「[ 文字列 ]」でリンクを埋め込める。
（\[Developer ...になってるが実際には先頭の「\」は削除します）

```swift:HorizontalRules
/**
\[Developer Program]: http://developer.apple.com/ "DevCenter"
    
Developer:[Developer Program] 
*/
```

**表示例**

![5.png](https://qiita-image-store.s3.amazonaws.com/0/3656/6a221cf9-048e-b554-34ef-82208642cc97.png "5.png")


----

# ちょっと宣伝
コメントの特殊な記述方法ってあまり書籍に載っていないんですよね。
でも「Swift 2 標準ガイドブック」にはきちんと載ってます。
細かい部分まで知りたい人は、買ってください〜。
2015年11月24日まで特別価格になっています。

* [Amazon (Kindle)](http://www.amazon.co.jp/gp/product/B016ZCZN1C/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=B016ZCZN1C&linkCode=as2&tag=banwankonet-22)
* [マイナビブックス (PDF)](https://book.mynavi.jp/ec/products/detail/id=44247)
* [達人出版会 (PDF)](http://tatsu-zine.com/books/swift2-hyojyun-guide)
React TutorialをTypeScriptでやってみた


[React Tutorial]を[TypeScript]でやってみました。

* [ソースコード一式]


[TypeScript]:http://www.typescriptlang.org/
[React Tutorial]:https://facebook.github.io/react/docs/tutorial.html
[ソースコード一式]:https://bitbucket.org/megmogmog1965/react_tutorials_with_typescript
Scratchでポン(Pong)を作ってみた

# スクラッチでのポン(Pong)の作り方

ScratchでのPongの作り方についてまとめました。

<img width="225" alt="cover.png" src="https://qiita-image-store.s3.amazonaws.com/0/54192/70764041-a841-a9f4-183d-0644c2f88c48.png">

https://kyorohiro.gitbooks.io/doc_scratch/content/pong/index.html

本文では、概要を紹介します。ここでは、工程のみですが、作り方がわかると思います。

## (1) プロジェクトを作る
https://kyorohiro.gitbooks.io/doc_scratch/content/pong/create_project/index.html

## (2) ラケットを作る
https://kyorohiro.gitbooks.io/doc_scratch/content/pong/create_racket/index.html

![racket.png](https://qiita-image-store.s3.amazonaws.com/0/54192/d3b9da78-0cf8-a0c0-d6ff-63e85b6ae74c.png)

## (3) ラケットを移動できるようにする
https://kyorohiro.gitbooks.io/doc_scratch/content/pong/create_racket/README02.html

![racket2.png](https://qiita-image-store.s3.amazonaws.com/0/54192/59ce9dbe-77bf-9221-829d-cb790c752791.png)

## (4) コースを追加する
https://kyorohiro.gitbooks.io/doc_scratch/content/pong/create_cource/index.html

<img width="243" alt="about_22.png" src="https://qiita-image-store.s3.amazonaws.com/0/54192/73c92677-b05c-e860-bfb3-6e06096966e3.png">


## (5) ボールを追加する

https://kyorohiro.gitbooks.io/doc_scratch/content/pong/create_ball/index.html

![about33.png](https://qiita-image-store.s3.amazonaws.com/0/54192/b7015372-4a31-d488-6f89-ccc2b2d63856.png)


## (6) ボールを移動できるようにする

https://kyorohiro.gitbooks.io/doc_scratch/content/pong/create_ball/README2.html

<img width="198" alt="about2.png" src="https://qiita-image-store.s3.amazonaws.com/0/54192/1bfd4f8e-f6e3-c617-41ef-c58d767e4dce.png">


## (7) ボールが跳ね返る機能を追加する

https://kyorohiro.gitbooks.io/doc_scratch/content/pong/bouncing/index.html

![about (2).png](https://qiita-image-store.s3.amazonaws.com/0/54192/e5208051-680f-7d79-257b-8789cc42305d.png)

## (8) 勝ち負けを判定する

https://kyorohiro.gitbooks.io/doc_scratch/content/pong/win_lose/index.html

![about (3).png](https://qiita-image-store.s3.amazonaws.com/0/54192/54bcc437-5513-253b-637a-a0718b0d0f5d.png)

## (9) 跳ね返る方向を調整できるようにする

https://kyorohiro.gitbooks.io/doc_scratch/content/pong/direction/index.html

![about (4).png](https://qiita-image-store.s3.amazonaws.com/0/54192/19503fea-6d27-77b5-6bfe-fb0be5914c94.png)

## (10) 完成です。

あとは、ボールが飛ぶスピードを変えてみたり、方向を変えてみたりしてください。

------
Kyorohiro Work
http://kyorohiro.strikingly.com/
brewもgoなしでpecoやghqをインストールする


El CapitanのSIP的な理由でHomebrewを使わないで環境構築してる今日この頃、皆様どうお過ごしでしょうか。
僕はビールのアイコンが恋しいです。

brewなしでpecoやghqを入れようとして調べてたんだけど、意外と解決方法はシンプルだった。

[例えば、pecoをビルドしない - Qiita](http://qiita.com/lestrrat/items/de8565fe32864f76ac19)

なるほど、release見ると普通にバイナリあるのね。

考えてみればそりゃそうよね、goで書いてるんだもの。

とりあえずpecoもghqもreleaseからバイナリを落としてきて、適当なフォルダに入れてパス通した。
Electron on Macでclick-thruを実現する

Electronで作成するアプリケーションのウィンドウをクリックスルー(そのウィンドウの下をクリックさせる)という記事です。本来Electronはクロスプラットフォームですが今回の記事ではOS Xのみ動きます。

Electron 0.35.3まではクリックスルーが実装されてなかったのですが、0.36.0からOS Xに限り実装されました！

## やり方

```js
let win = new BrowserWindow({opt....})
win.setIgnoreMouseEvents(true)
```

これだけです。`BrowserWindow`に`setIgnoreMouseEvents`というメソッドが追加されたので引数にtrueを指定すれば、そのウィンドウはクリックスルーになります。


## 以下古い内容

Electronではアプリケーションウィンドウを透明にしたり枠をなくしたりできるのですがなぜかクリックスルーは実装されていません。Cocoa APIをたたくことで実現できます。

## nodobjcでCocoa APIをたたく

nodobjcは、Cocoa APIというか、Objective-Cの機能にアクセスするためのものです。一つ罠があってnpmで公開されているnodobjcは古すぎて動きません。直接Githubのリポジトリを指定してインストールしましょう。

```
npm i https://github.com/TooTallNate/NodObjC.git --save
```

## setIgnoresMouseEvents

click-thruを実現するCocoa APIがsetIgnoresMouseEventsで、これはNSWindowクラスに対して実行するメソッドです。そのため、Electronのウィンドウを取得する必要があります。

とりあえず僕がいろいろ試した中で唯一成功したのは

* Electronのbrowserプロセス側で
* NSApplication.sharedApplicationして得られたNSApplicationに対して
* windowsメソッドで得られたNSWindowの配列の一番目

で取得するというやり方だけでした。

nodobjcを使った書き方にすると以下の通り。

```js
$.NSApplication('sharedApplication')('windows')('objectAtIndex', 0)('setIgnoresMouseEvents', $.YES)
```

ただ、このやり方はおそらく問題があって、絶妙なタイミングでウィンドウがもう一つ追加されてトップに表示されていたら、そいつに誤爆する可能性があるということです。まぁelectronのプロセスで謎のウィンドウが勝手に生えてくるという自体は起きるものでもないでしょうから基本的には考えなくてもいいかもしれませんが、そういう可能性もあるというのは念頭に置いた方がいいかもしれません。

個人的にこれを探す上での大きな罠は、rendererプロセスの方ではなく、browserプロセス側で実行しなければならなかった点でしょうか。

## ソースコード

```js
var app = require('app')
var BrowserWindow = require('browser-window')
var $ = require('nodobjc')

$.import('Foundation')
$.import('Cocoa')

app.on('window-all-closed', function() {
	app.quit();
});

app.on('ready', function() {
	var win = new BrowserWindow({
		frame: false,
		width: 800,
		height: 600,
		transparent: true,
		'always-on-top': true,
	});
	win.loadUrl('file://' + __dirname + '/index.html');
	win.webContents.on('did-finish-load', function(){
		$.NSApplication('sharedApplication')('windows')('objectAtIndex', 0)('setIgnoresMouseEvents', $.YES);
	});
});
```

`index.html`は適当に用意してください。注意点はウィンドウをクリックできないため、終了するための手段を別途用意した方がよくて、具体的にはトレイアイコンを用意した上でトレイから終了できるようにしておく方が吉です。
unity > using FTD2XX_NET > EntryPointNotFoundException: LoadLibrary > Unity Proが必要?

```txt:動作確認
Unity 5.1.3-f1 on MacOS X 10.8.5
```

FTD2XX_NET というDLLを使おうとして、以下のエラーが出た。
> EntryPointNotFoundException: LoadLibrary

Qiitaに関連記事があった
http://qiita.com/fantm21/items/f6f509dd8fe8980f6b94
> しかし、同じ手順で作ったC++のプログラムはEntryPointNotFoundExceptionというエラーが表示されました。このエラー内容について調べたところ、下記の記事を発見しました。
...

上記の記事からのリンク
http://ttwco.blogspot.jp/2013/07/unity-native-pluginxcode.html
> ちなみにUnity側で出ている「EntryPointNotFoundException:」はPC上でのプラグイン利用がUnity Proに限られることと関連してるぽい。

Unity ProでないとFTD2XX_NET.dllは使えないということなのかもしれない。

スマホをRS-232Cラインモニタ化計画、頓挫。
[Unity]誰でも簡単にイントロ付きループBGMを再生するスクリプト

# はじめに
今日の[カタログIPゲームジャム](https://open.channel.or.jp/gamejam.php)事前勉強会にて
どうやら素材はイントロ（開始ジングル）とループ部分で分かれているwav素材っぽいので、
誰でも簡単にイントロ付きループBGMを再生するためだけのスクリプトを書いてみた。

サンプルプロジェクト：
https://github.com/tatmos/BGM_Intro_loop

ニコニコ動画【SKY KID】【Unity】簡単にイントロ付きループBGMを再生するスクリプト
http://www.nicovideo.jp/watch/sm27490070

スカイキッドが例に挙げられていたけど、この曲、
ループ部分が前のめり（前に飛び出している、アウフタクト）なのです。

# アウフタクトとは？
イントロ２小節で、普通は、4拍＋４拍で８拍で
1,2,3,4,5,6,7,8とカウントすると、
8のところからループ部分のメロディーが始まるのです。
（アバウトには２小節だけど厳密には少し短い）

だから、データも
![image](https://qiita-image-store.s3.amazonaws.com/0/96808/a0b9ba70-adb7-a130-827b-9a06f7e60933.png)

この図だと3小節目の4拍目から7小節目の3拍までをループとして録音しています。

(曲構成と実ループ範囲がずれるのはよくある。ゲーム向けにループ区間を録音する時は少々パズルで、最適なデータのためにDAW上の構成をいじったりといった見えない作業が発生します。実際の録音範囲はループ（２回目）を使っています）

# スクリプトについて
PlayScheduledを使っています。
あらかじめ鳴らすタイミングがわかっていたらこれで鳴らせます。（キャンセルできるか不明ですが・・・）



https://github.com/tatmos/BGM_Intro_loop/blob/master/intro_loop/Assets/BGMController.cs

<pre class="prettyprint">
using UnityEngine;
using System.Collections;

public class BGMController : MonoBehaviour {

	public AudioClip intro;
	public AudioClip loop;

	AudioSource[] audioSource = new AudioSource[2];

	// Use this for initialization
	void Start () {
		audioSource[0] = this.gameObject.AddComponent<AudioSource>();
		audioSource[1] = this.gameObject.AddComponent<AudioSource>();
	
		if(intro != null){
			audioSource[0].playOnAwake = false;
			audioSource[0].clip = intro;
			audioSource[0].Play();
			if(loop != null){
				audioSource[1].playOnAwake = false;
				audioSource[1].clip = loop;
				audioSource[1].loop = true;
				audioSource[1].PlayScheduled(AudioSettings.dspTime + intro.length);
			}
		}
	}
	
	// Update is called once per frame
	void Update () {
	
	}
}
</pre>

AudioSettings.dspTimeってのが、どうやらオーディオ初期化してからずっとカウントしているタイマーっぽい。
これをマスターのタイマーとして再生タイミングを合わせるのがPlayScheduledという処理の様子。

##追記
上のスクリプトはたまに繋ぎがうまくいかないことがあるので
[【Unity】誰でも簡単にイントロ付きループBGMを再生するスクリプト2015-11-01繋ぎ改善版](http://qiita.com/tatmos/items/4c78c127291a0c3b74ed)
をあげました。スクリプトだけ使いたいひとは上のリンク先のを使ってください。


# ADX2でループ再生も検討
まぁ、ADX2とかでループ組んで再生する方がスクリプトレスでキュー再生だけで書けるので扱う音数が多くてインポートの時間節約したいとかであれば、ADX2おすすめしておきます。

でも、最近はループが組める波形編集ソフトがめっきり無くなってしまったので、

- シーケンスとかで並べてみたり

![image](https://qiita-image-store.s3.amazonaws.com/0/96808/2d4a21bc-3a40-34d1-b568-8ccb8e48ff58.png)

- ブロック再生とかで組むのも
![image](https://qiita-image-store.s3.amazonaws.com/0/96808/ba19922f-91ef-6f7f-cea2-01669f5879bb.png)

ありかと思われます。

##余談
- PlayScheduledのこぼればなし
ちなみに、PlayScheduledが無かった時は何かダミー再生していたオーディオ処理サンプル数とかから計算してプリディレイ再生とかしてた時もありました。

- もしかして7/4拍子のイントロという可能性も微レ存
アレンジとしてまれによくある。8拍くると思わせておいて、8->7拍子を挟むことで、裏を表としてカウントした時とか少し楽くなる。ちょっと勢いをつけたい時とかいごく少量使うのがポイント。
GitHub Markdown + Tex記法で任意の数式番号を書きたい

GitHub Markdown + $\TeX$ 記法で数式を書く際に調べた事について覚書き
# 任意の数式番号を書きたい
` \tag` を使う.

```lang:
$$ 1a = a \tag{2.1} $$
```
$$ 1a = a \tag{2.1} $$

equation環境, align環境などでも使える.
{ }の中身は番号である必要はなくtextでも可能.

```lang:
$$
\begin{equation}
b \tag{2.2}
\end{equation}
$$
```
$$
\begin{equation}
b \tag{2.2}
\end{equation}
$$

```lang:
$$
\begin{align}
c \tag{d}
\end{align}
$$
```
$$
\begin{align}
c \tag{d}
\end{align}
$$
***

[TeXで数式番号を任意に指定する](http://physpolyglot.hateblo.jp/entry/2015/02/07/125142) を参考にさせてもらいました.
よりスマートな方法があれば教えていただけると嬉しいです.
CentOSにanyenvでPHPをインストールする


# 環境
CentOS 6.6

# 事前準備

まずは`Git`と`gcc`をインストール

```cmd
$ sudo yum install -y gcc git
```

# anyenvのインストール

作者の解説記事とリポジトリのREADMEを読みながらインストールします
[anyenvという**env系の簡易マネージャを作った](http://blog.riywo.com/2013/06/22/155804/)
[riywo/anyenv](https://github.com/riywo/anyenv)

```
$ git clone https://github.com/riywo/anyenv ~/.anyenv

$ echo 'export PATH="$HOME/.anyenv/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(anyenv init -)"' >> ~/.bashrc
$ exec $SHELL -l
```

インストールが完了したらanyenvコマンドを確認してみましょう

```
$ anyenv install -l
Available **envs:
  Renv
  crenv
  denv
  erlenv
  exenv
  goenv
  hsenv
  jenv
  luaenv
  ndenv
  nenv
  nodenv
  phpenv
  plenv
  pyenv
  rbenv
  sbtenv
  scalaenv
```

`phpenv`がありますね。では、`phpenv`をインストールします。

# phpenv

## phpenvをインストール

```
$ anyenv install phpenv
$ exec $SHELL -l
```

## PHPインストールの事前準備

PHPのビルドに必要なライブラリをyumでインストールします。epelリポジトリからインストールするものもあるので有効にしておきましょう。

```
$ sudo rpm -Uvh http://ftp-srv2.kddilabs.jp/Linux/distributions/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm

$ sudo yum install -y --enablerepo=epel ncurses-devel libxml2 libxml2-devel openssl-devel curl-devel libjpeg libjpeg-devel libpng libpng-devel libmcrypt libmcrypt-devel readline-devel libtidy libtidy-devel libxslt libxslt-devel
```

## PHPインストール

今回はPHP5.6.14をインストールします
※ソースコードからコンパイルするのでかなり時間がかかります

```
$ phpenv install 5.6.14
$ phpenv versions
* 5.6.14 (set by /home/yourname/.anyenv/envs/phpenv/version)
```

PHP5.6.14をインストールできました。
複数バージョンをインストールするなら `phpenv install 5.x.x` で適宜インストール出来ます

## バージョンを指定
### システム全体で使用するバージョンを指定する
```
$ phpenv global 5.6.14
```

### 特定のディレクトリでだけ使用するバージョンを指定する

```
$ phpenv local 5.6.14
```

## 確認

```
$ php -v
HP 5.6.14 (cli) (built: Oct 31 2015 10:18:13)
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2015 Zend Technologies
    with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2015, by Zend Technologies
    with Xdebug v2.3.3, Copyright (c) 2002-2015, by Derick Rethans
```
Hierarchyビューに右クリックメニューを追加する


エディタ拡張していると、どうしても欲しくなる右クリックメニュー
非常に簡単に追加できたのでメモ

staticメソッドにMenuItem属性を追加
さらにパスを"GameObject/..."とすることでヒエラルキー上で右クリックメニューに追加される
ヒエラルキー上で選択しているGameObjectは
Selection.activeGameObjectで取得可能


##サンプルコード
```csharp
using UnityEditor;
using UnityEngine;

/// <summary>
/// ヒエラルキービューに右クリックメニューを追加
/// </summary>
public class HierarchyMenu {

	[MenuItem("GameObject/Foo", false, 0)]
	public static void Foo()
	{
		var gameObject = Selection.activeGameObject;
		Debug.Log("Foo " + gameObject.name);
	}

	[MenuItem("GameObject/Bar", false, 20)]
	public static void Bar()
	{
		var gameObject = Selection.activeGameObject;
		Debug.Log("Bar " + gameObject.name);
	}
}
```

##表示確認
![スクリーンショット 2015-10-31 19.03.05.png](https://qiita-image-store.s3.amazonaws.com/0/67497/1e4b26ba-867c-4537-3672-206c94d1dbc7.png "スクリーンショット 2015-10-31 19.03.05.png")
![スクリーンショット 2015-10-31 19.03.21.png](https://qiita-image-store.s3.amazonaws.com/0/67497/e8b64580-e324-1a39-cdb1-d8012d2d359b.png "スクリーンショット 2015-10-31 19.03.21.png")

MenuItemの第三引数で表示優先度を決めることができるが
0だとCreateEmptyの下に、20だと一番下に表示される模様。
ひらがな・カタカナを万葉仮名に変換

# ソース

```rb:manyou.rb
require 'nkf'

MANYOU_DICT = <<EOS.tr(" ", "").split.map(&:chars).each_slice(2).map(&:transpose).flatten(1).to_h
あいうえお かきくけこ さしすせそ
安以宇衣於 加幾久計己 左之寸世曽

たちつてと なにぬねの はひふへほ
太知川天止 奈仁奴祢乃 波比不部保

まみむめも やゆよ らりるれろ
末美武女毛 也由与 良利留礼呂

わゐゑを ん
和為恵遠 无

アイウエオ カキクケコ サシスセソ
阿伊宇江於 加幾久介己 散之須世曽

タチツテト ナニヌネノ ハヒフヘホ
多千川天止 奈二奴禰乃 八比不部保

マミムメモ ヤユヨ ラリルレロ
万三牟女毛 也由与 良利流礼呂

ワヰヱヲ ン
和井慧乎 尓
EOS

NORM_DICT = <<EOS.split.map{|a| a[1..-1].chars.map{|c|[c, a[0]]} }.flatten(1).to_h
あぁ いぃ うゔぅ えぇ おぉ
かがゕ きぎ くぐ けげゖ こご
さざ しじ すず せぜ そぞ
ただ ちぢ つづっ てで とど
はばぱ ひびぴ ふぶぷ へべぺ ほぼぽ
やゃ ゆゅ よょ
わゎ

アァ イィ ウヴゥ エェ オォ
カガヵ キギ クグ ケゲヶ コゴ
サザ シジ スズ セゼ ソゾ
タダ チヂ ツヅッ テデ トド
ハバパ ヒビピ フブプ ヘベペ ホボポ
ヤャ ユュ ヨョ
ワヷヮ ヰヸ ヱヹ ヲヺ
EOS

def to_manyougana(str)
  NKF.nkf("-w -X", str).gsub(/[#{NORM_DICT.keys.join}]/, NORM_DICT).gsub(/[#{MANYOU_DICT.keys.join}]/, MANYOU_DICT)
end

def from_manyougana(str)
  str.gsub(/[#{MANYOU_DICT.values.join}]/, MANYOU_DICT.invert)
end
```

# 出力

```rb
str = File.read "Desktop/louise.txt"

result = to_manyougana str
result2 = from_manyougana result

puts result, "", result2
```

>流伊須！流伊須！流伊須！流伊須宇宇宇宇宇和安安安安安安安安安安安安安安安安安安安安安安安无！！！
安安安安安安…安安…安川安川ー！安安安安安安安安！！！流伊須流伊須流伊須宇宇宇安和安安安安安！！！
安安久尓加久尓加！久尓加久尓加！須ー八ー須ー八ー！須ー八ー須ー八ー！以以匂以太奈安…久无久无
无波安川！流伊須・不良尓曽和ー須太无乃桃色不呂尓止乃髪遠久尓加久尓加之太以於！久尓加久尓加！安安安！！
間違衣太！毛不毛不之太以於！毛不毛不！毛不毛不！髪髪毛不毛不！加利加利毛不毛不…幾由无幾由无幾由以！！
小説11巻乃流伊須太无加和以加川太与宇！！安安安安安…安安安…安川安安安安安安！！不安安安安安无无川！！
阿二女2期決末川天良加川太祢流伊須太无！安安安安安安安！加和以以！流伊須太无！加和以以！安川安安安安安！
己三川久2巻毛発売左礼天嬉之…以也安安安安安安安！！！仁也安安安安安安安安无！！幾也安安安安安安安安！！
久安安安安安安安安安安安！！！己三川久奈无天現実之也奈以！！！！安…小説毛阿二女毛与久考衣太良…
流伊須知也无波現実之也奈以？仁也安安安安安安安安安安安安安无！！宇安安安安安安安安安安安！！
曽无奈安安安安安安安！！以也安安安安安安安安安安安安！！波安安安安安安安无！！八流介幾二阿安安安安安！！
己乃！知幾之与ー！也女天也留！！現実奈无加也女…天…衣！？見…天留？表紙絵乃流伊須知也无加僕遠見天留？
表紙絵乃流伊須知也无加僕遠見天留曽！流伊須知也无加僕遠見天留曽！挿絵乃流伊須知也无加僕遠見天留曽！！
阿二女乃流伊須知也无加僕仁話之加計天留曽！！！与加川太…世乃中末太末太捨天太毛尓之也奈以无太祢川！
以也川保於於於於於於於於！！！僕仁波流伊須知也无加以留！！也川太与介天伊！！比止利天天幾留毛无！！！
安、己三川久乃流伊須知也安安安安安安安安安安安安安安无！！以也安安安安安安安安安安安安安安安安！！！！
安川安无安安川安安无安阿尓様安安！！世、世伊八ー！！之也奈安安安安安安安！！！宇伊流部流三奈安安安安！！
宇宇川宇宇宇宇！！俺乃想以与流伊須部届計！！八流介幾二阿乃流伊須部届計！

>ルイス！ルイス！ルイス！ルイスウウウウウワあああああああああああああああああああああああん！！！
ああああああ…ああ…あツあツー！ああああああああ！！！ルイスルイスルイスウウウあワあああああ！！！
ああクンカクンカ！クンカクンカ！スーハースーハー！スーハースーハー！いい匂いたナあ…クんクん
んはあツ！ルイス・フランソワースたんノ桃色フロントノ髪をクンカクンカシたいオ！クンカクンカ！あああ！！
間違えた！モフモフシたいオ！モフモフ！モフモフ！髪髪モフモフ！カリカリモフモフ…キユんキユんキユい！！
小説11巻ノルイスたんカワいカツたヨウ！！あああああ…あああ…あツああああああ！！フあああああんんツ！！
アニメ2期決まツテラカツたねルイスたん！あああああああ！カワいい！ルイスたん！カワいい！あツあああああ！
コミツク2巻モ発売さレテ嬉シ…いヤあああああああ！！！にヤああああああああん！！キヤああああああああ！！
クあああああああああああ！！！コミツクナんテ現実シヤナい！！！！あ…小説モアニメモヨク考えたラ…
ルイスちヤんは現実シヤナい？にヤあああああああああああああん！！ウあああああああああああ！！
ソんナあああああああ！！いヤああああああああああああ！！はあああああああん！！ハルケキニアあああああ！！
コノ！ちキシヨー！ヤメテヤる！！現実ナんカヤメ…テ…え！？見…テる？表紙絵ノルイスちヤんカ僕を見テる？
表紙絵ノルイスちヤんカ僕を見テるソ！ルイスちヤんカ僕を見テるソ！挿絵ノルイスちヤんカ僕を見テるソ！！
アニメノルイスちヤんカ僕に話シカけテるソ！！！ヨカツた…セノ中またまた捨テたモンシヤナいんたねツ！
いヤツホオオオオオオオオ！！！僕にはルイスちヤんカいる！！ヤツたヨケテイ！！ヒトリテテキるモん！！！
あ、コミツクノルイスちヤああああああああああああああん！！いヤああああああああああああああああ！！！！
あツあんああツああんあアン様ああ！！セ、セイハー！！シヤナあああああああ！！！ウイルヘルミナああああ！！
ウウツウウウウ！！俺ノ想いヨルイスヘ届け！！ハルケキニアノルイスヘ届け！
Amazon SESのBounceをSlackにPostする

Amazon SESのBounceって登録しているメールには来るけど、最近は基本的にアラートをSlackに流しているのでこいつもSlackに流したい。
# 処理の流れ
Amazon SES -> Amazon SNS -> AWS Lambda -> Slack という流れで、SESからSlackにPostする。

![bounce.png](https://qiita-image-store.s3.amazonaws.com/0/62421/4d031ac5-26f7-62bc-5a7e-ec8baa016863.png "bounce.png")

# Amazon SNS設定
まずは、SESから通知をうける為のSNSの設定を行う。
Create TopicからTopicを作成するだけ。

![スクリーンショット 2015-10-31 18.56.26.png](https://qiita-image-store.s3.amazonaws.com/0/62421/1bd98d59-93b9-34bc-e8c0-e2a7c1821381.png "スクリーンショット 2015-10-31 18.56.26.png")


# Amazon SES設定
Amazon SESのコンソール画面から、Domainを選択し、Notification、Edit Configurationを選択する。

SNS Topic ConfigurationのBounceとCompliantsを先ほど作成したSESNotifyに変更する。

![スクリーンショット 2015-10-31 18.50.58.png](https://qiita-image-store.s3.amazonaws.com/0/62421/01b5430d-e173-9ea8-855b-9fae0e661315.png "スクリーンショット 2015-10-31 18.50.58.png")

# Slack設定

通知したいチャンネルにIncomming Webhooksを設定し通知先URLを取得しておく。
https://api.slack.com/incoming-webhooks

# AWS Lambda設定

Select blueprintという便利な機能があるのでsns-messageを選択する。これでSNSをhookするLambdaのひな形が提供される。

![スクリーンショット 2015-10-31 18.59.14.png](https://qiita-image-store.s3.amazonaws.com/0/62421/4f83d9f9-541b-a284-f9d6-bd1529035b90.png "スクリーンショット 2015-10-31 18.59.14.png")

Event sourceに先ほど作成したSESNotifyを指定する。

![スクリーンショット 2015-10-31 19.00.27.png](https://qiita-image-store.s3.amazonaws.com/0/62421/0964a9bc-a401-23d9-3055-f64ea0e2903e.png "スクリーンショット 2015-10-31 19.00.27.png")

次に、LambdaのCodeを記入するが、かなーり便利なscriptを公開している方がいたのでこれを拝借。
Lambda function codeに貼付ける。
urlだけさっき取得したslackのpost先に切り替える。
https://gist.github.com/vgeshel/1dba698aed9e8b39a464

Review画面のEnable event sourceは最初Enable latarにしておいて、Create functionを実行。

最後に、Testが実行出来るのでTestボタンを押して無事Slackに飛んでいけば完了。

設定の有効化(Disable -> Enable)をしたら完了。

# まとめ
Amazon良く分からない三兄弟の、SNS、SES、SQSの内の二つを使って今回の要件を実現してみました。
はやりのLambdaもやっぱり便利で色々と夢が広がりました。
unity / rs-232c > FTD2XX_NET.DLL

FTD2XX_NET.DLL
http://www.ftdichip.com/Support/SoftwareExamples/CodeExamples/CSharp.htm

FTD2XX_NET.DLLをUnityのAsset以下に置いてUsingで使えばいいとのことだが、うまくいくのだろうか。
unity > 情報収集 > FTD2XX_NET > C#からFT232RLを扱える

http://kamiya.hatenadiary.jp/entry/2014/07/22/191941
> USB-シリアル変換としてお馴染みのFT232RLですが、
>FTDIの公開しているFTD2XX_NETを使えば、c#からFT232RLを扱うことができます。

上記サイトには FTD2XX_NET を使った通信プログラム例が掲載されている。

これを基にして androidスマホから RS-232C通信をできるようになるだろうか。
Go言語で簡単にHTTPリクエストを送ってJSONをパースするサンプル


ヒカリエで行われたGo初心者向けハンズオン（http://gocon.connpass.com/event/21550/）
に参加してきて、とても簡単にAPIからJSON受け取って表示するだけのコマンドラインツールを作ってみたので乗っけてみます。

[easyjson](http://gocon.connpass.com/event/21550/)というライブラリと、teratail APIを使いました。

Goハンズオンのチュートリアル用のリポジトリがとても完成度が高くて感動したので、みなさんもやってみるといいと思います。画像をいろいろ変換すコマンドラインアプリケーションを、引数の取り方やエラー処理などをきちんと行いながら作っていくもの。

他の言語でしばらくやっていて、Go言語の基本文法はざっとさらったうえで、これをやるのはとても良いと思います。

<iframe src="//www.slideshare.net/slideshow/embed_code/key/rDECb9dvzCtuw4" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="//www.slideshare.net/takuyaueda967/go-54587613" title="Go初心者向けハンズオン コマンドラインツールを作ろう" target="_blank">Go初心者向けハンズオン コマンドラインツールを作ろう</a> </strong> from <strong><a href="//www.slideshare.net/takuyaueda967" target="_blank">Takuya Ueda</a></strong> </div>

https://github.com/tenntenn/gohandson

## コード

```go
package main

import (
    "os"
    "fmt"
    "net/http"
    "github.com/m0a/easyjson"
)

var api = "https://teratail.com/api/v1"

func run() error {
    resp, err := http.Get(api+"/questions")
    if err != nil {
        return fmt.Errorf("Failed to connect teratail.com")
    }
    defer resp.Body.Close()

    jsonData, err := easyjson.NewEasyJson(resp.Body)
    if err != nil {
        return fmt.Errorf("Invalid responses")
    }

    for _, v:=range jsonData.K("questions").RangeObjects() {
        fmt.Printf("%s\n", v.K("title"))
    }

    return nil
}

func main() {
    if err := run(); err != nil {
        fmt.Fprintf(os.Stderr, "%s\n", err)
        os.Exit(1)
    }
}
```
UIView(写真やラベルやView)の角を丸める方法


##**今回行うこと**

1. ラベルを貼る
2. 角を丸めるコードを書く
3. 実行結果の確認

--------

1. ラベルを貼る
	StoryBoardにUILabelを貼る
	
	ViewControllerにUILabelに関連付けする
![スクリーンショット 2015-10-31 18.23.18.png](https://qiita-image-store.s3.amazonaws.com/0/93934/6d0a16e2-fc6f-839c-9693-8c6d1be82236.png "スクリーンショット 2015-10-31 18.23.18.png")
<br>
2. 角を丸めるコードを書く

<br>


```ViewController.swift

//
//  ViewController.swift
//  TestProject
//
//  Created by 坂本　大介 on 10/31/15.
//  Copyright © 2015 Daisuke Sakamoto. All rights reserved.
//

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var testLabel: UILabel!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        
        //丸める半径の指定
        testLabel.layer.cornerRadius = 20;
        
        //丸める許可
        testLabel.clipsToBounds = true;
        
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

```
３. 実行結果の確認


![スクリーンショット 2015-10-31 18.28.15.png](https://qiita-image-store.s3.amazonaws.com/0/93934/16b40627-c52e-acbd-13d3-3c400bf86c94.png "スクリーンショット 2015-10-31 18.28.15.png")



##まとめ
簡単に丸めることができましたね
この丸め方はLayerクラスをもつUIImageView,UIViewなどいろいろなところで活用できます！
Mithrilでコンポーネントを使い回す


## 内容

リストのアイテムなど1つのview内で一部分だけ変えて使い回すコンポーネントの定義の仕方と使い方。
(自分が)忘れがちなので備忘録として。
大まかにはコンポーネントのネストの仕方とコンポーネントへのパラメータの渡し方です。
Model, ViewModelあたりのところは割愛します。View部分のみです。

まずはメインのコンポーネントを作ります。

## メインのコンポーネントの定義

メインのコンポーネントから使い回すコンポーネントをネストした形で呼び出す

``` javascript:mainView
var MainView = {
  controller: function() {
  },
  view: function(ctrl) {
    return m("div", {id:"main-view-container"}, [
      m.component(Card),
      m.component(Card)
    ]);
  }
};

m.mount(document.body, MainView);
```

今回は一つコンテナとなるdivを作ってその中にm.component()を使って、
2枚のカードを更にネストする形で呼び出しています。
こうして呼び出すことで小さい部品を作って、それらを組み合わせてViewを構成することが出来ます。

次に使い回すコンポーネントを定義します。

## 使い回すコンポーネントの定義

``` javascript:Card
var Card = {
  controller: function(args) {
  	this.name = args.name;
  },
  view: function(ctrl) {
    return m("span",{}, ctrl.name);
  }
}
```

controllerにargsという引数を渡して定義します。
こうすることでm.component()で呼ぶ際に引数の指定が出来るようになります。
上の例では渡して来た引数のnameという値をviewでspan内の文字列として使っています。
例えばここでclass名を渡したりしてstyleを切り替えたりもできるかと思います。

ここまでだとCard.controllerの引数には何も値が渡っていない状態なので、メインのコンポーネントに引数を追加します。

## メインのコンポーネント内での呼び出しを変更する

``` javascript:mainView
var MainView = {
  controller: function() {
  },
  view: function(ctrl) {
    return m("div", {id:"main-view-container"}, [
      m.component(Card, {name:"1stCard"}),
      m.component(Card, {name:"2ndCard"})
    ]);
  }
};

m.mount(document.body, MainView);
```

m.component()の第二引数にオブジェクトを入れています。
この第二引数が第一引数で呼ばれたコンポーネントのcontrollerに引数として渡されるようになっています。
これで使い回しが出来ました。
作ってみた XCODE GPSデータの扱い方

xcodeを用い、ios向けアプリを作る時、
GPSを使う方法の覚書。

## 参考サイト

http://qiita.com/hanoopy/items/f640a9efed038902caf7

## 公開したGitHub

今回作成したのは、参考サイトをもとに、画面にlabelを使って表示させてみました。
https://github.com/kattsun17/XCODE_GPS

## こんなサイト使うとちゃんと動いてるかわかります。

http://japonyol.net/latlng.html
USHI.BOXの中身

USHI.COMはこの様な中身になっています。
まずUSHIBOXです。JavaScriptを使用しています。

```js
(function (){

	// テキストフォームの element を取得
	var element_edit = document.getElementById("edit_00");

	var element;
	
	// 読み込みボタンの element を取得
	element = document.getElementById("button_00_load");
	// ボタンが押されたときに実行されるイベント
	element.onclick = function (){
		try{
			// "test_key" からデータを取り出す
			element_edit.value = localStorage.getItem("test_key");
		}catch(e){
			// エラーを出力
			element_edit.value = e + "\n" + element_edit.value;
		}
	};


	// 保存ボタンの element を取得
	element = document.getElementById("button_00_save");
	// ボタンが押されたときに実行されるイベント
	element.onclick = function (){
		try{
			// "test_key" にデータを保存する
			localStorage.setItem("test_key",element_edit.value);
		}catch(e){
			// エラーを出力
			element_edit.value = e + "\n" + element_edit.value;
		}
	};


	// 削除ボタンの element を取得
	element = document.getElementById("button_00_del");
	// ボタンが押されたときに実行されるイベント
	element.onclick = function (){
		try{
			// "test_key" のデータを削除する
			localStorage.removeItem("test_key");
		}catch(e){
			// エラーを出力
			element_edit.value = e + "\n" + element_edit.value;
		}
	};
})();
```

こうでしょう。
参考したURLはhttp://hakuhin.jp/js/storage.html です。
文字などは自分で作って下さい。
WindowsPowerShell & C#マイナンバーのチェックデジットを計算する

# 多分源流
[Ruby - マイナンバーのチェックデジットを計算する - Qiita](http://qiita.com/qube81/items/fa6ef94d3c8615b0ce64)

# やってみましょう

## PowerShell
```ps1:Check-MyNumber.ps1
filter Get-CalcResult{
    if($_ -le 6 ){
        return [int]$digits[$digits.Length - 2 - $_] * ($_ + 1)
    }else{
        return [int]$digits[$digits.Length - 2 - $_] * ($_ - 5)
    }
}

function Check-MyNumber{
    param(
        [String] $MyNumber
    )
    if($MyNumber.Length -ne 12){
        throw New-Object ArgumentException("マイナンバーは12桁です")
    }

    $digits = $MyNumber -split "" 

    $checkDigit = $digits[$digits.Length - 2];

    $sum = 0
    (1..11) | Get-CalcResult | %{$sum += $_}

    $reminder = $sum % 11
    
    if($reminder -le 1 ){
        return $checkDigit -eq 0
    }else{
        return $checkDigit -eq (11 - $reminder)
    }
}

PS C:\> Check-MyNumber 123456789010
False
PS C:\> Check-MyNumber 123456789011
False
PS C:\> Check-MyNumber 123456789012
False
PS C:\> Check-MyNumber 123456789013
False
PS C:\> Check-MyNumber 123456789014
False
PS C:\> Check-MyNumber 123456789015
False
PS C:\> Check-MyNumber 123456789016
False
PS C:\> Check-MyNumber 123456789017
False
PS C:\> Check-MyNumber 123456789018
True
PS C:\> Check-MyNumber 123456789019
False
PS C:\> Check-MyNumber 023456789013
True
```

## C# 
既にやられている方いますが
[C#でマイナンバーのチェックデジットを計算する - Qiita](http://qiita.com/whitebell/items/5982055e6768960496db)

```csharp:Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Console;

namespace ValidateMyNumber
{
    class Program
    {
        static void Main(string[] args)
        {
            WriteLine(ValidateMyNumber("123456789010")); //=>False
            WriteLine(ValidateMyNumber("123456789011")); //=>False
            WriteLine(ValidateMyNumber("123456789012")); //=>False
            WriteLine(ValidateMyNumber("123456789013")); //=>False
            WriteLine(ValidateMyNumber("123456789014")); //=>False
            WriteLine(ValidateMyNumber("123456789015")); //=>False
            WriteLine(ValidateMyNumber("123456789016")); //=>False
            WriteLine(ValidateMyNumber("123456789017")); //=>False
            WriteLine(ValidateMyNumber("123456789018")); //=>True
            WriteLine(ValidateMyNumber("123456789019")); //=>False
            WriteLine(ValidateMyNumber("023456789013")); //=>True

            ReadLine();
        }

        public static bool ValidateMyNumber(string mynumber)
        {
            if (mynumber.Length != 12)
                throw new ArgumentException("マイナンバーは12桁です");

            var digits = mynumber.Select(x => int.Parse(x.ToString())).ToArray();

            var checkDigit = digits.Last();

            var reminder = Enumerable.Range(1, 11)
                .Select(n => digits[digits.Length - 1 - n] * (n <= 6 ? n + 1 : n - 5))
                .Sum() % 11;
            return checkDigit == (reminder <= 1 ? 0 : 11 - reminder);
        }
    }
}

```
JavaScriptだけでTOPへ戻る


こんなリンクつくって
```
  <div id="toTop">
    <a href="" onclick="scrollToTop(); return false">トップに戻る</a>
  </div>
```
こうjs書いて
```
  function scrollToTop() {
    var y = document.body.scrollTop || document.documentElement.scrollTop;
    if(y) {
      scrollTo(0, y/=1.06);
      setTimeout(scrollToTop, 1);
    }
  }
```
こうするとそれっぽい
```
  #toTop {
    position: fixed;
    bottom: 18px;
    right: 18px;
  }
```
Rubyってなんだ

はじめまして。
最初の記事がこんなタイトルでいいのかワタクシ。

Ruby経験ゼロ（実はちょっとだけかじったことあるくらい）のワタクシが技術者認定試験の合格を目指して勉強を開始したのですが、
RubyってWebアプリ開発用なんだっけ？　という基本的なこともわからない状態からのスタート。 
こんなド初心者の疑問を色々集めてみました。

この記事は疑問があればどんどん更新します。
***

#**というかRubyってなんだ**
[Ruby 公式HP](https://www.ruby-lang.org/ja/) 
[Wikipedia](https://ja.wikipedia.org/wiki/Ruby?oldformat=true)

**オープンソースの動的なプログラミング言語で、シンプルさと高い生産性を備えています。**
**エレガントな文法を持ち、自然に読み書きができます。**

エレガントらしい。

**スクリプト言語が用いられてきた領域でのオブジェクト指向プログラミングを実現**

- 今までのスクリプト言語はオブジェクト指向プログラミングができなかった？


#**RubyOnRailsってなんだ**
[Ruby On Rails 公式HP](http://rubyonrails.org/)
[WikiPedia](https://ja.wikipedia.org/wiki/Ruby_on_Rails)

- MVCモデルアーキテクチャに基づき構築されたOSSのWebアプリケーション・フレームワーク。
- RoRまたはRailsとも呼ばれる。

他言語は設計時にMVCモデルに基づくように設計していたが、RoRはフレームワークの仕様としてサポートされている。
これが・・・・エレガントさ！？

#**Ruby技術者認定試験ってなんだ**
[Ruby Association公式HP](http://www.ruby.or.jp/ja/certification/examination/)

>1.Rubyの学習・教育において、到達目標となる技術レベルの基準を示す
2.Ruby技術者が、技術力を確認し、他者にアピールする基準を示す
3.企業などのRuby技術者の採用（雇用及び開発委託）に際しての判断の基準を示す

技術レベルの基準の明確化、アピールなどが目的。

試験区分には２つあり、

###Ruby Association Certified Ruby Programmer Silver version 2.1

- Rubyの背景、Rubyの文法の知識、Rubyのクラスとオブジェクト、標準ライブラリの知識など基本的なこと

###Ruby Association Certified Ruby Programmer Gold version 2.1

- Silverの内容を更に掘り下げた知識に設計やオブジェクトに関する知識

**Platinumも策定中らしい。**

#**RubyってWebアプリ用なんでしょ？**
Rubyそのものはスクリプト言語。現に組み込みシステム向けにmRubyという実装がある。
RoRはあくまでRubyのフレームワークの１つ。
本当は間違っている「3桁カンマ編集」


# 断り書き

- たぶん、みんなが知っていることしか書いてないです。
- 結論とかも特にないです。
- タイトル詐欺です。

# カンマ or コンマ

「，」のことを「カンマ」といったり「コンマ」といったりしますよね。
外国語を日本語で表記するときのゆれのせいなのか、元となった言語（英語とドイツ語）の差なのか。

wikipedia：[コンマ](https://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%B3%E3%83%9E)

> コンマ (comma) は、カンマとも呼ばれ、約物のひとつ。

一応、このあとは「コンマ」で統一します。
タイトル詐欺です。
だって「3桁カンマ編集」とはいうけど、「3桁コンマ編集」はあまり聞かない気がしますので。
どうでもいいですが。

# 各国の慣習

世界各国で数字の3桁区切りと小数点の文字がバラバラであることは有名だと思います。
OSや開発言語とかの Locale の説明でよく聞きますよね。

| 国 [^1] | 区切り文字 | 小数点 |
|:--:|:--:|:--:|
| アメリカ、イギリス | コンマ | ピリオド、あるいは中黒 |
| フランス、南アメリカ | スペース | コンマ |
| ドイツ、イタリア、スペイン、ポルトガル | ピリオド | コンマ |
| インド | コンマ [^2] | ピリオド |

[^1]: 国単位じゃなく、言語・文化で異なるのかもしれませんが…。
[^2]: インドの場合、3桁ごとに区切るわけじゃないみたいですが。最初は3桁で、その上は2桁毎みたいです。

よく、スポーツとかでタイムを読み上げるときに「０コンマ何秒」というのは、小数点をコンマで表記する国から輸入した用法なんでしょうね。

- wikipedia：[小数点](https://ja.wikipedia.org/wiki/%E5%B0%8F%E6%95%B0%E7%82%B9)

# 国際単位系の決定

SI(国際単位系)の決まりでは以下のようになっているみたいです。

- 数値において、コンマまたはピリオドは数値の整数部分と小数部分とを分けるためにだけ用いられる
- 数値は読取りを容易にするために3桁ずつに区切ってよい。ただし、その区切りの空白に決してピリオドもコンマも挿入してはならない

1948年の第9回国際度量衡総会の決議7で決定。
2003年の第22回国際度量衡総会の決議10において再確認。

なんとなくフランス有利な感じの決定に思えるけど、メートル法（国際単位系の前身）がフランスの発案だったのと関係あるのかな。

最近の電卓の3桁区切りがコンマのように下にはなくて上の方（アポストロフィー ？）になっているのは、国際単位系と日本の一般的な表記の折衷案なんでしょうかね。

- wikipedia：[国際単位系](https://ja.wikipedia.org/wiki/%E5%9B%BD%E9%9A%9B%E5%8D%98%E4%BD%8D%E7%B3%BB)
- wikipedia：[国際度量衡総会](https://ja.wikipedia.org/wiki/%E5%9B%BD%E9%9A%9B%E5%BA%A6%E9%87%8F%E8%A1%A1%E7%B7%8F%E4%BC%9A)
- [第 22 回国際度量衡総会決議](https://www.nmij.jp/~imco/metric/22ndCGPM.pdf) PDF形式
- [国際単位系(SI)について](https://www.jstage.jst.go.jp/article/tetsutohagane1955/59/8/59_8_1174/_pdf) PDF形式

# 日本の場合

日本の場合には、「公用文作成の要領」などの中で数字の区切り方をどのように表記するべきか書いてあるようです。

文化庁のサイトをのぞいてみたところ、以下の資料が見つかりました。

HOME > 国語施策・日本語教育 > 国語施策情報 > 参考資料
http://www.bunka.go.jp/kokugo_nihongo/sisaku/joho/joho/kijun/sanko/index.html

- 公用文に関する諸通知 / 公用文作成の要領
- くぎり符号の使ひ方

## 公用文作成の要領

HOME > 国語施策・日本語教育 > 国語施策情報 > 参考資料 > 公用文に関する諸通知
[公用文作成の要領](http://www.bunka.go.jp/kokugo_nihongo/sisaku/joho/joho/kijun/sanko/koyobun/pdf/yoryo_ver02.pdf) PDF形式

>大きな数は，「5,000」「62,250 円」のように三けたごとにコンマでくぎる。

## くぎり符号の使ひ方

HOME > 国語施策・日本語教育 > 国語施策情報 > 参考資料
[くぎり符号の使ひ方](http://www.bunka.go.jp/kokugo_nihongo/sisaku/joho/joho/kijun/sanko/pdf/kugiri.pdf) PDF形式

>十三、数字の位取りにうつ（例 40 41 42） 。
>〔附記〕現行の簿記法では例 40 41のごとくうつが、わが国の計数法によれば、例 41は 42のごとくうつのが自然である。

>( 40) 一、二三五
>( 41) 一、二三四、五六七、八九〇
>( 42) 一二、三四五六、七八九〇

>六、小数点に用ひる（例８） 。

> (８) 一三・五

※元の文書は縦書きです。

縦書きの場合、「テン（読点）」を位取りに、「ナカテン（中黒）」を小数点に用いるとのこと。
位取りは４桁区切りでもいいみたい。
ES6(ECMAScript6)ではJavaScriptでclassが使える

#初めに
これからJavaScriptを使うことになるのだが,そこでECMAScriptなるものの存在を知った.あんまりJavaScriptに触れたことがなく,全くわからなかったが,結構重要そうなので少し調べてみると,以前挫折した,JavaScriptのクラスがES6ではJavaなどのclassっぽく書けるようになるようなので記事を書いた.

#ECMAScript
[Wikipedia - ECMAScript](https://ja.wikipedia.org/wiki/ECMAScript)参照

#環境
今回環境として,[Babel ・ The compiler for writing next generation JavaScript](http://babeljs.io/repl/)を利用した.
これは,ブラウザからBabelのトランスパイルをしてくれるもので,今回は便利だった.
また,変換したES5のソースが見れるのでいかにクラスの書き方が単純化されたかがわかる.

#実装
```js:class_construct_extends.js
class Foo {
  //同名の関数ではなくconstructでコンストラクタを定義する.
  constructor( name ){
    this.name = name;
  }
  echoName( ){
    console.log( this.name );
  }
}

class Boo extends Foo {
  constructor( name ){
    super( name );
  }
  echo( ){
    super.echoName( );
  }
}

class Too extends Foo {
  constructor( name ){
    super( name );
  }
  echo( ){
    super.echoName( );
  }
}

var BooInstance = new Boo( "kokoax" );
var TooInstance = new Too( "hawai" );

BooInstance.echo();       //クラスが実装できているのがわかる.
BooInstance.echoName();   //継承しているのがわかる.

//配列にも入る.
var ArrayInstance = new Array( BooInstance, TooInstance );

ArrayInstance[0].echo();
ArrayInstance[1].echo();


```
を実行すると

    kokoax
    kokoax
    kokoax
    hawai
が表示される.

#終わりに
以前,JavaScriptでクラスはどうなっているのか気になって,調べた時prototypeを使ったやり方が出てきてかなりややこしくなって途中で投げ出してしまうほどだったが,これならぐっとクラスを使いやすくなると思う.

#参考文献
[JS.next JavaScriptの最新実装情報を追うブログ Class構文が実装された](http://js-next.hatenablog.com/entry/2014/11/01/034607)
[Babelで学ぶECMAScript6（入門編）](http://codezine.jp/article/detail/8717)
Executor - Windows10でBlueWind代替アプリ

メモ
Windows10 64bitを入れたときに、Bluewindが全く動作しなくなったので代替アプリを探した。
様々なソフトを試したが、デンマーク製？の[Executer](http://executor.dk/)が一番操作感覚が近かった。

ただし、ExecutorのSettting->Misc.にある、"Use clipbord sniffer"がオンになっていると、Excelで切り貼りしたときに「クリップボードを空にできません」というエラーが出てしまうので、オフにする必要がある。
RGB Matrix(adafruit PRODUCT ID: 420)は2Aの電源が必要

# 結論
- 電源は2A程度の用意が必要(定格は1Aだけど、説明書通り2A無いと動かないよ)
- Uno,MegaでないDuemilanove互換機でも動いた

# 試した構成
秋月電子のＡＴＭＥＧＡ１６８／３２８用マイコンボード（Ｉ／Ｏボード）で作成したArduino互換機（マイコンは328)
RGB LED　Matrix　32x16（adafruit PRODUCT ID: 420）

# 参考サイト
https://learn.adafruit.com/32x16-32x32-rgb-led-matrix/

# 使い方（ライブラリをダウンロード・インストールしてサンプルの実行）

1.Download ZIPボタンを押したファイルをダウンロードする。
https://github.com/adafruit/RGB-matrix-Panel
https://github.com/adafruit/Adafruit-GFX-Library
2.ArduinoIDEのメニュー スケッチ-->Include Library-->Add .ZIP Libraryで、上記2つのファイルをインストールする。

3.スケッチの例 RGB matrix Panel testshapes_16x32を読込む。
4.コンパイルしてマイコンに送る。
5.以下のように配線する。
別途5Vの電源が必要。※必ず2A以上の電源を用意する事。(Arduinoの５VやACアダプタの容量の小さい物では、動作不良になるので注意。1.2Aではダメだった。1.8A,2AはOKだった)

| RGB LED Matrix | Arduino |
|---------------:|--------:|
|R1|2|
|G1|3|
|B1|4|
|R2|5|
|B2|6|
|G2|7|
||
|A|A0|
|B|A1|
|C|A2|
|Lat|A3|
||
|CLK|8|
|OE|9|
||
|GND|GND|
CakePHP3でバリデーションエラーをリダイレクト先に表示する方法

# 動作するコード
actionの引数```$id```が```null```の時、Userテーブルにユーザ情報を新規登録し、
```$id```が数値の場合に既存ユーザ情報をフォームに展開して更新処理を行わせる画面の想定。

__自分自身にPOST → 保存処理 → 自分自身にリダイレクト(GET)__という、
GETとPOSTの役割を明確に切り分ける実装を想定しています。

```php:UserController.php
use Cake\Routing\Router;

class UserController extends BaseController 
{
    public function edit($id = null) 
    {
        $table   = TableRegistry::get('User');
        $session = $this->request->session();
        
        if ($this->request->is('post')) 
        {
            // newEntityもバリデーション効果を持つ
            $entity = $table->newEntity($this->request->data['User']);
            
            // バリデーションエラーを検出
            if ($entity->errors())
            {
                // バリデーションエラー情報をエンティティごとセッションへ保存
                $session->write('ValidationError', $entity);
                return $this->redirect(Router::url());
            }
            
            // 保存処理
            $table->save($entity);
            return $this->redirect(Router::url());
        }
        
        // セッションにバリデーションエラーを保持したエンティティが保存されていないか調査
        $set_user = $session->read('ValidationError');
        $set_user = ! empty($set_user) ? $set_user : $table->find()->where(['id' => $id])->first();
        
        // エンティティはきちんと削除
        $session->delete('ValidationError');
        
        // TemplateにUserエンティティを送る
        $this->set('user', ['User' => $set_user]);
    }
}
```

```php:edit.ctp
<?= $this->Form->create($user) ?>
    <?= $this->Form->input('User.name') ?>
    <?= $this->Form->submit() ?>
<?= $this->Form->end() ?>
```

# 注意するポイント
バリデーションエラーは、__Entityに格納したままリダイレクト先に引き継ぎ__ましょう。
[前回の記事](http://qiita.com/morisuke/items/335f112d42d6f9fbf8c0)に引き続き、```Form::create```の第一引数にEntityの配列を渡すことも忘れずにお願いします。

Entityが予期せぬタイミングで取れるとマズいので、セッションを使った後はしっかり削除して下さい。
アクセスする度に必ず消えるセッションを定義しておくと消し忘れがなくていいと思います。
CakePHPのフラッシュセッションはメッセージ表示に特化しているので、もっとラフに使えるものを自分で用意すると良いでしょう。
設定ファイルの特定行の末尾に文言を追記したい


作業中にハマったのでメモ。もっといい方法知ってる方のコメントお待ちしてます。。


```Bash:
cat testfile1
tanabata  tanzaku hanabi
momonosekku  hinaningyou goninbayashi
koinobori kabuto kintarou

```


testfile1 の2行目の`hinaningyou`という文字列を含む行の末尾に、`sanninbayashi`という文字列を追記したい。

##1. 文字列検索でヒットする行の行番号だけをシェル変数で確保


```Bash:
TMPVAR=`grep -n "hinaningyou" testfile | sed -e "s/:.*//"`
echo $TMPVAR
2

```

sedを使って`grep -n`の出力結果から行数以外の情報を削除します。


##2. 行を指定して行末に文言追加

先ほど用意したシェル変数を利用して、行を特定しつつsedで編集してみます。

```Bash:
sed -i -e "$TMPVAR s/$/ sanninbayashi/" testfile1
cat testfile1
tanabata  tanzaku hanabi
momonosekku  hinaningyou goninbayashi sanninbayashi
koinobori kabuto kintarou

```

できました。

本当はもうちょっと複雑なことをやったのだが、sedが肝だったのでメモ。
arrow-funcitions/object-assignを使ったインスタンスのメソッド群の出荷方法

[superagent](https://github.com/visionmedia/superagent)のように、シンプルに関数群を返すモジュールを作りたいと思いました。

```js
import superagent from 'superagent'
console.log(typeof superagent)     // function
console.log(typeof superagent.get) // function
console.log(typeof superagent.post)// function
console.log(typeof superagent.put) // function
console.log(typeof superagent.del) // function
```

これは、モジュールを利用する側にとって、モジュール名をすぐに実行すれば、だいたい予測通りの結果を得られるので、READMEを軽く見るだけで利用を開始できる利点があります。

```bash:babel6系だと以降の説明で死ぬ
babel -V
# 5.8.29 (babel-core 5.8.33)
```

クラスベースにメソッドを組んで、[シングルトンのインスタンスとコンストラクタを同時にexportする](https://github.com/59naga/superserver/blob/d7c7ef0b1c8ebad5fe9fcbcc9392157ca719747d/src/index.js#L90-L91)方法[^1]は、テストがしやすく継承もしやすいです。

[^1]: `export`と`export default`を併用すると、require文がうまく動作しなくなる（exports.defaultに代入され、module.exportsに代入されず、[babel外で使う場合はrequire('my-module').defaultとして参照しなければならなくなる](https://github.com/59naga/superserver/blob/master/superserver#L4)）点に注意してください

```bash
babel-node my-module.test.js
# true
```

```js:my-module.test.js
import myModule from './my-module'
myModule.method()
```

```js:my-module.js
class MyModule{
  method(){
    console.log(this instanceof MyModule)
  }
}

export {MyModule}
export default new MyModule
```

importのデフォルトを`method`にしたかったので、[arrow-functions](http://babeljs.io/blog/2015/06/07/react-on-es6-plus/#arrow-functions)を使って、インスタンスへバインドした状態のメソッドをexportしました。

```bash
babel-node my-module.test.js --stage 0
# true
```

```js:my-module.test.js
import method from './my-module'
method()
```

```js:my-module.js
class MyModule{
  method= ()=>{
    console.log(this instanceof MyModule)
  }
}

export {MyModule}
export default (new MyModule).method
```

この状態ですと、新しくメソッドを追加したさいに、インスタンスを再生成して利用しなければならないので、やや使い勝手が悪く見えます。

```bash
babel-node my-module.js --stage 0
# true
# true
```

```js:my-module.test.js
import method,{MyModule} from './my-module'
method()// true
new MyModule().method2()// true
```

```js:my-module.js
class MyModule{
  method= ()=>{
    console.log(this instanceof MyModule)
  }
  
  // これ叩きにくい
  method2= ()=>{
    console.log(this instanceof MyModule)
  }
}
```

そこで、[object-assign](https://github.com/sindresorhus/object-assign)を使用して、メソッド群をマージします。

```bash
npm install object-assign --save

babel-node my-module.test.js --stage 0
# true
# true
```

```js:my-module.test.js
import myModule from './my-module'
myModule()// true
myModule.method2()// true
```

```js:my-module.js
import objectAssign from 'object-assign'

class MyModule{
  method= ()=>{
    console.log(this instanceof MyModule)
  }

  method2= ()=>{
    console.log(this instanceof MyModule)
  }
}

const myModule= new MyModule
const API= objectAssign(myModule.method,myModule)
export default API

export {MyModule}
```

これで、冒頭に紹介した`superagent`のような、シンプルな関数群を提供できるようになりました。
ファイルを検索して対象のテキストに含まれるファイル名と同じものがあったらそのファイルのフルパスをアウトプットに保存する



```
param($targetpath,$txtpath,$OutputFile)

$searchtxt =Get-Content $txtpath
$searcharray = $searchtxt.Split("\r\n")

foreach($s in Get-ChildItem -file -Recurse -Path $targetpath){

if($searcharray -contains $s){
    echo $s.FullName | Out-File -Append -Encoding oem $OutputFile
    }
}
```
TokyoWebmining 49th で発表してきました

先日、[TokyoWebminig#49](http://d.hatena.ne.jp/hamadakoichi/20151024/p1)にて発表させていただいたので、その時のことを書こうと思います。

# 階層ディリクレ過程とマルコフ確率場を利用した教師なし画像領域分割

画像領域分割問題をクラスタリング問題として解く場合に用いる確率モデルの提案です。
画像をマルコフ確率場という確率モデルを使ってモデリングしました。事前分布に階層ディリクレ過程を導入し、ノンパラメトリックモデルとして定式化しています。
資料は[こちら](http://www.slideshare.net/tn1031/twm-imseg)。

以下詳細です。

# マルコフ確率場
画像は空間的な依存関係を持つデータです。隣り合うピクセルの出力(色や輝度など)は似ています。
領域分割を解く際も、この性質を利用しない手はありません。

マルコフ確率場は格子状に広がる無向グラフで、エッジの存在する近傍同士でのみ依存関係を持ちます。結果として、隣のピクセルと同じ領域に属しやすくなるような力がかかります。

# ディリクレ過程
画像領域分割問題では、1枚の画像を何個の領域に分割するかが課題になります。2~3分割で済むものから20以上の領域が必要なものまで、画像によって様々です。

ディリクレ過程を導入すると、領域数をデータから自動的に求めてくれます。
わざわざ手で領域数を入力する必要がないので、非常に便利です。

モデルの話題からは逸れますが、ディリクレ過程は連続分布を離散分布に変換する操作です。定義から入ろうとすると意味が分からないですが、結局は離散分布を生成することしかやっていません。
ディリクレ過程によるノンパラメトリックモデルに興味のある方がもしいれば、事前分布が連続ではなく離散であることで得られる効果を徹底的に考え抜くことが、ディリクレ過程混合モデルの理解につながるのではと思います。

# 階層ディリクレ過程
ディリクレ過程事前分布モデルはは画像1枚に対するモデルでしたが、階層ディリクレ過程事前分布モデルは画像複数枚(画像データセット)を表現するモデルです。

画像データセットは似た様な画像を複数枚含んでいることが多いです。街の画像なら大抵人や車が写り込んでいますし、海の画像は海や砂浜などのパーツで構成されています。

撮影場所や時間帯が画像に影響すると考えると、画像データセットの画像は撮影条件である程度グルーピングできそうです。
このようなデータをgrouped dataと呼ぶそうですが、grouped dataの性質を考慮する工夫が階層化です。

学習の対象が画像単体から画像データセットになったので、ディリクレ過程も階層化して階層ディリクレ過程になったのである。ということです。

# 階層ディリクレ過程事前分布マルコフ確率場
結局どういうモデルかというと、

- マルコフ確率場のおかげで空間的依存関係を考慮できます
- ディリクレ過程のおかげで領域数を自動的に決めてくれます
- 階層化のおかげで画像の撮影条件の様なばらつきを吸収してくれます

ということです。

# 頂いたコメントなどをいくつか

> 深層学習による画像認識と比較したときのメリットは何か

完全教師なし学習なので、正解画像やタグがいっさい必要ありません。
　

> 深層学習と条件付き確率場を組み合わせたモデルがあるよ

[CRF as RNN](http://www.robots.ox.ac.uk/~szheng/crfasrnndemo/)
知りませんでした。かなり正確に分割できているように見えます。発想も面白いですし、気になります。
　

> 分割がうまくいく場合と失敗する場合の傾向と改善案

特徴量に色を使っているので、色が明確に異なる境界は分割できますが、色が似ているとなかなか難しいです。
色以外の特徴量を検討する必要があります。
　

> 画像をグレースケールにすると境界が見つけやすくなることがありますよ

特徴量の表現能力を大きくする為に次元を大きくすることばかり考えていたので、逆にグレースケールに落とすという発想はなかったです。とても参考になります。


# 所感

識別モデルがちやほやされる時代に生成モデルの話しても、興味を持ってもらえないのではと心配していましたが、実際は想像を遥かに上回る反応を頂けて驚きました。
質問コメント等くださった方、熱心に聞いてくださった方にとても感謝してます。
El Capitan で pdftk が動かなくなったので、cpdf で代用する。

# 概要
MacOSX を El Capitan にアップデートしたら、pdftk コマンドが止まるようになってしまった。
PDF ファイルに、別の PDF ファイルを上書きする「stamp」の機能を使うプログラムで必要な機能なので、非常に困る。

代用に cpdf というのを見つけたので、試してみたらうまくいった。

# インストール

Homebrew を利用。

```
brew install opam
```

そのあとは説明に従って、必要な処理をしていく（この辺、手順の復習必要）。

```
opam init
eval `opam config env`
```

とりあえず $HOME/.bash_profile に以下を追加（して、念のためターミナル再起動）。

``` $HOME/.bash_profile
. $HOME/.opam/opam-init/init.sh > /dev/null 2> /dev/null || true
```

cpdf 本体のインストール

```
opam install cpdf

which cpdf
# $HOME/.opam/system/bin/cpdf
```

というわけで、ユーザーの $HOME 以下に保存される様子。

# 活用

PDF ファイルにスタンプするプログラムを動かしたかったので、テスト。

```
cpdf -stamp-on stamp.pdf in.pdf -o out.pdf
```

・・・できた。
あとは本番で使用している方のプログラムの修正が必要だけど、とりあえずやりたいことはできた。

# 参考

- StackOverflowの記事
  [http://stackoverflow.com/questions/32505951/pdftk-server-on-os-x-10-11]   (http://stackoverflow.com/questions/32505951/pdftk-server-on-os-x-10-11)

- Coherent PDF Command Line Tools Community Release
  [http://community.coherentpdf.com](http://community.coherentpdf.com)

- GitHub johnwhitington/cpdf-source
  [https://github.com/johnwhitington/cpdf-source](https://github.com/johnwhitington/cpdf-source)

- OCaml Package Manager
　[https://opam.ocaml.org](https://opam.ocaml.org)
BeagleBoard-xM に Ubuntu 14.04 を導入する

# 1. はじめに

アーリーアダプターな先輩から譲り受けた BeagleBoard-xM を Ubuntu 12.04 で使っていましたが、テキトウにアップデートしていたら、起動しなくなってしまいました。
そこで、今回、Ubuntu を再導入するにあたって導入手順を整理しようと思います。

※ Windows での導入手順です。

※※ BeagleBoard-xM というマニアックな機器ですが、いくつかの手順は Raspberry Pi & Ubuntu でも使えると思います。そのあたりは、空気をお読み頂ければと思います。

# 2. (必要があれば) SD カードをフォーマットする

使用する SD カードが Raspberry Pi などで利用済みのモノだったりする場合、先頭の数 MB が /boot パーティションに割り当てられ、残りがルート (/) パーティションとして割り当てられていたりします。
BeagleBoard-xM で使用していたモノもそうなので、フォーマットしてキレイにしておきます。
しなくても良いのかもしれませんが。

1. SD Association から SD カードフォーマッターをダウンロードし、インストール
    - https://www.sdcard.org/jp/downloads/formatter_4/index.html
2. SDFormatter を起動し、オプション設定の論理サイズ調整を ON に設定し、フォーマット

# 3. BeagleBoard-xM 用 Ubuntu 14.04 イメージをダウンロードする

特に問題がなければ、14.04.2 で良いと思います。

- Ubuntu 14.04.2
    - https://rcn-ee.net/rootfs/2015-02-19/microsd/bbxm-ubuntu-14.04.2-console-armhf-2015-02-19-2gb.img.xz
- Ubuntu 14.04.1
    - https://rcn-ee.net/rootfs/2015-01-06/microsd/bbxm-ubuntu-14.04.1-console-armhf-2015-01-06-2gb.img.xz

1. イメージファイル .img.xz の .xz を解凍する  
ダウンロードしたイメージは、7-zip で圧縮されているため、解凍する必要があります。  
必要であれば、圧縮・解凍ツール 7-zip をダウンロードし、インストールください。
    - https://sevenzip.osdn.jp/

# 4. イメージファイルを SD カードに書き込む

Win32 Disk Imager を使用して書き込みます。

1. Win32 Disk Imager をダウンロードし、インストール
    - https://osdn.jp/projects/sfnet_win32diskimager/
2. イメージ bbxm-ubuntu-14.04.2-console-armhf-2015-02-19-2gb.img を選択し、書き込み先 Device を十分に確認し、\[Write] を押し、書き込む
3. そこそこ時間がかかり、完了後、SD カードを抜き、BeagleBoard-xM に挿入する

# 5. BeagleBoard-xM で Ubuntu を起動する

ディスプレイ, HDMI, キーボード, LANを取り付け、電源を刺せば、起動します。
ログイン画面が表示されれば、以下のユーザー名とパスワードでログイン可能です。

- ユーザー名：ubuntu
- パスワード：temppwd

# 6. パスワードを変更する

さすがにアレなので、パスワードを変更しておきます。

```
$ passwd
```

# 7. パーティションサイズを拡張する

この時点では、SD カードのうち 2GB しか使用していないため、最大容量まで拡張するために、以下の呪文を実行します。拡張するスクリプトを実行し、再起動されます。

```
$ cd /opt/scripts/tools
$ sudo ./grow_partition.sh
$ sudo reboot
```

# 8. (必要であれば) DNS サーバーのアドレスを修正する

なぜか DNS サーバーのアドレスが間違っており、名前解決に失敗してしまっていたため、修正しました。

```
$ sudo vi /etc/resolvconf/resolv.conf.d/tail
```

誤：nameserver 192.168.1.1
正：nameserver 192.168.0.1

```lang:/etc/resolvconf/resolv.conf.d/tail
...
nameserver 192.168.0.1
```

# 9. 日本語キーボードレイアウトへ変更する

導入初期設定は、英語キーボードなので、日本語キーボードに変更します。
真っ先に、これをやるべきかもしれません…。

```
$ sudo dpkg-reconfigure keyboard-configuration
$ sudo reboot
```

詳しい手順は、先人のこちらを参照します。

- [Ubuntu12.04 キーボード設定の変更 - Qiita](http://qiita.com/ktyubeshi/items/847b05b7879e2f45da54)

# 10. タイムゾーンの設定を設定する

```
$ sudo dpkg-reconfigure tzdata
```

Asia/Tokyo を選択します。

# 11. つづく
Node.jsのrequestモジュールを使ってHTTPSでPOSTリクエストを行う

#requestモジュール
requestモジュールは HTTP/HTTPS 通信を行うためのクライアント。

request - https://github.com/request/request

#全体のソースコード

```js
//requestをrequire
var request = require('request');

//ヘッダーを定義
var headers = {
  'Content-Type':'application/json'
}

//オプションを定義
var options = {
  url: 'https://hoge.com/api/v2/fuga',
  method: 'POST',
  headers: headers,
  json: true,
  form: {"hoge":"fuga"}
}

//リクエスト送信
request(options, function (error, response, body) {
  //コールバックで色々な処理
})
```

#解説
requestモジュール読み込み。

```js
var request = require('request');
```
ヘッダーを定義する。
今回の例ではjsonをPOSTするため、Content-Type に json を指定した。

```js
var headers = {
  'Content-Type':'application/json'
}
```
オプションを定義する。
レスポンスでjsonが帰ってくる場合、オプションに`json:true`を指定することでjsonエンコードの必要が無くなる。
( JSON.parseの必要が無くなる )

```js
var options = {
  url: 'https://hoge.com/api/v2/fuga',
  method: 'POST',
  headers: headers,
  json: true,
  form: {"hoge":"fuga"}
}
```
#おまけ
POSTの際にBasic認証が必要な場合は、オプションに `auth` を付け加えれば良い。

```js
var options = {
  url: 'https://hoge.com/api/v2/fuga',
  method: 'POST',
  headers: headers,
  auth: {
    user: "username",
    password: "password"
  },
  json: true,
  form: {"hoge":"fuga"}
}
```
Vim内で検索するときに大文字小文字を気にしない（ignore case）する方法


`\c`を検索の前に付けるそうです。

```
/\csomaword
```

と検索すれば`SomeWord`や`Someword`、`SOMEWORD`、`someword`といった単語を見つけられます。

基本的には`:set ignorecase`や`:set smartcase`をうまく設定しておくのがスマートだと思いますが確実にignore caseしている確信を得たいときには使えそうです。