OmniAICreator/Qiita-1.07M huggingface dataset:
Vert.x 3 でのEventbusサンプルの動かし方

## 概要
Vert.x 3.0.0の[サンプル](https://github.com/vert-x3/vertx-examples)に入っているEventbusを介したサーバー・クライアントのサンプルプログラムの動かし方のメモです。

## 追記(2016/2/9)
CentOS 7にて実行してみたところうまく動作しないので、調べてみたところ、Firewall-cmdでUDPのポートを開ける必要がありました。
```
firewall-cmd --add-port=54327/udp --zone=public --permanent
```
ポートNoは、Vertxインストールフォルダ配下にある、default-cluster.xmlに記載されているポート番号となります。

## cluster オプション
Eventbusを介して、プロセス間で通信するには、-clusterオプションを引数に渡します。

```bash
# サーバー側
$ cd core-examples/src/main/groovy/io/vertx/example/core/eventbus/pointtopoint
$ vertx run receiver.groovy -cluster 
```

```bash
# クライアント側
$ cd core-examples/src/main/groovy/io/vertx/example/core/eventbus/pointtopoint
$ vertx run sender.groovy -cluster 
```

## サーバープロセスの追加
サーバー側プロセスをもう１つ追加したい場合も同様に別ターミナルで-clusterオプションを指定して起動するだけです。

## Eventbus(プロセス間)の通信設定

$VERTX_HOME/conf/default-cluster.xml に サーバー間の通信設定が記載されています。
通信モードは３つあるようです。
* udp(デフォルト)
* tcp
* aws
OAuth(認証の仕組み)


# Oauthとは
オープンプロトコルであり、デスクトップ、モバイル、WebアプリケーションなどにセキュアなAPI認可 (authorization) の標準的手段を提供する。

# 背景　
Facebook/twitter/line/ソーシャルゲームなどといった、サービスはプラットフォームを展開していますが、それぞれのサービス機能を「API」として外部提供している。

## APIエコノミー
プラットフォームとその上で提供される第三者のアプリケーションが作り出す市場を、APIを中心にした「APIエコノミー」と言う。

## APIエコノミーで大切なこと
APIをたくさん利用する際に、標準化されたプロトコル(規約)が必要である。
そうでないとAPI利用コストが高くなってしまう。
その中でも、OAuthとはAPIの認証の標準プロトコルである。

# OAuth、API認証の流れ
[登場人物]
User
Oauth Servver(Line)
Oauth Client(Gunosy)

例)
Userは、Gunosyの記事をLineに流したい。

# 下準備、アプリ間の関係構築(Server - Clientの関係)
Lineのアプリケーション画面で、Gunosyのアプリケーションを登録して、
CousumerKeyと、ConsumerSecretを受け取る。

# クライアントから、アクセスキーを取得。
ConsumerKeyとConsumerSecretを使い、REQUEST_TOKEN_URLにアクセスして、アクセスキーを取得する。

# GunosyからLine認証画面にリダイレクトさせる。
ConsumerKeyとConsumerSecret、アクセスキーを用いて、AUTHORIZE URlにアクセス。

例)
記事をシェアする　→　Line →　emailとパスワードを入力してください。 
Gunosyに登録　→　Lineで登録　→　emailとパスワードを入力してください。


# Serverに対して、認証のリクエスト
入力されたら、Client(Gunosy)からServer(Line)にリダイレクトする。
どこからリダイレクトされたか識別できるように、Clientの識別情報を付与する。
OAuth2.0ではclient_id というパラメーターのこと。
(認証リクエストの方法はなんでもいい。最悪URL叩くだけでもいいw)

# ユーザー認証とアクセス権限付与
リダイレクトを受けたLine(Server)は、ユーザーを認証し、Gunosy(Client)に対してアクセス権限を付与するかUserに聞く。

# 認証後にClientに返す。
ユーザーがGunosyに対して、私のLineにアクセスしていいよ。と許可を出したら、
ServerからClientにリダイレクトします。　その際に、URLにはアクセス権限を示すトークンが含まれる。
OAuth2.0だと、webアプリとNativeでトークンの形式が違う。それぞれ「code」「access_token」と呼ぶ。 

# ClientからServerのAPIへのアクセス
Access Tokenを受け取ると、無効になるまでは何度でもそのAPIにアクセス出来る。
gitwatch > die() > logを吐き出してexit(2)

https://github.com/ggreer/the_silver_searcher/commit/0b89394f1ae602615012b2cbbce7d8da0b12fe2d

> Don't die if pthread_setaffinity_np() fails. Fixes #695.

「die」って何かと見たら

```
die("Error in pthread_create(): %s", strerror(rv));
```

のような関数を実行しているようだった。

<hr>
die()の定義

https://github.com/ggreer/the_silver_searcher/blob/master/src/util.c

```
void die(const char *fmt, ...) {
    va_list args;
    va_start(args, fmt);
    vplog(LOG_LEVEL_ERR, fmt, args);
    va_end(args);
    exit(2);
}
```

vplog()でログをとってexit(2)するための処理らしい。
allocator undefined for Data (TypeError) について

例えば

```sh
$ ruby --version
ruby 2.2.1p85 (2015-02-26 revision 49769) [x86_64-linux]
```

で

```rb
class Data
  def initialize
    puts "foo"
  end
end
dt = Data.new
```
を実行しようとすると
``new': allocator undefined for Data (TypeError)`
と怒られる。
`Data`というクラスが[既に定義されている](http://ruby-doc.org/core-2.2.1/Data.html)。別名に変える必要あり。
「10分前」「4時間前」「2日前」みたいなやつを作る

# 時間の相対表示
## WHAT
たとえばTwitterの投稿時間，絶対時間じゃなくて相対時間で表示されますよね（24時間以内ならですが）．

![time_ago.png](https://qiita-image-store.s3.amazonaws.com/0/14845/84bfabcf-73d5-d7d3-01f8-bb36367ed9b6.png)

これをどうやって実装するか．

## HOW
### Ruby on Railsの場合
Ruby on Railsでは[`tiem_ago_in_words`][time_ago_in_words]というViewHelperを利用すれば簡単に実装できます．

```erb
<span><%= time_ago_in_words(tweet.created_at) %></span>
```

HTML的にちゃんとするとしたら，以下のように書くのがベストですかね．

```erb
<time datetime="<%= tweet.created_at %>">
  <%= time_ago_in_words(tweet.created_at) %>
</time>
```

長いのでHamlで書きましょうか．

```haml
%time(datetime="#{tweet.created_at}")= time_ago_in_words(tweet.created_at)
```

### JavaScriptの場合
さいきんのナウいWebアプリの流行に乗って，ajaxでツイートを取得して表示したい時もありますよね？ APIレスポンスに`time_ago_in_words(tweet.created_at)`を載せてしまうのでもいいですが，ここはオシャレにJS側で処理してみましょう．

実は[Moment.js][momentjs]の[`fromNow()`][fromnow]を利用すれば簡単です．
（Rails側で`DateTime`を`to_s`したものをそのままぶち込んで大丈夫です）

```js
// tweet.created_at === "2015-07-01T12:00:00+09:00"
moment(tweet.created_at).fromNow()
```

```html
<time datetime="{{tweet.created_at}}">
  {{moment(tweet.created_at).fromNow()}}
</time>
```

ちなみに[Moment.jsのlocaleを変更する][momentjs-locale]ことで日本語化/i18nも簡単に出来ます．

AngularJSとかで使いたい人はdirectiveやfilterでラップしてあげるといいと思います．

# References
* [#time_ago_in_words() - ActionView::Helpers::DateHelper][time_ago_in_words]
* [Moment.js][momentjs]
* [Time from now - Moment.js | Docs][fromnow]
* [Relative Time - Moment.js | Docs][momentjs-locale]

[time_ago_in_words]: http://api.rubyonrails.org/classes/ActionView/Helpers/DateHelper.html#method-i-time_ago_in_words
[fromnow]: http://momentjs.com/docs/#/displaying/fromnow/
[momentjs-locale]: http://momentjs.com/docs/#/customization/relative-time/
[momentjs]: http://momentjs.com/
laravelのRoute::controller で NamedRoute を使う


例えばメニューリストで現在表示しているページの部分だけ装飾を変えたい時、cssのclassに'active'を付け加えたい等といった感じの時に`NamedRoute`だと楽なのだけど、 `Route::controller` で指定されてる時だとメソッドに名前をつける方法がドキュメントにものってなくてわからなかったのでソースを追っかけてわかったのでメモ。ちなみに、Laravel4.2以降な気配。


```routes.php
<?php

Route::controller( 'admin', 'adminController', [
  'getIndex' => 'admin_index',
  'getUsers' => 'admin_users',
  'メソッド名' => '名前'
] );
```

メソッド名は省略せずに書く必要有り。


こうやればメニュー画面などで使えるようになる。

```menu.ctp
<ul>
  <li class="<?= Route::currentRouteNamed('admin_index') ? ' active' : '' ?>"><a href="/admin/">管理画面</a></li>
  <li class="<?= Route::currentRouteNamed('admin_users') ? ' active' : '' ?>"><a href="/admin/users">全ユーザ一覧</a></li>
</ul>
```
Emacs の Directory Variables でディレクトリ毎に Emacs の設定を自動で切り替える

[GNU Emacs Manual: Directory Variables](http://www.gnu.org/software/emacs/manual/html_node/emacs/Directory-Variables.html) の話です。

「このディレクトリ以下のファイルだけはハードタブを使いたい」みたいな状況では、これを使うと便利です。

具体的には、該当ディレクトリに `.dir-locals.el` を配置します。

```el:.dir-locals.el
((c-mode . ((c-default-style . "linux")
            (indent-tabs-mode . t)
            (fill-column . 80))))
```

こういう記述をすることで、この `.dir-locals.el` を含むディレクトリ以下のファイルで `c-mode` が使用されるときに、インデントのスタイルが Linux のそれになり、ハードタブになり、段落の詰め込みが80文字の場所で行われるようになります。

すべての major mode に対して設定を適用したい場合は `nil` を指定します。

```el:.dir-locals.el
((c-mode . ((c-default-style . "linux")
            (fill-column . 80)))
 (nil . ((indent-tabs-mode . t))))
```

こうすると、あらゆる major mode でハードタブが使用されるようになります。

上記のドキュメントには、サブディレクトリに対してのみ設定を適用する方法なども説明されています。

# Vim の方から来た方について

[vim-localvimrc という Vim で似たようなことをするプラグイン](https://github.com/embear/vim-localvimrc)があるようです (使ってないのでよくわかりません)
c++ > Shallow copy / Deep copy

C++のためのAPIデザイン by マーティン・レディ
という本を読んでいる中で、copy assignment operator関連で
- shallow copy
- deep copy
というのが出てきた。

その違いは何か?

<hr>
http://www.learncpp.com/cpp-tutorial/912-shallow-vs-deep-copying/

> <font color=red>shallow copy</font> (also known as a <font color=red>memberwise copy</font>)
> A <font color=red>shallow copy</font> means that C++ copies each member of the class individually using the assignment operator. 
>...
> A <font color=red>deep copy</font> duplicates the object or variable being pointed to so that the destination (the object being assigned to) receives it’s own local copy.

<hr>
http://stackoverflow.com/questions/184710/what-is-the-difference-between-a-deep-copy-and-a-shallow-copy

by S.Lott (Oct 8 '08 at 20:29)
> <font color=red>Shallow</font> copies duplicate as little as possible. A shallow copy of a collection is a copy of the collection structure, not the elements. With a shallow copy, two collections now share the individual elements.
...
<font color=red>Deep</font> copies duplicate everything. A deep copy of a collection is two collections with all of the elements in the original collection duplicated.

by ha9u63ar (Jan 31 '13 at 23:39)
> Deep copy:... The correct term to use would be cloning

他にもいろいろ回答がついている。
新人と２人３脚でScala,Haskellのステップアップする 99problems （１０問目）

### 関連

@nobsun さんに関連記事をいただきました。ありがとうございます。

[ランレングス変換](http://qiita.com/nobsun/items/5518acd626e81c5944fb)


ちょっとずつですが、関数型言語もステップアップしたいよね、ということで、
以下のサイトの問題をみながら、できるだけ時間をかけずに、簡単なリストの操作を覚えていきます。

新人さんがScalaで、自分はHaskellでごにょごにょとしていこうとしています。

### 問題が掲載されているサイト

https://wiki.haskell.org/99_questions
http://aperiodic.net/phil/scala/s-99/

### 本投稿で利用するお題

10問目

P09の関数を利用して、パックされた子リストを、（要素数、重複なし要素）の形のタプルに、して表現せよ

```scala

Run-length encoding of a list.
Use the result of problem P09 to implement the so-called run-length encoding data compression method. Consecutive duplicates of elements are encoded as tuples (N, E) where N is the number of duplicates of the element E.
Example:

scala> encode(List('a, 'a, 'a, 'a, 'b, 'c, 'c, 'a, 'a, 'd, 'e, 'e, 'e, 'e))
res0: List[(Int, Symbol)] = List((4,'a), (1,'b), (2,'c), (2,'a), (1,'d), (4,'e))

```

### 書いてみました

```scala
class P10 {
    def encode[T](list: List[T]):List[(Int, T)] = { 
        def recur(elem: T, acc: List[(Int, T)]): List[(Int, T)] = { 
            acc match {
                case x :: xs if (elem == x._2) => (x._1 + 1, elem) :: acc.drop(1)
                case x :: xs => (1, elem) :: acc 
                case Nil => List((1, elem))
            }
        }
         
        var initList: List[(Int, T)] = List()
        list.foldRight(initList)((elem, acc) => recur(elem, acc))
    }
}
```


```hs
encode :: [Char] -> [(Int, Char)]
encode [] = []                                                                                                                                                                                               
encode lst = reverse (encode' [] lst)
              
encode' :: [(Int, Char)] -> [Char] -> [(Int, Char)]
encode' []     (c:cs) = encode' [(1, c)] cs
encode' lst    []     = lst 
encode' (a:as) (c:cs) 
    | snd a == c = encode' ((fst a + 1, snd a):as) cs
    | otherwise  = encode' ((1,c):a:as) cs
```

### 感想

Tupleつかっちゃいます。。
これはもうちょっとすっきりした書き方もあると思うので要検討ですね。
はじめてのScala DBテーブルのカラム名を変換

#Scalaでカラム名を適当な名前に変換するツールを作る。

##やりたいこと

日本語で書かれた単語から、予めプロジェクトごとに用意された辞書を元に、適当なカラム名を出力するツールを作ります。
ユーザ　=>　USER
のような変換が目指すところです。

複数の単語で構成されるカラム名も同様に変換されなくてはなりません。
ユーザ名　=>　USER_NAME
ユーザID =>　USER_ID

今回は、Scalaのパターンマッチを使って、このロジックをスマートに書こうと思います。

##準備

まず、辞書を引っ張ってきます。

```scala
val dictionary: List[Map[String, Any]] = DB readOnly {implicit session =>
        SQL("select * from henkanjisyo").map(rs => rs.toMap).list().apply()
    }
```

##本文

辞書に対して与えられた単語のパターンマッチをします。さらに、マッチした単語があったかどうかで、マッチングを行って、なければ与えられた単語の末尾を一文字削って、関数に再帰させます。二番目のパターンマッチでは、パターンガードを使っています。

```scala
def logic2physic(dictionary: List[Map[String, Any]], targetStr: String, stock: String): String = {
    var destStr = ""
    var thisStock = ""
    var thisTarget = ""
    dictionary.foreach{article =>
      article("BF").toString match {
        case `targetStr` =>
          destStr = article("AF1").toString

        case _ => Nil
      }
    }

    destStr match {
      case "" if targetStr.isEmpty =>
        return "\n[error] No word correspond to the given word\n"

      case "" if !(targetStr.isEmpty) =>
        thisStock = targetStr.last.toString + stock
        thisTarget = targetStr.init
        return logic2physic(dictionary, thisTarget, thisStock)

      case _ if !(stock.isEmpty) =>
        destStr += logic2physic(dictionary, stock, "")
        return destStr

      case _ if stock.isEmpty =>
        return destStr

    }

  }
```

実際に動かしてみると、変換された値が返されます。

```scala
val target = "ユーザ名"
val destStr = logic2physic(dictionary, target, "")
print(destStr)        //USER_NAMEが出力される。
```
例えばBrowserifyをなんて発音するのかわからない時にとるべき行動

JSをやっていると日々いろんなフレームワークやらツールに出会いますが、
それを人に口で話すときに読み方をなんて読むのかわからなくて変な汗をかく時がたまにあります。

最近、読み方がわからなかった言葉がこれです。

*Browserify*

![スクリーンショット 2015-07-03 13.49.25.png](https://qiita-image-store.s3.amazonaws.com/0/5565/6644bd1d-d01b-6c72-9d91-b00d063baa67.png)

http://browserify.org/

私はリアルで人とBrowserifyについて話すことがないので、
口にだすことがありませんでした。

しかし、最近チーム内でBrowserifyを導入することになったので、
Browserifyを口にださなくてはいけなくなりました。
他のメンバーはBrowserifyを知らないのでなんて読むかも当然知りません。

こうゆう状況は、自分が間違えた読み方をしてしまうとみんな間違えて覚えてしまう可能性があります。
うかつに変な読み方をした時の罪は重いのではないかと思います。

そこで私がとった行動を書いておきます。

### 既存の英単語から名前がとられているか調べて見る。

wikiで検索してみます。
https://en.wikipedia.org/wiki/Browserify

今回は残念ながら他に存在する英単語ではなさそうです。
オリジナルの言葉のようです。

絵やキャラクターから語源を考えています。

![スクリーンショット 2015-07-03 13.49.38.png](https://qiita-image-store.s3.amazonaws.com/0/5565/cd1f9634-8464-2d56-acc9-138b13c31796.png)

魔法使いのような老人がかめはめ波みたいなのだしています。
語源や発音のヒントにはならなさそうです。

### chromeやMacのスピーチで読ませてみる。

デフォルトでは英単語でも日本語読みをしてくれます。
読ませたところ「ぶらざりふぁい」と発音してくれました。

やはりはじめて出会う単語なのでこれであっているのか気になります。
英語発音でも確認したいところです。

英語読みをさせるためにスピーチの担当をアメリカ人に変更します。

![スクリーンショット 2015-07-03 11.51.57.png](https://qiita-image-store.s3.amazonaws.com/0/5565/be6bed78-e49c-da71-d103-153ebda42dae.png)

インストールすると英語読みしてくれます。

読ませると「ぶらぁーざりふぁい」とよんでいました。

音を聞きたい場合は[こちら](http://www.ispeech.org/text.to.speech?link=http%3A%2F%2Fwww.ispeech.org%2Ftext.to.speech%3Fvoice%3Dusenglishmale%26action%3Dconvert%26speed%3D0%26text%3DBrowserify)
(iSpeechというサイトで再生しています。)

chromeに拡張をいれると右クリックで発音させることができます。
けっこう便利です。

https://chrome.google.com/webstore/detail/speakit/pgeolalilifpodheeocdmbhehgnkkbak/related


### youtubeで調べてみる。

スピーチはしょせん機械なので、コミュニティ内でどう読まれているか気になるところです。
実際に存在する単語なら問題ないのですが。

最近はyoutubeにたくさん解説動画があがっています。
Browserifyについて説明している動画もあるかもしれません。

調べてみたところ。
Browserifyについて話している動画がずばりみつかりました。

https://youtu.be/78_iyqT-qT8?t=8s

確認したところ、ぶぁらぁざりぃふぁい、と発音してました。

ぶらさりふぁい、と日本語らしく発音しても問題なさそうです。

これで裏付けは完璧です。安心して口にだせます。


### あとがき

正しい発音がわかるとyoutubeで英語の技術的な動画をみていても理解できたり、
スペルを覚えすくなったりとコミュニケーション以外にも色々いいことがある気がします。

あと変な読み方しているとネットでいじられたりします。

なるべく変な発音でおぼえてしまわないようにしたいなと個人的に思います。
Spec Markdown を使って技術仕様書的な Single page HTML を簡単に作る



https://github.com/leebyron/spec-md
http://leebyron.com/spec-md/ (Spec Markdown によって出力された Spec Markdown 仕様書)

Markdown で書いたドキュメントを一枚の HTML ファイルとして出力してくれる。もちろん Pandoc とかでも同じことはできるが、大変手取り早くて簡単だった。


## 特徴

* 指定した Markdown ファイルで相対リンクしている Markdown を include
* 番号付き toc を自動付与
* 記述内容に対する独自の整形（修飾）


## 使い方

```bash
$ spec-md README.md > index.html
```


基本的には Markdown の記述そのままを吐き出してくれると考えて問題無さそうなものの、明らかに意識しないといけないのはセクションヘッダのタイトルの記法。

普通は `#`, `##` と `====`, `----` は等価の扱いであるが、Spec Markdown では意味を付加していて、前者は各セクションのタイトルとして利用するのに対し、後者はドキュメントのタイトルとしてのみ利用することになっている。もし誤ってセクションタイトルに `====` を使ってしまうと、そのセクションブロックは生成されるドキュメントの一番最初に来てタイトルと最初の文面として使われてしまうぞ。

http://leebyron.com/spec-md/#sec-Title-and-Introduction

(「Setext」と「atx」という言い方、これを機に覚えよう。)


## 独自の修飾（技術系）

その他、Markdown の記述に対する、技術仕様書的な意味付けを追加している。この辺りはテキストで書いた内容が HTML ファイルへ出力される際の整形的な意味合いがほとんどなので、書きたい内容に対して記法を見繕って使うことができそう。

一部明らかに Markdown のままで見た際とは見栄えが変わるのもある。個人的には [Value Literal](http://leebyron.com/spec-md/#sec-Value-Literals) が不本意に発動しそうな気がした。文中に `{` があると value literal として処理が開始される上、閉じられていないと記述ミスと扱われてビルドそのものに失敗する。
（Block quote 内でも発動した。さすがに Code block 内では無視された。）


![スクリーンショット 2015-07-03 11.40.20.png](https://qiita-image-store.s3.amazonaws.com/0/18511/61916d25-a8da-7802-bd7a-66421e1d295b.png "スクリーンショット 2015-07-03 11.40.20.png")

![スクリーンショット 2015-07-03 11.40.55.png](https://qiita-image-store.s3.amazonaws.com/0/18511/ed7c6ee0-5c8c-3f1c-0615-bd6303de0308.png "スクリーンショット 2015-07-03 11.40.55.png")


## サンプル

https://github.com/kumatch/sandbox-spec-md
React.jsでwindow.resizeイベントをtriggerする

windowのresizeイベントはReact.jsでサポートされていないようですが、([参考:React.jsのEventについて](http://qiita.com/koba04/items/bf8d02a2d0589e9247a7))、以下のようにすればresizeイベントをtriggerできました。

## 良い例

~~~
event = new CustomEvent("resize")
window.dispatchEvent(event)
~~~

## ダメな例

~~~
$(window).resize()
~~~
SpineデータをUnityで扱う


最近Spineが更に便利になって
jsonで吐き出されたデータをそのまま突っ込めば
Unityですぐ使えるとの情報を見つけた。

別のSpineエントリーを読んでなんとかなりましたが、若干古かったので自分用メモ。


## Spineからの吐き出し
![spine01.PNG](https://qiita-image-store.s3.amazonaws.com/0/54225/c567aa25-260a-fac4-1af9-4ab3de40d420.png)

まずSpineからデータをExport。
チェックは全部入れる。

## フォルダのデータをテキストファイルに
![spine02.PNG](https://qiita-image-store.s3.amazonaws.com/0/54225/715c589b-ba6b-1416-bf05-2549c10446fc.png)

一番上の.atlasファイルを.txtにしてUnityで読めるようにする。

![spine03.PNG](https://qiita-image-store.s3.amazonaws.com/0/54225/416a3e4c-483b-d2f4-d0d8-0bb53b6dd24c.png)
ほい。

## UnityにSpineのランタイムを放り込む
![spine04.PNG](https://qiita-image-store.s3.amazonaws.com/0/54225/1b6a28a6-d6e5-ba38-90b8-a1bf22412bf0.png)

https://github.com/EsotericSoftware/spine-runtimes
ここからzipをまるまる落としてきて、中にある

* spine-unity
* spine-csharp

フォルダをUnityのProjectへドロップ。

## Spineから吐出されたデータをフォルダごとUnityへ
![spine05.PNG](https://qiita-image-store.s3.amazonaws.com/0/54225/e179a6b3-d8d5-0af2-829a-ad3b6838c57b.png)

プロジェクトにSpineデータを放り込んだところ。  
<br>


![spine08.PNG](https://qiita-image-store.s3.amazonaws.com/0/54225/a109aa0b-3518-1d9b-5af3-aca2efc2b6e6.png)

そうすると自動でスケルトンデータやらが生成される。

## Spine SkeltonAnimationオブジェクトを作る

![09.jpg](https://qiita-image-store.s3.amazonaws.com/0/54225/613e3d40-b10b-dd9c-f3e0-90740797b02b.jpeg)

つくったらヒエラルキーを見る。
![spine06.PNG](https://qiita-image-store.s3.amazonaws.com/0/54225/c22e6851-a067-931a-2a09-cf7b79ad5cfc.png)


一番下のSkelton Animation(Script)に
さっきインポート時に生成されたSkeltonデータをアタッチ。


![spine07.PNG](https://qiita-image-store.s3.amazonaws.com/0/54225/480a42c9-a4f9-f557-8678-6cd1b1bfeabf.png)
Animationのところに自分の作ったアニメーションリストから選択できるので、
初期設定のアニメーションをここで選択。
これで表示されるはずです。

## Scriptでアニメーションを制御
ボタン操作でアニメーションを切り替えるのは以下のQiitaエントリを参考に。

[Spineでプロ生ちゃんに動いてもらう](URL "http://qiita.com/Mavoroshi_Oni/items/5317f83b23fd76ef9b6b")

私は今回アニメーションを時間経過などで自動で切り替えたかったので、
一回だけ実行するように真偽値を一個増やして２重で判定をとるようにしました。

```csharp
using UnityEngine;
using System.Collections;

// 今回はSwingという揺れるアニメーションを操作する。
public class swing : MonoBehaviour {


	SkeletonAnimation swing2d = null;
	Spine.AnimationState swing2dstate = null;

	bool isStart = true;
	bool isSwing = true;

	// Use this for initialization
	void Start () {
		swing2d = GetComponent<SkeletonAnimation>();
		swing2dstate = swing2d.state;
	}
	
	// Update is called once per frame
	void Update () {


			if(isSwing && iStart) {
				swing2dstate.SetAnimation(0, "swingAnimation", false); 
                // SetAnimation(基本は０, "アニメーションの名前", falseならループ)
				isStart = false;
			}
		}
	
}
```

update関数でSetAnimationを実行すると、
ワンフレームごとにアニメーションが0秒まで巻き戻されて再スタートされてガクガクしちゃうので、
一回しか実行されないようなに工夫を施す必要がある。

使い始めたばっかだし、日本語資料もすくないので良いやり方あったら教えて下さい。
エクセルからコピペするとfileupload が実行されてしまう

「名前をコピペすると、画像ではありません、って出てきます…!!」
という直訴を受け、調査。

当該画面では、氏名、メールアドレス、画像のアップロードをフォームとして用意している。
画像のアップロードには jQuery File Upload を使用。

以下の設定追加で回避できた。

```
$('#fileupload').fileupload({
    pasteZone: null,
    /* etc .. */
});
```
Twitter APIで取得したプロフィール画像が小さいので大きいものを取得する

Twitter APIで取得できる画像小さすぎて今の時代に合わない・・・
でも面倒だけど大きい画像も取得できます。

>ドキュメント
>https://dev.twitter.com/overview/general/user-profile-images-and-banners

ドキュメントには**users/show** APIで取得したprofile_image_urlには48ピクセル×48ピクセルの画像が返ってくるよ
この画像サイズは**normal**だよ、他のサイズが欲しいならURLを変更してねって書いてある

つまり拡張子の前の**_normal**って部分を変更してあげればOK

##対応表
| 名前 | サイズ | URL |
|:-----------|------------:|:------------:|
| normal | 48×48 | http://pbs.twimg.com/profile_images/2284174872/7df3h38zabcvjylnyfe3_normal.png |
| bigger | 73×73 | http://pbs.twimg.com/profile_images/2284174872/7df3h38zabcvjylnyfe3_bigger.png |
| mini | 24×24 | http://pbs.twimg.com/profile_images/2284174872/7df3h38zabcvjylnyfe3_mini.png |
| original | original| http://pbs.twimg.com/profile_images/2284174872/7df3h38zabcvjylnyfe3.png |

##Javaだとこんな感じでreplaceしてしまう
```java
String imageUrl = "http://pbs.twimg.com/profile_images/2284174872/7df3h38zabcvjylnyfe3_normal.png";
String originalImageUrl = imageUrl.replace("_normal", "");
```
Visual Stusdio 2015 (iOSアプリのBuild）


OpenGLESを使ったC++のネーティブアプリケーションが作成できるということなので、試してみた。いろいろと興味深いねｗ。

Windows上のVC側はほぼマニュアル通りにやればよい。問題はMAC側のVCREMOTEのインストール...

```bash:console
$ brew install npm
$ sudo npm install -g npm@2.6.0
$ sudo npm -g install vcremote
$ sudo npm -g install ios-deploy@1.6.0
```

これで、vcremote --secure false をコマンドプロンプトから実行すれば、ビルドが可能になるがはずがｗ…
リモートデバックのやり方もまだわからない。
siegeでお手軽にストレステスト

siegeはabより高機能で、JMeterほど面倒くさくないWEBのパフォーマンス測定ツールです。
siegeとは、包囲攻撃という意味の単語で、「シィージ」と発音するみたいです。
アクセス先を複数のURLからランダムで抽出する
インターネットモードがなかなか便利です。

以下CentOSやAmazonLinuxへsiegeの最新版をインストールする手順です。


#インストール

```
yum install gcc

wget http://download.joedog.org/siege/siege-latest.tar.gz
tar xvf siege-latest.tar.gz
cd siege-3.1.0/
./configure
make
make install

siege -V
----------------
SIEGE 3.1.0

Copyright (C) 2015 by Jeffrey Fulmer, et al.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE.
----------------
```


#負荷をかけるURLを設定

```
vi /usr/local/etc/urls.txt
----------
http://hoge.huge/index.html
http://hoge.huge/1.html
http://hoge.huge/2.html
http://hoge.huge/3.html
----------

http://hoge.huge/script POST key1=value1&key2=value2
などと書くとPOSTも可能です。

```

#実行

```
siege -c 300 -t 10S -b -i -f /usr/local/etc/urls.txt
```
=>urls.txtからランダムにURLを抽出して、10秒間300同時接続でアクセスをする

#実行結果

```
Transactions: 1442 hits
Availability: 100.00 %
Elapsed time: 1.08 secs
Data transferred: 0.01 MB
Response time: 0.08 secs
Transaction rate: 1335.19 trans/sec
Throughput: 0.01 MB/sec
Concurrency: 103.77
Successful transactions: 1442
Failed transactions: 0
Longest transaction: 0.52
Shortest transaction: 0.00
```

各項目は以下のような意味です。

Transactions: 合計リクエスト数
Availability: リクエストの成功数
Elapsed time: 負荷をかけた合計時間
Data transferred: データの合計転送量
Response time: １リクエストあたりの平均処理時間
Transaction rate: １秒あたりの平均リクエスト数
Throughput: １秒あたりの平均スループット
Concurrency: 平均同時接続数
Successful transactions: 成功したリクエスト数
Failed transactions: 失敗したリクエスト数
Longest transaction: １リクエストの最大秒数
Shortest transaction:１リクエストの 最小秒数



#ドキュメント
細かいパラメータなどはこちらへ
https://www.joedog.org/siege-manual/
c++ builder > TPageControl > TabSheetの切替 > PageControl1->ActivePage = TabSheet1;

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

TPageControlにおいてアクティなページの切替は以下のようにする。

```cpp
PageControl1->ActivePage = TabShee1;
```

http://www.migaro.co.jp/contents/products/delphi400/tips/introduction/4_26/02/02.html
css メディアクエリ


**デバイスの特性に基づいてスタイルを適用できる**

**min-device-widthではなくmin-widthを使うことで広範な環境を確実にサポートする**

**レイアウトの崩れを防ぐため、要素に相対サイズを使用する**

##基本的な使い方

```css

@media (max-width: 500px){
	h1{
		color: rgba(255,0,0,0)
	}
}
```

sassで書いた場合 (以下sassでの記述)

```sass
@media(max-width: 500px)
	h1
		color: rgba(255,0,0,0)
```

２つ以上の指定,andのような指定

```sass
@media(min-width: 300px) and (min-heighth: 600px)
	div
		background: #ff9000
```

orのような指定

```text
@media(min-height: 600px) and (min-width: 30px), (min-width: 400px), print
```

代表的なメディアタイプ

##

```text
@media all   //全て
@media screen　//コンピュータ画面
@media print   //プリンタ
@media tv     //テレビ
```

プロパティ

```text
max-width
min-width
max-height
min-height
orientatain   //縦長か横長か
```

orientationを使うとき
縦長のとき、:portrait
横長のとき、:landscape
タブレットにリアルタイムにカメラ画像を表示する

アクアリング鶴舞ラボ、エンジニアのタイジマンです。

[先日、スタッフの結婚披露宴のウェルカムボードにPepperを使用しました。](http://lab.aquaring.co.jp/archives/1076)
（どんなアプリケーションにしたかは、リンク先をご覧ください）

![0610_31.jpg](https://qiita-image-store.s3.amazonaws.com/0/84809/7c500e5c-b781-d349-c8da-63226490a6d3.jpeg)


Pepperをカメラマンにして、写真をとる機能を実装したんですが、
どうせなら、リアルタイムでPepperのカメラの映像がみれたほうがいいよね
とタブレットに表示させたところ、すこし苦労したので、メモをしておきます。

# 画像をキャプチャする。
ALVideoDevice#getImageRemoteを使うと、その機能は、実装できますね。
setTimeoutを設定すれば、映像のように見せることができます。（すこし、ぎこちないですが）

色は、モノクロかカラーで表示できればいいのですが、１６種類もあるようですね。
http://doc.aldebaran.com/2-1/family/robots/video_robot.html#cameracolorspace-mt9m114
下記リンクに、パフォーマンスについて、記述されているので、どれくらい違いがでるのか計測してみました。
http://doc.aldebaran.com/2-1/naoqi/vision/alvideodevice.html#performances-and-limitations
ペッパーのカメラからYUV形式で取得されるそうなので、YUVとRGBで実験しました。各カラー設定で１００回づつ連続して取得しています。１００回なんて、と思いきや、結構パフォーマンスに響いているようです。

|Camera ID |ColorSpace |Size| Min | Max | Avg |
|-----------:|-----------:|-----------:|-----------:|-----------:|-----------:|
|0|Monochrome(Y)|320x240|65|2255|313.03|
|0|YUV422|320x240|218|11314|975.45|
|0|YUV|320x240|294|3743|718.25|
|0|RGB|320x240|309|11409|1758.01|

やっぱし、YUVなんですね。仕事の合間に作成したので、あまり時間もかけなかったため、とりあえずモノクロで実装しましたが、YUVの変換は、どこかで一回やっておきたいですね。

ちなみに、[カメラIDを2にすると赤外線カメラの画像が取得できるようです](http://qiita.com/thorikawa/items/a625b4766dcd283b783b)。
カラースペースを17にすると、深度がとれます。すこし、何かに使えそうですね・・・。
パフォーマンス測定をすると、以下の結果。

|Camera ID | ColorSpace |Size| Min | Max | Avg |
|-----------:|-----------:|-----------:|-----------:|-----------:|-----------:|
|2|Depth|320x240|195|7863|779.63|

# タブレットに表示する。
こちらですが、subscribe/unsubscribeをうまくやらないと、画像が急に表示されなくなります。
手元にあるPepperでは、登録時のIDが同じものが7件より多くsubscribeすると、そういう症状が発生しました。
ということで、気をつけてやりましょう。

タブレット表示部分だけ抜粋すると、以下になります。
![スクリーンショット 2015-07-01 17.33.59.png](https://qiita-image-store.s3.amazonaws.com/0/68909/70ccf150-4291-3b81-24da-a49cc33ac08a.png)


Raise Eventで、カメラ表示開始と終了のイベントを発行して、タブレットのHTML側で、subscribe/unsubscribeしています。
この二つがしっかり動かないと画像が表示されないので、注意しましょう。
一応、タブレットを閉じた後に、ログ出力させています。

同一IDでsubscribeした場合、hoge_0,hoge_1となるので、unsubscribeは、ボックス内でやってもいいかもしれません。

本記事用のソースは以下に置いておきましたので、参考になれば・・・。
https://github.com/aquaring/PepperTabletDemo

![0269_01.jpg](https://qiita-image-store.s3.amazonaws.com/0/68909/54b5d251-22c3-5007-ed65-822f1bd70619.jpeg)

## 追記：
まぁでもみんなPepper自体めずらしいし、Pepperに写真撮ってもらうより、
Pepperと写真とりたがりますね。
AWS EC2 で始めるお手軽LAMP環境 APACHE2.4 MYSQL5.5 PHP5.6

AWSのamazonデフォルトOSはCentOSとほぼ同じです。

* [Amazon LinuxとCentOSの違い](http://blog.nedia.ne.jp/2015/05/07/5251.html)

普通に `yum install -y httpd mysql php` とかやっちゃうと、Apache2.2 やら PHP5.3 がインストールされてしまいます。
今回はプロキシやCakePHP2.6とPHP5.6を使いたいので、一工夫が必要でした。
しかし、AmazonのデフォルトOSには@amzn-main @amzn-updates という手間を一気に省いてくれる素晴らしいリポジトリが用意されていました。

```bash:yumコマンドでインストール
yum install -y httpd24 mysql55 php56 php56-mbstring php56-pdo
```

これだけでパッケージ依存で以下全部インストール出来ます。

```bash:インストールされるパッケージ
httpd24.x86_64                        2.4.12-1.60.amzn1            @amzn-main
httpd24-tools.x86_64                  2.4.12-1.60.amzn1            @amzn-main
mysql.noarch                          5.5-1.6.amzn1                @amzn-main
mysql-server.noarch                   5.5-1.6.amzn1                @amzn-main
mysql55.x86_64                        5.5.42-1.4.amzn1             @amzn-main
mysql55-common.x86_64                 5.5.42-1.4.amzn1             @amzn-main
mysql55-libs.x86_64                   5.5.42-1.4.amzn1             @amzn-main
mysql55-server.x86_64                 5.5.42-1.4.amzn1             @amzn-main
php-pear.noarch                       1:1.9.5-2.17.amzn1           @amzn-main
php56.x86_64                          5.6.9-1.112.amzn1            @amzn-updates
php56-cli.x86_64                      5.6.9-1.112.amzn1            @amzn-updates
php56-common.x86_64                   5.6.9-1.112.amzn1            @amzn-updates
php56-devel.x86_64                    5.6.9-1.112.amzn1            @amzn-updates
php56-jsonc.x86_64                    1.3.6-1.19.amzn1             @amzn-main
php56-jsonc-devel.x86_64              1.3.6-1.19.amzn1             @amzn-main
php56-mbstring.x86_64                 5.6.9-1.112.amzn1            @amzn-updates
php56-mysqlnd.x86_64                  5.6.9-1.112.amzn1            @amzn-updates
php56-pdo.x86_64                      5.6.9-1.112.amzn1            @amzn-updates
php56-pecl-apcu.x86_64                4.0.7-1.5.amzn1              @amzn-updates
php56-process.x86_64                  5.6.9-1.112.amzn1            @amzn-updates
```

Mysql5.6が用意されていないところだけがなんとも残念だなあと思いました。
Emacs を裸にする計画 1

(標準状態の) Emacs で C-v を押すと，半画面 scroll する．これは scroll-up-command という函数を起動している．この函数について describe-function すると， window.el という lisp file で定義されていることがわかる．

(標準状態の) Emacs で C-h を押すと， cursor が1文字分左に移動する．これは函数名は backward-char であり，C source code で定義されている．

このように， Emacs の函数は， lisp file で定義されているものと， C source code で定義されているものに大別される．

では， 前者の lisp file を全て削って， C source code から成り立っている部分だけを扱うことはできないか．つまり， Emacs の厚い鎧を全て外して，裸の Emacs を作る作業である．この状態の Emacs ならば，研究もしやすいのではないか．

この作業のために， Vagrant を使いたいと思う．Vagrant 上の Emacs ならば何度でも壊して入れ直すことができるから，手軽に研究できそうだ．

(つづく)
c++ builder > TPageControl > TabSheetの表示/非表示 > TabVisibleプロパティをtrue/falseする

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

```cpp
TabShee1->TabVisible = false;
```
のようにしてタブの表示/非表示を設定できる。


http://delphi.about.com/od/delphitips2007/qt/hidepagectrltab.htm
[matlab] 生産性をバク上げするライブラリ[Yaml]

# intro

昨日、生産性をバク上げするライブラリを発見したので報告します。

[YamlMatlab](https://code.google.com/p/yamlmatlab/)

ruby界隈とか、js界隈ではyamlを設定ファイルに使うと思うんですけど、
これがmatlabでも利用可能になるっていうシロモノです。

# 実装例

例えば、

```const.m
function ret = const(group)
  % litrconst: return literal constants
  % litr = litrconst().ja;
  % litr.ordinal{1}
  if nargin == 0, group = ''; end
  switch group
    case 'env'
      ret = ReadYaml('src/envconst.yaml');
    case 'litr'
      ret = ReadYaml('src/litrconst.yaml');
    otherwise
      ret = ReadYaml('src/litrconst.yaml');
  end
end
```

```src/litrconst.yaml
ja:
  ordinal:
    - 第1
    - 第2
    - 第3
    - 第4
    - 第5
    - 第6
    - 第7
    - 第8
    - 第9
    - 第10
  principlecomp: 主成分
  percent: ％
en:
  ordinal:
    - 1st
    - 2nd
    - 3rd
    - 4th
    - 5th
    - 6th
    - 7th
    - 8th
    - 9th
    - 10th
  principlecomp: Principal Component
  percent: ％
```

```envconst.yaml
datadir: \data\
resultdir: \results\
```

などと作ると、

```matlabsession
>> litr = const().ja
litr = 
          ordinal: {'第1'  '第2'  '第3'  '第4'  '第5'  '第6'  '第7'  '第8'  '第9'  '第10'}
    principlecomp: '主成分'
          percent: '％'
>> litr.ordinal{3}
ans =
第3
>> env = const('env')
env = 
      datadir: '\data\'
    resultdir: '\results\'
>> env.datadir
ans =
\data\
```

とかってできるわけですよ。
煩雑にいちいち文字列をタイプしていたのが
autocompleteで済んだりするのでとてもオススメです。
解析現場からは以上です。
Jenkinsからのメールに日付を埋め込む


やりかたは この [jenkinsから送信されるメールの件名にshell実行時の変数を使う](http://qiita.com/nakashii_/items/fb46147c9cd15e637171)
という記事の本命である「4. ビルド中の値を参照する」というやり方でやりました。
ありがとうございます。

違うところは日付の書式のうち、曜日を日本語にしたかっただけです。

```bash:tmp.prop
echo "PARAM_TODAY = `date +%m/%d(%a)`">> tmp.prop
echo "PARAM_TOMORROW = `LANG=ja_JP.utf8 date -d '1 days' '+%m/%d(%a)'`">> tmp.prop
echo "PARAM_NEXTWEEK = `LANG=ja_JP.utf8 date -d '7 days' '+%m/%d(%a)'`">> tmp.prop
```
以下のようにフォーマットされます。
mm/dd(曜日)
07/04(土)
【Monaca】Jsonを展開する方法【勉強中】

# Jsonの展開方法について

Json文字列をAPIから取得し、展開する実装をしなければならず、その方法について、検索したので、共有致します。

#### Json文字列を変数内に直書きした場合

まず、段階として、Json文字列を変数に直書きした場合を考えました。
ソースは以下です。

```html:bodyタグ内
<ons-page>
    <div style="text-align: center">
        <br>
        <ons-button
            onclick="examJsonParse()">
            Json Parse
        </ons-button>
    </div>
</ons-page>
```
続いて、JavaScript 内のコードは以下のように書きました。
まだいまいち、JavaScriptを書くのに慣れないですね。。。(´・ω・`)

```js:scriptタグ内
ons.bootstrap();
ons.ready(function(){ });
          
function examJsonParse() {
    var jsonStrings = '{"ip": "8.8.8.8"}';
    var someObject = JSON.parse(jsonStrings);
                
    for (var index in someObject) {
        alert(someObject.ip);
    }
};
```
下図のような画面イメージになります。
![displayPreview.png](https://qiita-image-store.s3.amazonaws.com/0/66498/fb0d3db4-d8c3-73aa-3d37-4acf90680599.png)
ボタンを押せば、Jsonを展開してくれて、アラートとして表示されます。

※ ご指摘頂きました
`var jsonStrings = {"ip": "8.8.8.8"};` はJson文字列では無く、オブジェクトリテラルと言い、今回の趣旨とはまた違うようですね。
正しくは、`var jsonStrings = '{"ip": "8.8.8.8"}';` がJson文字列でこれを一度オブジェクトリテラルにしてから、展開というように手順を踏むそうです。
まだまだ勉強する事が多いですね。有難うございます。

#### Json文字列をサーバーから取得して展開する場合
上の確認から、Json文字列を正しく取ってこれさえすれば、Jsonの展開を用意であろう事が確認出来ました。

続いては、Json文字列をサーバーから取得する方法です。

そろそろ、始業時間なので、続きは後ほど書きます。

## Monacaタグの他の記事
1. 2015/07/02投稿 [端末IDの取得方法について](http://qiita.com/ikkitang/items/96614732e4767b54c5cd "Qiita")

誰かのお役に立てれば、幸いです。
後、どなたか教えて頂けると有り難いのですが、Json文字列の展開について色々調べてみた所、jQueryを使って行う実装ばかりが検索にヒットしました。
JavaScriptを使って行う事は出来ないんでしょうか。
拘りは無いのですが、色々な方法を知っておきたいです。
bl.ocks.orgでユーザーごとのrssフィードを取得する

[bl.ocks.org](http://bl.ocks.org/) は、GitHub Gistにおいたindex.htmlをソースコードとともに表示してくれるサービスです。

製作者は [D3.js](http://d3js.org/) というデータビジュアライゼーションライブラリーの作者でもある、Mike Bostock 氏で、もともと[D3のサンプル](https://github.com/mbostock/d3/wiki/Gallery)を手軽に表示するために作られたらしいのですが、Githubのアカウントをもっている人であれば、誰でも利用できます。

実は、bl.ocks.orgではコンテンツ表示ページの他に、rssフィードもユーザーごとに自動生成されるので、feedlyなどのRSSリーダーを使って最新情報を取得することができます。


rssフィードはURLのユーザー名の後に「.rss」付けてアクセスすれば取得できます。

例）

一覧表示ページ
[http://bl.ocks.org/shimizu](http://bl.ocks.org/shimizu)

RSSフィード
[http://bl.ocks.org/shimizu.rss](http://bl.ocks.org/shimizu.rss)
SQL Server Management Studioでインテリセンスが効かない場合の対処

# メモ
**新しく作ったテーブル** などは、クエリウインドウでIntellisenseによるコード補完が効かないことがある。
その場合には、**CTRL + Shift + R** と操作すればリフレッシュされることに気がついた。
けっこう前から悩んでたのでメモ。
## イメージ
![image](https://qiita-image-store.s3.amazonaws.com/0/78230/621f9d7e-8131-da07-67f5-bfa034c35116.png)
Windows10 IoT Core for RaspberryPi2 のインストール（6/24リリース版）

2015/6/24にWindows10 IoT Core for RPi2の新ビルドがリリースされました。
前ビルドとはインストール方法が全く変わってしまったので、もう一度説明したいと思います。

今回のリリースからアカウント登録などの必要がなくなりました。また、特に記載はありませんが、Windows8.1でもインストールできるようになりました。（Windows8.1での動作は自己責任にてお願いします。）

・こちらの[サイト](http://ms-iot.github.io/content/en-US/win10/SetupRPI.htm)からISOファイルをダウンロードできます。

・ダウンロードしたISOファイルをダブルクリックするとDVDとしてマウントします。

![DVD.PNG](https://qiita-image-store.s3.amazonaws.com/0/62606/33fee094-a87c-8405-7498-6fca2339b909.png)

・DVD内の「Windows_10_IoT_Core_RPi2.msi」をダブルクリックするとインストールが始まります。
![DVD.PNG](https://qiita-image-store.s3.amazonaws.com/0/62606/9748c722-a986-ca41-88c1-97be77f0860c.png)

・インストーラーの指示通りに進めてください。
![setup.PNG](https://qiita-image-store.s3.amazonaws.com/0/62606/9d75bec4-e533-a4d0-310e-25cd02e1d2a0.png)

![install1.PNG](https://qiita-image-store.s3.amazonaws.com/0/62606/606bcf50-e53f-5f33-a7be-4563a0a0b934.png)

![install2.PNG](https://qiita-image-store.s3.amazonaws.com/0/62606/3e6b9314-377b-ec9b-221a-fa39c0def032.png)

・インストール完了後にC:\Program Files(x86)\Microsoft IoTフォルダが作成されます。
![folder.PNG](https://qiita-image-store.s3.amazonaws.com/0/62606/0d901b3c-d9fb-9d33-23a8-4dc0cce017a1.png)

・MicroSDを書き込めるように準備してから、フォルダ内の「IoTCoreImageHelper.exe」を起動します。
![imagehelper.PNG](https://qiita-image-store.s3.amazonaws.com/0/62606/f0d00e80-b9d0-d75e-c05f-a322c95a0f40.png)

・書き込むSDカードを選択してからffuイメージファイルを選択します。イメージファイルはC:\Program Files(x86)\Microsoft IoT\FFU\RaspberryPi2にあります。
![flashimage.PNG](https://qiita-image-store.s3.amazonaws.com/0/62606/3c09ae85-c6be-dc76-25fb-560809cc35c7.png)

・IoTCoreImageHelper.exeの下部にあるFlashボタンをクリックしてSDカードにイメージを書き込みします。

・書き込みが終わったらSDカードをRPi2にセットして電源を入れて起動すれば完了です。


前回のリリースに比べてインストール方法がとても簡単になりました。（前回の方法は相当評判が悪かったみたいですね。）
Raspbianのインストール方法と比べてもそれほど難しいことはないと思います。
また、非公式ですがWindows8.1環境でも問題なくSDカードの書き込みができることも素晴らしいと思います。

前回のリリースでインストールできなかった人も今回はインストールにチャレンジしてもらいたいと思います。
電子回路 > 最小定理 > 使用例 > 負荷の消費電力P[W]を最大にするには

(追記: 2015/07/03 分母分子の記載を間違ってました。ozwkさんありがとうございます。)

http://qiita.com/7of9/items/b643387dbb2c56706ef4
に投稿した「最小定理」。この使用例。

参照: 基礎から学ぶ電気回路計算 by 永田博義さん
を元に以下のように書きなおした。

```math
P = R I^2 = \frac{100^2}{ \frac{100^2}{R} + 200 + R }
```

上記のような式が与えられた時、分母が最小になればPの値は最大になるので、分母に最小定理を適用すればいい。

a = 100^2 / R
b = R
として、a*b=一定になるかは

```math
a * b = 100^2 / R * R = 100^2
```
となり、一定となるので、最小定理の条件はクリアした。

あとは、a==bとなるようにRを決める。

```math
100^2 / R = R \\
100^2 = R^2
```
よって R = 100[Ω]が分母が最小になる抵抗値となり、消費電力が最大となる。


<hr>
これは一例であるが、同じような形の式であれば電子回路に限らず色々応用できそうな気がする。
Oracle XE 11.2 にscott/tigerを作成する

Oracleさんの勉強をしていて、scott/tigerが出てくることがあると思いますが、Oracle XE 11.2にはデフォルトではいません。

ですが、DDLは用意されているので、それを実行すればOKです。

```
[vagrant@localhost ~]$ ls $ORACLE_HOME/rdbms/admin/utlsampl.sql
/u01/app/oracle/product/11.2.0/xe/rdbms/admin/utlsampl.sql
```

sqlplusでは@をつけると@以降のファイルをreadしてくれます。

```
[vagrant@localhost ~]$ sqlplus /nolog

SQL*Plus: Release 11.2.0.2.0 Production on 木 7月 2 21:40:30 2015

Copyright (c) 1982, 2011, Oracle.  All rights reserved.

SQL> conn / as sysdba
接続されました。
SQL> @/u01/app/oracle/product/11.2.0/xe/rdbms/admin/utlsampl.sql
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Productionとの接続が切断されました。
[vagrant@localhost ~]$ sqlplus /nolog

SQL*Plus: Release 11.2.0.2.0 Production on 木 7月 2 21:41:02 2015

Copyright (c) 1982, 2011, Oracle.  All rights reserved.

SQL> conn scott/tiger
接続されました。
```

vagrantにOracle XEを入れるのは
https://github.com/rsakamot/vagrant-centos-oracle

これを実行する前に

http://www.oracle.com/technetwork/jp/database/database-technologies/express-edition/downloads/index.html
から、zipファイルをダウンロードして、oracleディレクトリに置いてください。
技術英語 > Leave it to the expert.

「専門家にまかせろ」
という時、
「Leave it to the expert.」
と言う。


色々な仕事を抱え込んでいる人に対しては、
I recommend you to leave this task to the expert.


<hr>
http://www.justanswer.com/nissan/2xq5c-code-p1111-changed-intake-valve-timing-control.html
> is it easy to replace ecm and do u need to program it? or should i just <font color=red>leave it to the expert?</font>
proxmox 4.0 のlxcコンテナの近況

## 対応が向上していた

```bash:
apt-get update
apt-get upgrade
reboot
pveam update
```

したところ、lxc対応が向上していた。

* Ubuntu対応(12.04,14.04,15.04)
* debian8対応

## Template typeがlxc追加

![スクリーンショット 2015-07-03 6.39.24.png](https://qiita-image-store.s3.amazonaws.com/0/25728/06ed086f-2354-416e-0ffe-d94698cdb1e3.png "スクリーンショット 2015-07-03 6.39.24.png")

OpenVzではデフォルトTemplateがi386だったが、amd64になったようだが
debian8のコンテナでi686が返ってくる(？)

```bash:
# uname -m
i686
```


## コンテナから抜け方

```bash:
pct console 100
```

でログイン画面が表示される。

> Type <Ctrl+a q> to exit the console, <Ctrl+a Ctrl+a> to enter Ctrl+a itself




## Container作成処理部分追ってみた

* /usr/share/perl5/PVE/LXCSetup/
  * Base.pm
  * Debian.pm
  * Redhat.pm

![スクリーンショット 2015-06-24 8.34.06.png](https://qiita-image-store.s3.amazonaws.com/0/25728/2c48540b-c999-bc2d-0ef1-807930f44518.png "スクリーンショット 2015-06-24 8.34.06.png")
Rails - content_tagでビューヘルパーを自作する。

# 経緯
ActionViewのヘルパーメソッドについて勉強していたら、 ActionView::Helpers::TagHelperクラスの[content_tag](http://apidock.com/rails/v4.2.1/ActionView/Helpers/TagHelper/content_tag)メソッドを用いて、ビューヘルパーを自作できることが分かりました。
そこで今後も繰り返し使えそうなkey−valueペアの表を生成するメソッドを作ることにしました。

![Screenshot 2015-07-02 16.49.50.png](https://qiita-image-store.s3.amazonaws.com/0/82804/a3b61a46-79f7-8237-4508-4e51f0179cc5.png)

実はもうちょっと複雑な表を作ろうと思ったのですが、入れ子構造が深くなるとうまくできませんでした。悩むくらいならpartialを作った方が早そうです。

#手順
####1. /app/helpers/配下のファイルでメソッドを自作。
以下の例ではkv_table_forメソッドを定義します。便宜上BootstrapのCSSクラスが加えてあります。

```rb:/app/helpers/application_helper.rb

module ApplicationHelper

  # kv_names:   配列 [key名, value名]
  # collection: hash { key1: value1, key2: value2, ... }
  def kv_table_for(kv_names, collection={})
    thead = content_tag(:thead) do
      content_tag(:tr) do
        tags = kv_names.map { |column| content_tag(:th, column, class: "text-center") }
        safe_join tags
      end
    end

    tbody = content_tag(:tbody) do
      tags = collection.map do |k, v|
        content_tag(:tr, class: "text-center") do
          concat content_tag(:td, k)
          concat content_tag(:td, v)
        end
      end
      safe_join tags
    end

    content_tag(:div, class: "table-responsive") do
      content_tag(:table, class: "table table-bordered table-hover table-striped") do
        thead + tbody
      end
    end
  end
end
```

####2. データを渡し、テンプレートから呼ぶ。
テンプレートはHAMLで書いています。
これで今後は、一行のみで同様の表を作成することができます。

```haml:show.html.haml
= kv_table_for %w(category volume), @items.group(:category).sum(:volume)
```

# 誰かが作った便利なGems
当然ながらこういうメソッドを自作しなくても、既に誰かが便利なGemを作っています。

- [nizovtsevnv/table_for_helper](https://github.com/nizovtsevnv/table_for_helper)
- [pluginaweek/table_helper]
(https://github.com/pluginaweek/table_helper)

しかしながら、これらは全然メンテナンスされてない様子なので、やっぱり、自分でわかる範囲で都度やった方が無難そうです。

#考察
Railsにはpartial等便利な選択肢が多数ありますので、あえてビューヘルパーを自作する機会は少ないように思われます。しかしながら、いつも同じ書式でデータを変更するのみの部品があれば、ビューヘルパーを自作することにより、link_to等の様に便利に使い回しができそうです。通常のHTMLと比較して直感的に読みにくいので、複雑な構造には向いていない様に思われます。

#参考資料
- http://stackoverflow.com/questions/4205613/rails-nested-content-tag
- http://stackoverflow.com/questions/3863844/rails-how-to-build-table-in-helper-using-content-tag
- http://railscasts.com/episodes/208-erb-blocks-in-rails-3
- http://apidock.com/rails/ActionView/Helpers/OutputSafetyHelper/safe_join
- http://apidock.com/rails/ActionView/Helpers/TextHelper/concat
h2o_mrubyでオレオレmrubyを使うには

# 2015/9/18 追記

以下の方法はh2oがmrubyをバンドルするようになって使えません。

代わりにpure ruby(mruby)のみのmrbgemsならdeps配下に置くだけでOkです。


# libmruby.pcファイルを作る

例えば、mruby-mrmagick組み込んだmrubyを使いたい場合。

予め、mruby-mrmagickを組み込んだmrubyを用意しておきます。
その後、以下の作業でh2oにそのmrubyを組み込めます。


以下の.pcファイルを用意する

```
prefix=/Users/kjunichi/local/src/mruby
exec_prefix=${prefix}
libdir=${exec_prefix}/build/host/lib/
includedir=${prefix}/include

Name: MRUBY-libmruby
Description: Mruby libraries
Version: 1.1.0
Libs: -L/usr/local/Cellar/imagemagick/6.9.1-1/lib -L${libdir} -lmruby -lMagick++-6.Q16 -lMagickWand-6.Q16 -lMagickCore-6.Q16 -lc++
Libs.private:
Cflags: -I${includedir}
```

prefixのパスや、Libsのライブラリの指定は各自で読み替えてください
（Libsの指定がすこし難しいかも。。。）

# h2oをビルドする前におまじない（古）

```
export PKG_CONFIG_PATH=.:$PKG_CONFIG_PATH
```

以降は、通常の手順でOK。

もし、ビルドしていた場合は、make cleanなりで、全てのオブジェクトファイルを
消してから作業しないと、リンクでエラーが出る。

# CMakeで学んだこと

```
PKG_CHECK_MODULES(MRUBY hoge)
```

って書いておくと、pkg-configで参照しているパス配下のhode.pcファイルの
存在チェックをして、見つかれば、それをビルド時に使ってくれるっぽい。

# Link

- [H2Oのmruby拡張が実用的になってきた件 - 人間とウェブの未来](http://hb.matsumoto-r.jp/entry/2015/07/22/094156)

# 関連記事

- [俺がlibh2oの記事を読んで学んだこと #osx #dylib](/entry/2014/12/03/120000)
- [http2 ハッカソン #5に行ってきた](/entry/2015/09/14/061640)
- [Cygwinでh2oが動いた日](/entry/2015/10/14/072432)
- [hhvmをh2oと連携して動かす〜OSX編〜](/entry/2016/08/31/071457)
Crystal - Array - Instance Method - []? #crystal

## <i class="fa fa-diamond" style="font-size:1em;"></i> 概要
CrystalのArrayクラスのインスタンスメソッド`[]?`について

## <i class="fa fa-check-circle" style="font-size:1em;"></i> シグネチャ
`def []?(index : Int)`

要素が存在するインデックスについては、`Array#[]`と同じ動作をします。
範囲外のインデックスを指定した際に、`nil`を返します。

Rubyの場合は、`Array#[]`が上記と同じ動作をしますが、
CrystalはStrictなため、`Array#[]`が範囲外だった場合は
IndexOutOfBoundsの例外を投げます。
そのため、Rubyの`Array#[]`と同様の動作をする`Array#[]?`を作成したものと思われます。

## <i class="fa fa-flask" style="font-size:1em;"></i> サンプル
### <i class="fa fa-code" style="font-size:1em;"></i> プログラム
~~~ruby
hoges = %w(hoge hige hage)
(0..3).map { |i|pp hoges[i]? }

begin
  hoges[3]
rescue e
  pp e.message
end
~~~

### <i class="fa fa-file-text" style="font-size:1em;"></i> 出力
~~~ruby
hoges[i]? = "hoge"
hoges[i]? = "hige"
hoges[i]? = "hage"
hoges[i]? = nil
e.message = "Index out of bounds"
~~~

## <i class="fa fa-book" style="font-size:1em;"></i> 外部資料
* <i class="fa fa-external-link" style="font-size:1em;"></i> [Array- Crystal API Library](http://crystal-lang.org/api/index.html#http%3A//crystal-lang.org/api/Array.html)
PlayFramework 2.4：ダミーサーバーにメール送信

#準備

* 参考<br />
https://github.com/playframework/play-mailer<br />
これを元に作ってみる
<br /><br />
* ダミーサーバー<br />
smtp4dev<br />
https://smtp4dev.codeplex.com/


##変更する設定ファイル
###build.sbt

libraryDependenciesに追記

libraryDependencies ++= Seq(
　javaJdbc,
　cache,
　javaWs,
　**"com.typesafe.play" %% "play-mailer" % "3.0.1"**
)

### conf/application.conf

以下を追記
ローカルのダミーサーバーに送る

`play.mailer {
　　host=localhost
　　port=25
}`

## Model

```Java:models.api.Mail.java
package models.api;

import play.libs.mailer.Email;
import play.libs.mailer.MailerClient;

public class Mail {

  public void sendEmail(MailerClient mailerClient) {
    Email email = new Email();
    email.setSubject("Simple email　漢字");
    email.setFrom("sender@play-testmail.com");
    email.addTo("receiver@play-testmail.com");
    email.setBodyText("A text message\r\n日本語");
    mailerClient.send(email);
  }
}
```
## Controller
```Java:controllers.Application.java
package controllers;

import javax.inject.Inject;

import models.api.Mail;
import play.*;
import play.libs.mailer.MailerClient;
import play.mvc.*;
import views.html.*;

public class Application extends Controller {

	@Inject MailerClient mailerClient;

	public Result mail() {
		Mail mailer = new Mail();
		mailer.sendEmail(mailerClient);
		return ok(send.render());
	}

}
```

## 適当なViewを作り、routesでマッピングしてアクセス
→http://localhost:9000/mail

![mailserver.jpg](https://qiita-image-store.s3.amazonaws.com/0/77685/90b911fe-3c98-9084-ba96-5e965b1a08d3.jpeg)

![mail.jpg](https://qiita-image-store.s3.amazonaws.com/0/77685/49af2704-bf37-168f-a613-c26a4df29303.jpeg)


##余談

最初はplay-mailerのgitページにあるJavaのソースをコピペして作ったが、
MailerClientにインスタンスが入っていないらしく、ぬるぽが出て動かなかった

そこでDIコンテナについて勉強したところ、どうやら自分でnewした先では@Injectが効かないらしい
コントローラーにやって貰ってとりあえずうまく行ったが、あまりこのコードには自信がない
Androidアプリ開発でよく使うコマンド

時々忘れるのでメモします。
adb pullとかadb devicesとかadb logcatとかはすでに覚えている人向けです。
このコマンドはよく使ってて便利だよ！っていうのがあったらぜひ教えて下さい！！

adbとpecoを動くようにしてください。
Macで動くものです。
使用頻度高い順で書いていきます。

## スクリーンショットを取る
気軽にスクリーンショットを撮ってGithubのプルリクエストなどに貼れるとイケてる感じになります。

```
adb shell screencap -p /sdcard/screen.png
adb pull /sdcard/screen.png
adb shell rm /sdcard/screen.png
```

(screenshotというファイルで保存して実行権限を与えてパスを通しています)
![screenshot.gif](https://qiita-image-store.s3.amazonaws.com/0/27388/38f91537-a7a6-eaff-8d8a-7f3387d9fd98.gif)


## アプリを選択してアンインストール
アプリをアンインストールするときに使います(auninstallにalias張っています)
(チュートリアルの確認で完全に初回インストールからやりたいときなど)

```
adb shell pm list package|sed -e 's/^package://g'|peco|xargs adb uninstall
```
![auninstall.gif](https://qiita-image-store.s3.amazonaws.com/0/27388/552472eb-551a-074b-7941-66b392edfed6.gif)

## apkファイルを端末から選択して取り出す

```
adb pull `adb shell pm list packages -f | sed -e 's/package:\([^=]*\).*/\1/g'|peco`
```



## プロジェクトをAndroid Studioで開く
AndroidStudioでstudioコマンドを作成します。
![image](https://qiita-image-store.s3.amazonaws.com/0/27388/cad995de-0809-1383-0658-dfd675b84c39.png)

これを使うと例えばgithubからクローンしてきたプロジェクトをすぐに開けます。

```
git clone https://github.com/takahirom/DevInfoNotification.git
studio DevInfoNotification/build.gradle
```


## Gradleで依存関係の確認
バージョンどれ使っているか、このライブラリはどのライブラリに依存しているのかなどを見ることができます。

```
./gradlew app:dependencies
```
![dependencies.gif](https://qiita-image-store.s3.amazonaws.com/0/27388/2482058b-bfca-74ed-09ff-894d0b47b93e.gif)



## ViewのHierarchyの確認
このレイアウトどうなっているんだろう、、とか見たりするのに便利です。

```
adb shell dumpsys activity top|view -
```

![top.gif](https://qiita-image-store.s3.amazonaws.com/0/27388/efe5e879-eeb7-f99b-b22c-97b4d526c31d.gif)



## Gradleでビルドして、計測する
Gradleでビルドが遅くなった時に何が遅かったのか見ることができます。便利だけどよく使うかというとそうでもないです。

```
./gradlew app:asseDeb --profile
```
./gradlew app:asseDebでassembleDebugのタスクが動いて、 --profileオプションでhtmlを置いてくれるようになります。
結果は ./build/reports/profile/にhtmlで置かれる
![image](https://qiita-image-store.s3.amazonaws.com/0/27388/7a517f18-01cd-e3f0-1d2e-ffdca0c40d72.png)



## pidcatでlogcatの確認

pidcatを使うとAndroidStudioのlogcatのところを見ずに、ターミナルで確認できます。
色もつくので見やすいです。
よく使うのですが、すでに覚えているのでここに書いています。
またアプリのパッケージ名やタグなどで絞り込むことができます。

```
pidcat
```
![screenshot.gif](https://github.com/JakeWharton/pidcat/raw/master/screen.png)

https://github.com/JakeWharton/pidcat


## 参考になったもの

adb 経由の screenshot の取り方
http://qiita.com/TNaruto/items/b2407f5668e15e42bedd


コマンドからできることはいろいろあって楽しいですね
もっといろいろなことができるようになると思うので、
VBAHaskellの紹介 その19（ParamArrayとswapVariant）

VBAの `ParamArray` の仕組みがどうもよくわからない。

MSDNには「プロシージャが、省略可能なパラメーターとして、指定されたデータ型の要素の配列を受け取ることを示します。 ParamArray は、パラメーター リストの最後のパラメーターにのみ使用できます。」とある。
要するに可変長引数であり、受け取ったプロシージャ側からその引数はひとつの配列のように見える。配列なので `LBound` や `UBound` の値も取れるし、For ループで個々の要素にアクセスすることもできる。
しかしこれは **他のプロシージャに `ByRef` で渡すことができない**、という制約があって、下のコードだと `bar1` に渡そうとするとエラーになる（「コンパイルエラー：ParamArrayの使い方が適切ではありません。」というダイアログメッセージが出る）。
`ByVal` の `bar2` に渡すことは普通にできる。しかし `bar1` に渡すにはローカルでコピーをとって渡すしかないようだ。

```vbnet
Function foo(ParamArray v() As Variant)
    bar1 v     ' これはNG
    bar2 v     ' これはOK
    Dim tmp As Variant : tmp = v
    bar1 tmp   ' ← コピーならOK
    ...
Sub bar1(ByRef x As Variant)     ' ByRef渡し
Sub bar2(ByVal x As Variant)     ' ByVal渡し
```

VBAHaskellで `ParamArray` を使っている箇所は少ないが、そのひとつに `catVs` [^1] がある。任意個の1次元配列をつなげて配列を返す関数で、以前は下のような実装になっていた。ふたつの配列をつなげる `catV` 関数を `foldl1` する、という素朴なやり方だ。

```vbnet
'ベクトルを結合（可変長引数）
Function catVs(ParamArray vectors() As Variant) As Variant
    catVs = foldl1(p_catV, VBA.Array(vectors)(0))
End Function
```
`VBA.Array(vectors)(0)`　の部分が分かりにくいと思うが、少し書き直すと結局こういうことをやっているのと同じで、引数vectorsのコピーを作っている。

```vbnet
Function catVs(ParamArray vectors() As Variant) As Variant
    Dim tmp As Variant : tmp = vectors    ' コピー
    catVs = foldl1(p_catV, tmp)
End Function
```
これは`foldl1` 関数に引数 `vectors` をそのまま渡すことができないせいだが、もちろん効率は悪く、個々の配列が大きいときは無視できないコストになる。なにより無意味なコピーは無くしたいという気持ちが強い。
これには **swapVariant** [^2] を使って変数をスワップするのが有効な手段で、最近以下のように書き換えた。

```vbnet
'ベクトルを結合（可変長引数）
Function catVs(ParamArray vectors() As Variant) As Variant
    Dim i As Long
    Dim tmp As Variant
    If LBound(vectors) <= UBound(vectors) Then
        ReDim tmp(LBound(vectors) To UBound(vectors))
        For i = LBound(vectors) To UBound(vectors)
            swapVariant vectors(i), tmp(i)    ' スワップする
        Next i
        catVs = foldl1(p_catV, tmp)      ' 実際の処理
        For i = LBound(vectors) To UBound(vectors)
            swapVariant vectors(i), tmp(i)    ' 元に戻す
        Next i
    End If
End Function
```
もとの引数である `vectors` と同じ長さの配列 `tmp`を作り、個々の要素（それ自体が配列）をスワップして入れている。要素が巨大な配列だとしてもそのコストは無視できる程度だ。こうして作った `tmp` は通常の配列と同様に扱うことができるので、`foldl1` で処理すれば目的が達成できる。最後にもう一度スワップして元に戻してやる。
VBAHaskellで目標にしているループの排除が犠牲になっているが、これは課題としたい。
***
[VBAHaskellの紹介 その18（reverseをfoldで実装）](http://qiita.com/mmYYmmdd/items/96901d27d5997f50d3c0)
[VBAHaskellの紹介 その1（最初はmapF）](http://qiita.com/mmYYmmdd/items/c731edf943acc0a0ebe9)
ソース  https://github.com/mYmd/VBA

[^1]: [Haskell_4_vector.bas](https://github.com/mYmd/VBA/blob/master/Haskell_4_vector.bas) モジュール

[^2]: [VBAHaskellの紹介 その14（変数のムーブ）](http://qiita.com/mmYYmmdd/items/5f5ef2ff2d48489dc0cb)参照