OmniAICreator/Qiita-1.07M huggingface dataset:
OpalでElectronのアプリをつくる(その6)

この記事は[Opal Advent Calendar 2016](http://qiita.com/advent-calendar/2016/opal)の22日目の投稿として書いています。

今日はElectronのAPIをなんとかします。
ElectronのAPIラッパーはelectron_opalのopalディレクトリにあります。

<pre>
electron_opal/
├── lib/
└── opal/
    ├── electron/
    ├── browser_process.rb
    └── main_process.rb
</pre>

ElectronにはMain ProcessとRender Process(Browser Process)があるので、それぞれに必要なファイルをロードするように、ファイルが分かれています。
*opal/electron*の下に実際に読みこまれるファイルが入っています。

<pre>
opal/electron/
├── app.rb
├── main_process_modules.rb
├── renderer_process_modules.rb
├── both_process_modules.rb
├── browser_window.rb
├── fixtures/
│   ├── array.rb
│   ├── hash.rb
│   └── kernel.rb
├── fixtures.rb
├── observable.rb
├── window.rb
├── wrapper.rb
└── wrapper_class.rb
</pre>

*wrapper.rb*と*wrapper_class.rb*はjsのクラスをラップするためのモジュールです。`Native`で置き換えることができそうです。
*fixures*もラッパーで使われているようです。
*observable.rb*は`on`メソッドを持つもののインタフェースのようです。これも`Native`でできそうです。
*window.rb*はElectronのウィンドウを表わすクラスのようですが、viewの`render`を呼んでいたりしてビューのフレームワークに依存していそうです。これは捨てます。

結局、`Native`でラップしたクラスを作ればよいことになります。

以前つくったexample程度は動くようしようと思います。

```ruby:app/main.rb
require 'opal'
require 'native'

electron = Native(`require('electron')`)
app = electron.app

app.on('window-all-closed') {  app.quit unless $$.process.platform == 'darwin' }
app.on('ready') do
  main_window = Native(`new electron.native.BrowserWindow({width: 800, height: 600})`)
  main_window.loadURL("file://#{`__dirname`}/main_window.html")
  main_window.on('closed') { main_window = nil }
end
```

まずはElectronモジュールをつくります。

```ruby:lib/opal/electron.rb
require 'native'

module Electron
  class << self
    def app
      native.app
    end

    def native
      @native ||= Native(`require('electron')`)
    end
  end
end
```

ネイティブの`Electron`オブジェクトから`app`を取得できるようにします。

つぎは`BrowserWindow`

```ruby:lib/opal/electron/browser_window.rb
require 'electron'
require 'js'

module Electron
  class BrowserWindow
    include Native

    def initialize(name, params = {}, debug: false)
      `var { BrowserWindow } = require('electron')`
      @native = JS.new(`BrowserWindow`, params)
      @native.JS.loadURL("file://#{`__dirname`}/main_window.html")
      @native.JS[:webContents].JS.openDevTools if debug
    end

    alias_native :on
  end
end
```

ネイティブの`BrowserWindow`を`new`します。
ここでちょっとしたテクニックで`js`というモジュールを使っています。

http://opalrb.org/docs/guides/v0.10.3/compiled_ruby.html

使いかたはここらへんにあります。

これで*main.rb*が次のように書けるようになりました。

```ruby:app/main.rb
require 'opal'
require 'electron/browser_window'

app = Electron.app

app.on('window-all-closed') {  app.quit }
app.on('ready') do
  main_window = Electron::BrowserWindow.new('main_window', {width: 800, height: 600}, debug: true)
  main_window.on('closed') { main_window = nil }
end
```

今回はこれくらいで。さてもうすこし本格的なElectronのプログラムを書いてみたくなりますが、残り回数も少ないので次回は、これまで何度も出てきた`Native`の実装について書こうかと思います。それでは〜
Scalaのobjec-object mapperライブラリ Macrooomの紹介

[Scala Advent Calendar 2016のAdventar版](http://www.adventar.org/calendars/1492)の22日目です。
空いていたのを見かけたので登録をさせてもらいました。

[Macrooom](https://github.com/h-kishi/macrooom)というobject-object mapperのScalaのライブラリを先日作りましたので、そちらの紹介をさせていただきます。

## Macrooomとは
MacrooomはScalaのマクロ機能を使って、あるクラスのインスタンスの値をマッピングして別のクラスのインスタンスを生成するためのライブラリです
Macro + OOM (Object-Object Mapper)ということでMacrooomという名前にしました。

開発をしていると、似たようなフィールドを持っているけど、違う目的のクラスを作ることがあると思います。
そのクラスのインスタンスを生成する際にフィールド数が少なければ自分でマッピングする処理を手動で書いても良いのですが、数が増えて来ると手作業で書くのが面倒になってきますし、後から新しくフィールドを追加した際にマッピング部分を更新するのを忘れてしまうこともあります。
Macrooomを使うことで、Scalaのマクロを利用して自動かつ高速にマッピングを実行できます。

同じくマクロを使ってマッピングをするライブラリとして[Scala AutoMapper](https://github.com/bfil/scala-automapper)があり、こちらはネストも扱ってくれますが、ケースクラスにしか対応をしていません。
Macrooomはネストには対応をしていませんが、Scalaの通常のクラスとJavaのクラスにも対応をしています。


## 使い方

以下のようにbuild.sbtのlibraryDependenciesに追加すれば利用できます。

```scala
libraryDependencies ++= Seq(
  "com.github.h-kishi" %% "macrooom" % "0.2.0"
)
```

例えば、以下のような二つのクラスがあった時に、

```scala
case class SourceClass(id: Int, name: String) 
```

```scala
case class TargetClass(name: String)
```

以下のように関数を定義することで、オブジェクトのマッピングが実行できます。

```scala
import macrooom._

// Convert from Scala object to Java object
def convert(src: SourceClass) = ObjectMapper.convertTo[SourceClass, TargetClass](src)

val source = SourceClass(1, "Name")
val target = convert(source)
source.name == target.name // true
```

上記の`convert`は実際にはマクロで以下のようなコードが作られています。

```scala
def convert(src: SourceClass) = new TargetClass(name = src.name)
```


また、以下のようなScalaのクラスとJavaのクラスもMacrooomを使ってマッピングすることができます。

```scala
class ScalaClass(val id: Int, val name: String)
```

```java
class JavaClass {
  private int id;
  private String name;

  public void setId(int id) { id = id; }
  public int getName() { return id; }
  public void setName(String name) { this.name = name; }
  public String getName() { return name; }
}
```

注意する点としては、Scalaの場合はコンストラクタの変数名でマッピングをしますが、Javaの場合はデフォルトコンストラクタを使った後にアクセッサを利用して値をマッピングするようになっているので、それらが定義されていることが必須です。
(Javaだとマクロでコンストラクタの変数名が取れなかったため・・・)


## 参考にしたもの
元々は [scalikejdbc](https://github.com/scalikejdbc/scalikejdbc) の scalikejdbc-syntax-support-macro の `autoConstruct` が便利だったので同じように実現できないかな、というところから作り始めました。
マクロの使い方も`autoConstruct`の書き方を参考にさせてもらいました。

今回はMaven Central Repositoryに登録をしたのですが、その際のsbtファイルの書き方などは「[Scalaで作成したライブラリをMavan Central Repositoryに登録する手順](https://yukihirai0505.github.io/development/2016/11/13/scala-maven-central-repository.html)」を参考にさせてもらいました。


## 終わりに
私自身の用途としては、今関わっているプロジェクトでScalaのケースクラスをJavaのクラスへマッピングする必要があって使っています。
ニッチな用途向けになりそうですが、使えそうな場面がありましたら是非使ってみてください。

コード量が少ないので、Scalaのマクロに興味がある方はコードを見てみるとマクロを使うための参考になるかもしれません。
Visual Studio Codeの拡張機能を作って公開するまでの流れ

## はじめに
vscodeの拡張機能を作ったときに調べたことをまとめます。

## 雛形の作成 yo codeのインストール
拡張機能を作るにあたって，ジェネレーターで雛形を生成します。
インストールは`npm install -g yo generator-code`

[Yo Code - Extension Generator](https://code.visualstudio.com/docs/tools/yocode)

## vscodeで開発
vscodeの拡張機能はvscodeで作ります。
ジェネレーターで生成された拡張機能のフォルダをvscodeで開いてがしがし作っていきましょう。

変更を試すときは`F5`で拡張機能が有効になったvscodeのインスタンスを開きデバッグします。

## 公開
vscodeの拡張機能は[Marketplace](https://marketplace.visualstudio.com/VSCode)で公開します。

### vsceのインストール
vsceというツールでコマンド一発で公開できます。
インストールは`npm install -g vsce`

[vsce - Publishing Tool Reference](https://code.visualstudio.com/docs/tools/vscecli)

また，公開にはPersonal Access Tokenというものが必要です。
Visual Studio Team Servicesで作成しておきましょう。


### package.jsonの書き方
`package.json`にテーマの情報を書くと[Marketplace](https://marketplace.visualstudio.com/VSCode)上でかっこ良く表示させることができます。拡張機能のアイコンも指定できます。その他プロジェクトリポジトリの情報など，可能な限り詳しく書いておくと良いです。
![image](https://qiita-image-store.s3.amazonaws.com/0/56635/31ac5ceb-fed1-bfdf-ac70-11d5fa7dbbe9.png)

```json
{
    "name": "[拡張機能の名前]",
    "galleryBanner": {
        "color": "#000",
        "theme": "dark"
    },
    "repository": {
        "type": "git",
        "url": "[GitHubのプロジェクトURLなど]"
    },
    "bugs": {
        "url": "[GitHubのissuesのURLなど]"
    }
}
Xampp7 で php_intl.dll が読み込めない場合

# 環境

- Windows 10 x64
- Xampp 7.0.8 (WIN32)

# 現象

CakePHP3 に php_intl.dll が必要らしいので、php.ini 内の php_intl.dll のコメント(;)を外したが php 実行時に、

~~~
PHP Warning: PHP Startup: Unable to load dynamic library 'path/to/php_intl.dll'
~~~

のように表示されてしまう. また、php のディレクトリ内で下記を実行しても必要な dll は揃っている.

~~~
>deplister.exe ext/php_intl.dll
php7ts.dll,OK
icuuc57.dll,OK
icuin57.dll,OK
icuio57.dll,OK
MSVCP140.dll,OK
VCRUNTIME140.dll,OK
api-ms-win-crt-heap-l1-1-0.dll,OK
api-ms-win-crt-environment-l1-1-0.dll,OK
api-ms-win-crt-math-l1-1-0.dll,OK
api-ms-win-crt-runtime-l1-1-0.dll,OK
api-ms-win-crt-locale-l1-1-0.dll,OK
api-ms-win-crt-string-l1-1-0.dll,OK
KERNEL32.dll,OK
~~~

# 解決方法

「Visual Studio 2015 の Visual C++ 再頒布可能パッケージ」がインストールされていないかも？

- [Visual Studio 2015 の Visual C++ 再頒布可能パッケージ
](<https://www.microsoft.com/ja-JP/download/details.aspx?id=48145>)

# 結果

Warning は出なくなった. x64は入ってたけど、x86が入ってなかったのかも.
[Yamaha RTX 1200]拡張MIBの値を取得する

## この記事について
拡張MIBを登録して、snmpwalkコマンドで値を取る方法です。

## 前提
Yamahaルータには、SNMP設定がされているものとします。

## 背景
Yamahaの拡張MIBファイルからOIDの調べ方がわからず困っていた。
結果として、OIDが不明でも値を取得することができた。

※追記
下記の方法でOIDが調べられることが判明！
ただ、「YAMAHA-RT-INTERFACES」の値はどれを使えばいいかわからず。。。
ファイル名とかで適当にやってたらできた。

```
snmptranslate -On YAMAHA-RT-INTERFACES::yrIfPpInUtil
```

## 手順
### １．拡張MIBを登録する
ヤマハのWebサイトからRTX1100用の拡張MIBをダウンロードします。

http://www.rtpro.yamaha.co.jp/RT/docs/mib/

```
cd /usr/share/snmp/mibs
wget http://www.rtpro.yamaha.co.jp/RT/docs/mib/
```

ダウンロードしたファイルを解凍

```
tar zxvf yamaha-private-mib.tar.gz
```

snmp.confファイルを作成

```
vi /usr/share/snmp/snmp.conf
```

```snmp.conf
mibs all
```

snmpdサービスを再起動

```
service snmpd restart
```

### 2.値の取得確認
snpmwalkコマンドで値を取得

```
snmpwalk -v 2c -c public [IPアドレス] yrIfPpInUtil
```
Macで年賀状を作成する無料ツールおすすめ2017

いよいよ新しい年を迎える時期になりましたね。これから、新年の挨拶として年賀状の準備も始まりますね。

でも、きれいかつ無料の年賀状作りソフトはありませんか？ここで、Macで年賀状作成のオススメしたいフリーソフトとオンラインツールをご紹介します。

全部無料・会員登録不要で、しかも使い方が非常に簡単なので、Macで年賀状を作成したい場合はぜひお試しください。

１、Macで年賀状を作成するソフト

➀、はがきデザインキット2017 - インストール版
　　動作推奨環境： Mac OS X 10.7以上
　　メリット：直感的な操作で簡単に年賀状を作成できます。また、テンプレート素材も多く収録されているから、素材を組み合わせて綺麗な年賀状を自由に作成できます。

➁、プリントマジック
　　動作推奨環境： Mac OS X 10.4.9以上
　　メリット：シンプルな操作で本格的なデザインを作成することができ、通常のはがき作成に必要な差出人、住所録、素材など基本機能は全てカバーしています。宛名もMacにある住所録のデータからCSV・vCard形式でインポートして、年賀状作成に利用できます。

➂、おうちで年賀状屋さん
　　動作推奨環境： Mac OS X 10.7以上
スタンプ・文字スタンプ・お絵かき機能が付き、素材数も1000点以上と豊富に揃っています。また、作成した年賀状をケータイ・スマホに読み込める機能を搭載します。

２、オンラインツール
➀、はがきデザインキット2017 - ウェブ版
メリットなどはインストール版と同じです。

➁、Web年賀状キット2017
　　動作推奨環境：Safari 6.1以上
　　メリット：Macのウェブブラウザから起動するだけで、年賀状のデザイン選択から文字編集・挨拶文例の選択・印刷まで、簡単に年賀状が作成できます。

以上です。いかがでしたか？以上のソフトは無料・登録不要だけでなく、操作も簡単です。ぜひご利用ください。お正月が近づきましたら、早速年賀状の準備を始めましょう。

この記事の参照元は：
https://www.imobie.jp/support/make-new-year-card-on-mac.htm
VSCodeのcmdをUTF-8で使う

Windowsで開発してるんだけど、最近、コマンドプロンプトを見ながら作業するケースが増え、「だったら、VSCode使うのがストレス少ないんじゃない？」って動機でNetBeansから乗り換えてみた。
`ctrl+@`で出し入れできるコマンドプロンプト環境は非常に快適で、動作の軽さも相まって、かなり気に入ってるんだけど、そもそもWinのコマンドプロンプト、<b>日本語の文字が化けやがる。。。</b>
当然だけど、デフォルトはUTF-8ではないｗ

#文字化け直すのは簡単です（UTF-8化）

ググれば出てくるけど、コマンドプロンプト上で、`chcp 65001`って打つだけ。

#起動時のオプションでなんとか出来ないの？

開発で使うコマンドプロンプトなんて、立ち上げた時からUTF-8で動作しないと、ストレスが溜まることこの上ない！と思い、調べたんだけど思ったより記述してある記事がなく、ちょっと遠回りしてしまいました＾＾；

結論から言うと、以下の設定で起動時にUTF-8に変更することが可能です。

ファイル→基本設定→ワークスペース設定

```
"terminal.integrated.shell.windows": "C:\\Windows\\system32\\cmd.exe",
"terminal.integrated.shellArgs.windows": [
        "/k",
        "chcp",
        "65001"
    ]
```
を追加
これで`ctrl+@`で立ち上がるコマンドプロンプトはUTF-8で立ち上がるようになっる。

記述が少ないのは、過去のVSCodeだと設定できないとかあったんですかね？
とりあえず、1.8.1では問題なく稼働中。

VSCodeのコマンドプロンプトだと、コピペも`Ctrl+C` `Ctrl+V`でできるんで、快適！

#今日のハマりポイント
<b>ファイルの指定は、ちゃんと\をエスケープしてやらないとイケないんだゼィ。</b>
いや、記事とは関係ないんだけどね＾＾；なんか違和感がすごかったｗ
KubernetesのEviction Manager

この記事は、オールアバウト Advent Calendar 2016の22日目の記事です。
風邪をひいてしまい、ここ1週間くらい体調が優れません。

この前業務中に知ったKubernetesのEviction Managerについて書きます。
特に大きな負荷をかけていないのに、Kubernetesのノードの負荷が急に上がったので何かと思って調べてみたらEviction Managerでした。

# Eviction Managerとは
ノードのリソース使用状況を監視して、ノードをいい感じに安定して稼働させてくれるもの。
例えば、ノードのディスクがいっぱいになると使っていないコンテナやイメージを自動でクリーンアップしてくれる。クリーンアップ時はそれなりにCPUとディスクの負荷が上昇する。
元々は[kubelet Garbage Collection](http://kubernetes.io/docs/admin/garbage-collection/)だったが、こちらは廃止されるらしい。

# 発動条件
Eviction Managerが発動する条件はkubeletのオプションで指定する。現状、条件を変更するには各ノードにログインして`/etc/default/kubelet`を変更する必要がある。

デフォルトでは以下に設定されている。つまり、空きメモリが100M未満かノードの空き容量が10%未満か空きinodeが5%未満のときに発動する。
`--eviction-hard=memory.available<100Mi,nodefs.available<10%,nodefs.inodesFree<5%`

実際にノードにファイルを大量に書き込みしてinode使用率を96%にしてみたところ、使っていないコンテナとイメージが削除され、inode使用率が減少した。

`eviction-minimum-reclaim`オプションを設定するとEviction時にどれだけリソースを確保するか設定できるので、Evictionの負荷を多少を軽減させられるかもしれない。

その他にも、ポッドのEvictionやOOMもあるらしいが詳しい挙動は把握できていない。詳しくは、公式ドキュメント参照ください。
http://kubernetes.io/docs/admin/out-of-resource/
無理難題のはねのけ方　あるいは、客の脅し方

下請けCOBOLERとして生きていた頃のノウハウ Advent Calendar 2016の1８日目ぐらいの記事です。

##お客は無茶を言う
今回は自分のノウハウと言うより、自分の派遣先にいた超優秀なプロパーさんのやりかたについてです。
なのであくまでも下から見上げていてあーきっとこうなんだろうなって想像混じりのものになります。

ご存じの通りお客さんは思いついたことどんどん言ってきます。
お客と交渉する人が優秀なら重要性の低い仕事はどんどん弾いてくれます。
自分のいた所は大変優秀なプロパーさんだったので、変な依頼が来たら、
「それをしないと何が困るんですか？」
「分かりました、やりましょう、その代わり今の業務止めます」　←いきなりできませんとか無理ですとは言わない
「両方やれっていうんですか？それは無理ですよ！」　←大きな声で多少おどけた感じで

だいたいこんな感じで多くの無茶ぶりをはじき返してくれていたようです。(にも関わらず夜は遅かったですが)

その優秀なプロパーさん曰く、
<font color="Red">「客の言ってくることをそのまま現場に流すだけなら僕は要らない」</font> 
だそうです。
もしも大学の情報科を院まで出てお賃金の高いIT企業に勤めようとして間違って大手Sierに入ってしまい、スケジュール管理に追われソースを読むことも書くこともしない人は、自分が管理職にあることを認識していただければと思います。

####客をどんどん脅かそう
また、何度も仕様変更を出してきたり仕様を全然決めてくれないときもどんどん脅しましょう。
最終的に完成出来なくて困るのはお客さんです。彼らにもきっとボスがいて失敗したら問い詰められる立場です。
その意識を持たせることで、言うことを聴いてくれるようになってくれるんじゃないでしょうか

また、誰がどんなタスクをやっていて、今月はこのタスクを来月以降はこのタスクが〜と上に対してきちんと言える人だったのでチームもかなりの人数が確保されていました。(にも関わらず夜は遅かったですが)
これを説明出来ないとどんどん人が減らされてチームは野戦病院となり、品質は低下し、不幸が蔓延するのです

---
余談ですが、もし新規で外部連携バッチを作るときは、どうしてもな事情がなければ当日の夜間の連携ではなく翌日昼間とかに前日分を連携するゆとりを持った仕組みにしてください。。
バッチは落ちる前提でお客と話してください。。。
当日26時連携とかだと21時とかにjobがABEND(現代語訳：バッチが異常終了)したときに、時間に間に合わすためのものすごい量のアドレナリンが保守チームで放出されます。

あのプレッシャーもう無理です。
JSのthisについて、ハマった（ままになってる）こと

## 現象編

#### 背景と状況

事の発端は、
ブラウザ画面内で要素を点滅させる、
簡単なサンプルページを作ってみようとしたことです。
点滅させる方法はいくつかあるんだろうけど、
とりあえずjQueryの hide(), show() を
使う方法を思いついて以下のようなページを
作ってみました。

```slim
doctype html
script(src="jquery-3.1.1.slim.min.js")
.box
css:
  .box{
    width:100px;height:100px;
    background-color:red
  }
javascript:
  var n=0
  var e=$('.box')
  function x() {
    if((n+=1)%2==0)
      e.show()
    else
      e.hide()
  }
  setInterval(x,1000)
```

Ruby用テンプレートであるSlimで書いてますが、
Jade(Pug)でもほぼ同じです
（css: javascript: の部分を style. script. に変える必要はあるけど）。

「if文」で切り替える書き方があまりに昭和なので、その部分だけ書き換えてみました。

```javascript:誤
    [e.hide,e.show][(n+=1)%2]()
```
ありゃ、動かない。

+ おそらくjQueryにかかわる予想外の動作は this の周辺だろう
+ jQueryのメソッド群はレシーバ（であるjQueryオブジェクト）がthisに入ってることを前提として作られているらしい

という推測で、thisの周辺の実験をいくつかしてみました。

#### 分析（不完全）

```javascript:実験1
[()=>this,()=>this][0]()
// => グローバルオブジェクト
[function(){return this},function(){return this}][0]()
// => [function, function]
```
```javascript:実験2
var q={f:function(){return this}}
// => undefined
q.f()
// => オブジェクト
q.f()===q
// => true   ここまでは予想内の応答
[q.f,q.f][0]()
// => [function, function]
```
```javascript:実験3
function a(){return this}
// => undefined
b=()=>this
// => ()=>this
[a,b,0][0]()
// => [function, function, 0]
[a,b,0][1]()
// => グローバルオブジェクト
```

ということは、
1．function関数（アローでない）を
2．名前ありにせよ無名にせよ、また、
3. 関数オブジェクトとして、或はオブジェクトのメンバーとして
4. 配列に入れておき、
5. 添え字（ブレース[]で囲んで）を渡して１つの配列要素として取り出して、
6. ()を後置して呼び出す、と
7. その中ではもとの配列がthisになっている。

という現象のようです。

#### 考察と結論

+ （普通のプログラミング言語での経験では）配列に添え字を与えて要素を取り出したら、  
  その時点でそのデータは出処が配列であることを忘れて単なるデータとして扱われる、
  と考えられそうですが、
+ この場面では（たぶん）this という裏のルートを通じて、
  関数が呼び出された先まで配列がついてまわっています。

+ が、どういう仕組でそうなるのか、（現時点では）不勉強にしてわかりません（誰か詳しい人がいたらヒント下さいな）。

----

#### 迂回策
呼び出した関数の中で、this として
jQueryのオブジェクトが設定されている状態、になってればいいようです。

ということで、これなら動作する、という案をいくつか考えてみました。


~~~javascript
var e=$('....')  // を前提として以下のコードを書きます。

e[['hide','show'][(n+=1)%2]]()
    // メンバー名で取り出せば大丈夫みたい
{0:e.hide,1:e.show}[(n+=1)%2]()
    // オブジェクトにしてもなぜか大丈夫だった
[e.hide,e.show][(n+=1)%2].call(e)  // または apply
    // こういう局面での正攻法はこれなのかもしれない。
    // callやapplyがなぜあるのか、少しわかったような気がする
~~~

#### 落ち
あとになって気がつきました。
（jQueryを知ってる人は大抵すでにお気づきだろうけど）

~~~javascript
e.toggle()
~~~

こういうメソッドがあったのですね。
そもそも最初から配列の出番はなかったのだな。
（ちゃんちゃん）

でもまあ、上記のように、いろいろ調べたり考察したりする機会になったので、
勉強になったし、楽しかったです（80％ぐらいは 負け惜しみ）。
RadioButtonのチェックを一つだけデフォルトでチェック状態にする方法(メモ)


![スクリーンショット 2016-12-22 午後5.56.10.png](https://qiita-image-store.s3.amazonaws.com/0/33553/ced4c240-1460-c9a9-2351-769fe4fd5a0f.png "スクリーンショット 2016-12-22 午後5.56.10.png")

### コード上で`RadioGroup`にaddしていく場合

```
RadioGroup radioGroup = new RadioGroup(this);
    RadioButton radioBtn1 = new RadioButton(this);
    RadioButton radioBtn2 = new RadioButton(this);
    RadioButton radioBtn3 = new RadioButton(this);

    radioBtn1.setText("hoge");
    radioBtn2.setText("huga");
    radioBtn3.setText("piyo");


    radioGroup.addView(radioBtn1);
    radioGroup.addView(radioBtn2);
    radioGroup.addView(radioBtn3);
	
	// この一行がないと、他がチェック状態になってもチェックが移らない
    radioGroup.check(radioBtn1.getId());
 
```
【win7+DockerToolbox】docker-compose upできなくなる問題

# 環境

- Windows 7
- DockerToolbox 
  - docker-compose 1.9.0
  - docker 1.12.5
  - VirtualBox 5.1.10

# 問題発生

laradockでdocker-compose upできなくなった！

# 原因

docker-composeの[CHANGE LOG](https://github.com/docker/compose/blob/master/CHANGELOG.md#190-2016-11-16)を参照したところ、下記の記述がありました。

> Breaking changes
> 
> When using Compose with Docker Toolbox/Machine on Windows, volume paths are no longer converted from C:\Users to /c/Users-style by default. To re-enable this conversion so that your volumes keep working, set the environment variable COMPOSE_CONVERT_WINDOWS_PATHS=1. Users of Docker for Windows are not affected and do not need to set the variable.

↓

```
WindowsでDocker Toolbox / Machineを使用する場合は
**環境変数COMPOSE_CONVERT_WINDOWS_PATHS = 1を設定します** 
Docker for Windowsのユーザーは影響を受けず、変数を設定する必要はありません。
```

大雑把な意訳ですが、そういうことのようです。

# 解決方法

ということで、
コントロールパネル > システムとセキュリティ > システム > システムの詳細設定 > 環境変数 > 新規 で環境変数を設定する

変数名：COMPOSE_CONVERT_WINDOWS_PATHS
変数値：1

## 結果

無事に docker-compose up できました！
`take`してもcompletedさせない

(追記) : こちらで詳しく書き直しています。
[続・takeしてもcompletedにさせない](http://blog.sgr-ksmt.org/2017/05/05/rx_take_no_completed/)

ちょっとした小ネタです。(カレンダー埋めさせてください...!)

## `take`を使ってイベント送信を絞る
`take`を使って、イベント送信を指定した回数だけ絞ることができるのですが、
takeで指定した回数分イベントが流れると、`completed`が流れます

```swift
let subject = PublishSubject<Int>()

subject.take(1)
    .subscribe { print($0) }
    .addDisposableTo(disposeBag)

subject.onNext(1)
subject.onNext(2)
subject.onNext(3)
```

```swift:output
next(1)
completed
```

### ちょっとした問題
ただ、場合によっては、 `completed` が流れることで他のストリームに影響がでてしまうこともあります。

```swift
let subject = PublishSubject<Int>()

subject.take(1)
    .bindTo(otherSubject)
    .addDisposableTo(disposeBag)
// subjectでイベントが1回送信されたあと、`completed`してしまうことで
// bindした別のストリームに影響がでることもある。
```

なので、`take`で絞りつつも、`completed`が流れないようにしてみます。

## `concat(merge)`、`never`を活用する
takeで絞ったストリームと、`never`を`concat`で1つのストリームに合成します。
そうすることで、`take`で絞ったイベントが実行された後は、`never`があることで`completed`せずにすみます

```swift
Observable.of(subject.take(1), Observable.never())
    .concat()
    .subscribe { print($0) }
    .addDisposableTo(disposeBag)

subject.onNext(1)
subject.onNext(2)
subject.onNext(3)
```

```swift:output
next(1)
// completedにならない!!
```

### 余談(別解)
`take(1)`の代わりに、`single`を使っても同じことができます。
ただ、`single`の場合は、2回目以降イベントが送信されると`error`が流れてくるので、それを握りつぶしてあげる必要があります。

```swift
Observable.of(subject.single().catchError { _ in Observable.never() }, Observable.never())
    .concat()
    .subscribe { print($0) }
    .addDisposableTo(disposeBag)
```

## ちょっとした例
以前に[こちらの記事](http://qiita.com/su_k/items/e259e00f5c0a2f3109ff)を書いたのですが、この例だと

```swift
Observable.of(rx.viewWillAppear.take(1), Observable.never())
    .concat()
    .subscribe(onNext: {
        print("viewWillAppearが呼ばれた!")
    })
    .addDisposableTo(disposeBag)
```

となります。
CakePHP3：admin用のレイアウト

レイアウトの作成

```
mkdir -p app/src/Template/Admin/Layout
cp app/src/Template/Layout/default.ctp app/src/Template/Admin/Layout/admin.ctp
```

AppControlllerを編集し、prefixに応じてlayoutを選択

```src/Controller/AppController.php
    public function beforeRender(Event $event)
    {
        // 以下の5行を追加
        if ($this->request->param('prefix') === 'admin') {
          $this->viewBuilder()->layout('admin');
        } else {
          $this->viewBuilder()->layout('default');
        }
        if (!array_key_exists('_serialize', $this->viewVars) &&
            in_array($this->response->type(), ['application/json', 'application/xml'])
        ) {
            $this->set('_serialize', true);
        }
    }
```
[Java][Spring Boot] 実行時のプロファイルを指定する - NetBeansで始めるSpring Boot

NetBeansからプロジェクトを実行するとき、Spring Bootのプロファイルを指定する方法です。

プロジェクトを右クリック ＞ プロパティ ＞ ツリーからＲｕｎを選ぶ

必要があれば、[Configuration]ドロップダウンからMavenのプロファイルを選びます。

[VM Options]にJavaへの引数を入力します。

```
-Dspring.profiles.active=development
```

![Screenshot from 2016-12-22 17-32-16.png](https://qiita-image-store.s3.amazonaws.com/0/59475/20f5dc23-dff5-0400-79f7-84f5c5125f31.png)


# 環境

- Java 8
- Spring Boot 1.2.7
- NetBeans 8.1
超細粒度タスクでポモドーロ・テクニックする

僕はポモドーロ・テクニックをやるのですが、25分の粒度にタスクを分解するのが難しいと感じてました。

時間ぴったりのタスクが作れずストレスが溜まったりしていたのですが、昨日しっくりくる方法を確立しました。

### 通常の「ポモドーロ・テクニック」ルール
---

- 25分を1ポモドーロとする。
- やるべきタスクをポモドーロ単位（25分）に分解する。
- ポモドーロ中は、他の事は一切やらず、タスクに集中する
- 1ポモドーロ終了後、5分間の休憩を入れる
- 4ポモドーロ毎に、30分程度の長い休憩をとる
- 上記を繰り返す

基本は↑なのですが、色々とあって僕なりにしっくり来たルールを書きます。

#### 前準備
---

- タスクの大目標を決める（hoge機能の追加など）
- 大目標達成のために必要な中目標をざっくりと決める
  - 1ポモドーロよりも時間が掛かる単位
  - hoge機能の中のデータ登録機能を作るなど
  - 横やりで入ったメール送信や他タスクなども中目標に入れて良い

### 改造版ルール
---

- 25分を1ポモドーロとして開始する。
- ポモドーロ中はタスクに集中する
  - 途中で横槍が入ったら、ポモドーロ失敗とする。
- 1ポモドーロ終了後は、5分休憩する（アイマスクするとかガチで休憩する）
- 4回とか決めずに、疲れたら15分〜30分の長い休憩をとる。
- 1週間で40ポモドーロぐらいこなす（数字は多すぎると辛い。適宜無理のない範囲で。）
- ポモドーロの回数を一週間の作業終了とリンクさせる。
- ダラダラ残業しない。早く終わったらそれで帰る。帰れないなら仕事しているフリをして、勉強したりプライベートの作業をやる。

### １ポモドーロ内のルール
---

- 最初にまっさらなテキスト・エディターを用意する。
- ファーストビューで見えている範囲の下の方に中目標を書く（超最粒度を上の方に書くため）
- 中目標を超細粒度に分解する。（適当に5個くらい）
  - お気に入りの開発環境を開く
  - 空のhtmlを表示する。（URLは適当）
  - inputタグを書く
  - formを書く。
  - まともなURLを設定する。
  - 空のControllerを書く。
  - inputタグのリクエストがControllerに飛ぶことを確認する。
- 終わったら即消して次の超細粒度タスクに移る。（小さければ小さいほど、サクサク進んで気分が良い）
- 超細粒度タスクが空になったら適当な数追加する。

以上を、中目標が全部無くなるまで続ける=大目標達成

### 本家と何が違うのか？
---

 - 25分で終わる作業に分解するのがストレスだったが、それが無くなる。
 - 超細粒度タスクがサクサク終わるので気分がノッて来る。

### 使っているトマト
---

何を使っても良いですが、タイマーの音が聞こえるトマトを使ってください。下記のやつは音が良いのと、jarファイル版ならlinuxでも使えるので使っています。

正規版は、[http://tomighty.org/](http://tomighty.org/)からダウンロード出来ます。

Java8がインストールされている人は、下記からjarファイルを落としてきて、ダブルクリックで実行できます。

[https://github.com/tomighty/tomighty/downloads](https://github.com/tomighty/tomighty/downloads)

※Java8でないと動かないので注意!!

### まとめ
---

一般的にポモドーロ・テクニックは、作業効率化のみのように言われますが、

- ポモドーロの回数による一週間の作業終了宣言（誰が見ても明確なタスク完了ルール）
- 超細粒度タスクの達成時のサクサク感が楽しい

など、良い面があります。

もちろん集中しているので、おそらく少ないポモドーロ数でも、ダラダラやったときより生産性が上がると思います＾＾
Slack のファイル名がおかしくなるやつを解読するコマンド作った

[Slack のファイル名がおかしくなるやつを解読する](http://qiita.com/riaf/items/539b5cedc6921b72aedf)コマンド作った。

https://github.com/ushios/fixlack

けどまだ`~/Downloads`下だけだし、絵文字とか変な文字のやつは無視しちゃうけどまあ今はいいか・・・・
Raspberry PiがTP-LINK製WiFiアダプタを自動認識しない場合の対処法

# 概要

これはRaspberry Pi2 Model BへTP-LINK製WiFiアダプタ TL-WN725N v2を取り付けるための手順及び方法を示したものである。

# 動機

Raspberry Piの離地利用を図り、格安のTP-LINK製WiFiアダプタを購入するも、USBポートに差し込んだだけでは自動的にWiFiドライバが認識されない。大概のWifiアダプタは認識されるのに、これは誤算だった。そのため情報を集めて手動で設定を行い、何とか利用できるようになった。この記事は個人的な備忘録であると共に、当該手順について日本語で解説するものである。もしかすると、この手順はRaspberry Pi2 Model BやTL-WN725N v2に限らず、他へも応用できるかもしれない。

# 手順

まずはTL-WN725N v2をUSBポートに差し込んだ際のデバイス認識は以下の通り。

```
$ lsusb
Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.
Bus 001 Device 004: ID 0bda:8179 Realtek Semiconductor Corp.
```

USB IDが"0bda:8179"として表示されているので一応は認識されている。ただし、標準ではWiFiドライバが搭載されていない様子。これがBuffalo製であれば詳細に"BUFFALO INC..."とか表示されるのだけども。

**※予め注告しておくが、当該手順を終えてもlsusbコマンドの表示内容は変わらない。失敗したと誤認して焦らないように。**

## WiFiドライバのインストール

2017年7月確認時点で自動インストーラが配布されてました。Raspberry Piがインターネットへ接続できる環境にあれば、こちらを利用した方がよいでしょう。以下のコマンドを実行すれば、自動的に似合うドライバをインストールしてくれます。

```
$ sudo wget http://www.fars-robotics.net/install-wifi -O /usr/bin/install-wifi
$ sudo chmod +x /usr/bin/install-wifi
$ sudo install-wifi
```

自動インストーラを利用しない場合、ネット上でWiFiドライバのインストーラを取得する必要がある。まずはRaspbianのバージョンを確認する。

```
$ uname -a
Linux raspberrypi 4.4.8-v7+ #881 SMP Sat Apr 30 12:16:50 BST 2016 armv7l GNU/Linux
```

この場合は**8188eu-4.4.8-v7-881.tar.gz**のインストーラを利用する。他のバージョンであっても、バージョン情報に合わせて"4.4.8-v7-881"の箇所を変更すれば良い。

インストーラのダウンロード及び実行は以下の通り。

**※2017年7月確認時点でダウンロード先が変更されていました。**

```
$ wget http://www.fars-robotics.net/8188eu-4.4.8-v7-881.tar.gz
$ tar xzf 8188eu-4.4.8-v7-881.tar.gz
$ ./install.sh
```

## インストール完了後の確認

インストール完了後、Raspberry Piを再起動します。正しくインストールができていれば、以下のコマンドで`wlan0`デバイスが確認できます。

```
$ ip address

```

WiFi設定を行えばWiFiを利用できるようになる。WiFi設定については割愛する。


# 参考

- [Raspberry Pi • View topic - (UPDATE) Drivers for TL-WN725N V2 - 3.6.11+ -> 4.xx.xx+](https://www.raspberrypi.org/forums/viewtopic.php?f=28&t=62371)
お世話になったあの人とのHipChatプライベートメッセージをいつまでも残しておく方法

# さよならはいつだってさびしい
HipChat は退会処理をすると、プライベートメッセージは削除されちゃう仕様らしいです（チャットルームの会話ログは残るらしい)
いつまでもプライベートメッセージを残しておきたい、そんな衝動にかられて、30分で作りました。

# 準備
## create new token
HipChat API v2 を使うので、プライベートメッセージを読み取る用のtokenを発行しておきます。

 * https://ほげほげ.hipchat.com/account/api

（URLは適宜読み替えてね）

<img width="434" alt="new_token.png" src="https://qiita-image-store.s3.amazonaws.com/0/62697/254264d5-cd79-2c3d-4694-bba5fabd702a.png">

## お世話になったあのひとのIDを取得する

* https://ほげほげ.hipchat.com/people

ここから相手を探します。

* https://ほげほげ.hipchat.com/people/show/1234567

こんなURLのページになったら、末尾がIDです。

## プライベートメッセージを取得する

* https://www.hipchat.com/docs/apiv2/method/view_privatechat_history

このAPIを使って取得します。

```sayonara.sh
#! /bin/sh

flag=true
max=100
token='取得したトークン'
id=相手のID
index=0
trial=0
log='出力先のログ'
date='相手の初出社日'
enddate='相手の最終出社日'

while ${flag}; do
    if [ ${trial} -gt 100 ]; then
        echo "max trial."
        exit
    fi
    echo ${index}
    ret=$(curl -X GET "https://ほげほげ.hipchat.com/v2/user/${id}/history?auth_token=${token}&timezone=Asia/Tokyo&date=${date}&end-date=${enddate}&reverse=false&start-index=${index}&max-results=${max}")
    if [[ ${ret} =~ .*(\"items\": \[\]) ]]; then
        flag=false
    else
        index=$(expr ${index} + ${max})
        echo ${ret} >> ${log}
        sleep 1s
    fi
    trial=$(expr ${trial} + 1)
done

echo "end"
```

## 実行

```bash
bash sayonara.sh
```

思い出がたくさんあるだけ時間がかかります。

## 確認する

jq コマンドとか使うと見やすいです。
時系列降順なので、先頭が最近の会話になってます。
ローカルにファイルが起こせたら、あとはじっくり整形すればいいわけですね。


# まとめ

さびしい
すぐできる！Slack×Googleアラートで最新情報をキャッチアップ

SlackとGoogleアラートを使ってRSSフィードを自動投稿する方法です。
業界動向や最新技術のキャッチアップなどをSlackで情報収集すると、***記事に対するメンバーの意見や関連情報などが自然と集まる***ようになり、各々が情報収集するより***意見交換が活発になるメリット***があります。

導入の手順は

- **GoogleアラートでRSSを作成**
- **SlackにRSSフィード登録**

の2ステップだけです。
導入が簡単な上に効果てきめんだったのでぜひ参考にしてみてください。

# 手順

## 1.GoogleアラートでRSSを作成
以下のリンクを参考に、キャッチアップしたいキーワードのRSSを作成します。


- [Googleアラートを『最強の最新情報収集ツール』として使う『設定と使い方』](http://wepli-dot2.hatenablog.com/entry/Google-Alert)

## 2.SlackにRSSフィード登録
以下のように、```/feed 【RSSのURL】``` コマンドでRSSを登録することが出来ます。

![Slack 3.png](https://qiita-image-store.s3.amazonaws.com/0/41569/21fa49e5-f287-4a56-f9ce-773704b76d22.png)

## 参考.登録したRSSを確認したいときは
以下のように、```/feed list``` コマンドで登録したRSSを確認することが出来ます。

![Slack_と_会計仕訳_会計仕訳_-_Cacoo.png](https://qiita-image-store.s3.amazonaws.com/0/41569/67cf0e62-54f1-84c2-9870-9a08bce694cd.png)

![Slack_2.png](https://qiita-image-store.s3.amazonaws.com/0/41569/b565f1e5-5514-4bf0-870c-7a0881e4ff53.png)
EV3に関する技術記事まとめ

<!-- 
[]()
by
-->

# 記事一覧
## TOPPERS/EV3RT
[TOPPERS/EV3RTの開発環境を整える](http://qiita.com/tkzw102/items/93dd959cccf2efc8d4a6)
by tkzw102

[TOPPERS/EV3RTのサンプルプログラムを実行する](http://qiita.com/tkzw102/items/6578593763413bbb1dc2)
by tkzw102

[TOPPERS/EV3RTでEV3のモーターを回してみる](http://qiita.com/tkzw102/items/e05ef4266fbddbc4b56d)
by tkzw102

[TOPPERS/EV3RTでEV3のタッチセンサーを使ってみる](http://qiita.com/tkzw102/items/90254c5a4cb0ee22fbf8)
by tkzw102

[TOPPERS/EV3RTでEV3のカラーセンサーを使ってみる](http://qiita.com/tkzw102/items/b5b4b341f3973175f6d3)
by tkzw102

## ETロボコン
[ETロボコンにおける自己位置計測（その1、距離計編） with EV3](http://qiita.com/PsychoGundam009/items/ba6190f08d26df7cc8ad)
by TetsuroAkagawa

[ETロボコンにおける自己位置計測（その２、方位計編） with EV3](http://qiita.com/PsychoGundam009/items/4e7de30523d9c7ec6241)
by TetsuroAkagawa

[ETロボコンにおける自己位置計測（その3、座標移動編） with EV3](http://qiita.com/TetsuroAkagawa/items/075d74f5ab49f592450b)
by TetsuroAkagawa

[ETロボコンにおける自己位置の応用（エリア分割） with EV3](http://qiita.com/TetsuroAkagawa/items/1798c12e9517e6f1cbe9)
by TetsuroAkagawa


## ev3dev
[mindstorm-EV3をLinuxで制御しよう! ev3dev OSのインストールととSSH接続](http://qiita.com/murotani/items/46f905bec33b1673c41a)
by murotani

[mindstorm-EV3 ev3devでコマンドラインからモーター制御、センサー値取得する方法まとめ](http://qiita.com/murotani/items/d4e8b21b84fe0b99d579)
by murotani

[Xbox360コントローラーとmindstorm-EV3でラジコンを作る【前編】](http://qiita.com/murotani/items/b1b14d4399cf182a7bde)
by murotani

[Xbox360コントローラーとmindstorm-Ev3でラジコンを作る【後編・プログラム解説】](http://qiita.com/murotani/items/e911bb96aabe44612d88)
by murotani

[ev3devでmindstorm-EV3のLEDを制御しよう](http://qiita.com/murotani/items/59805240048082833dee)
by murotani

[ev3devでmindstorm-EV3のスピーカーを使ってしゃべらせてみる](http://qiita.com/murotani/items/08818559b3fe3cf66e46)
by murotani

[nodejsでmindstrom-EV3を制御するev3dev-lang-js入門](http://qiita.com/murotani/items/86921723020e4a537ed5)
by murotani

[ev3dev-lang-jsとsocket.ioを使って簡単なwebアプリを作る](http://qiita.com/murotani/items/70470de079dd8a298d85)
by murotani

[ev3devとWEBカメラでオリジナルカメラを作る【前編】](http://qiita.com/murotani/items/9a1b121a4500faf9e0db)
by murotani

[ev3devとWEBカメラでオリジナルカメラを作る【後編・プログラム解説】](http://qiita.com/murotani/items/530a5586bcc7a77b9d7b)
by murotani

[【ev3dev】nodejsでインテリジェントブロックのボタン押下状態を判定するプログラムを実装](http://qiita.com/murotani/items/25e993fddd4ef244894d)
by murotani

[【ev3dev】pythonを使ってLCD(画面)をキャプチャーするプログラムを作る](http://qiita.com/murotani/items/8f301c57d3e5741ea8f7)
by murotani
【ゲリラアドカレ】UE4ゲーム実装　進捗報告 10日目(通常戦闘のロジック)　プロトタイプ完成

【非公式】某会社設立記念ゲリラ Advent Calendar 2016 19日目の記事です。

FlashゲームをUE4で再実装するゲリラアドカレです。
バトルで通常攻撃のロジックが組めたので掲載します

・注意
許可を取ってないので通常業務の空いた時間を利用して作成するため、作成中のゲーム、及びアドカレは完成保証がなければ、ゲーム自体もリリースされる保証も皆無なので、あんまり期待しないでください。

#ターンロジック

バトルの仕様をコマンド選択後、即攻撃に変更したため、ターンを進める処理を変更しています。

ターンを終了した時にイベントを発行し、素早さ順に進めます。
敵ならターゲットを選んで攻撃、味方ならコマンド表示をします
![battle1](http://oginoyuki.wp.xdomain.jp/wp-content/uploads/2016/12/battle1.jpg)

行動終了後、敵、味方どちらか全滅しているかチェックします。
どちらか全滅した場合はバトル終了です。
![battle6](http://oginoyuki.wp.xdomain.jp/wp-content/uploads/2016/12/battle6.jpg)

もし生き残っていたら、１ターン進めます
![battle3](http://oginoyuki.wp.xdomain.jp/wp-content/uploads/2016/12/battle3.jpg)

これの繰り返しになります。

#通常攻撃ロジック

味方のコマンド選択が終了したら、イベントを発行して通常攻撃の処理を行います。
![battle2](http://oginoyuki.wp.xdomain.jp/wp-content/uploads/2016/12/battle2.jpg)

敵のターンであれば、攻撃相手を選んで攻撃します。
ここでは単純なロジック、先頭から攻撃するようにしています。プロトタイプなので、複雑には組みません。
![battle5](http://oginoyuki.wp.xdomain.jp/wp-content/uploads/2016/12/battle5.jpg)

通常攻撃のダメージ処理です。とりあえずダメージが0なら回復しないようにしています。
![battle4](http://oginoyuki.wp.xdomain.jp/wp-content/uploads/2016/12/battle4.jpg)

#これでターンが進めるようになった

![battle7](http://oginoyuki.wp.xdomain.jp/wp-content/uploads/2016/12/battle7.jpg)

これで最低限バトルが出来るようになりました！
ゲームとして一通り流れが確認できるレベルになったため、プロトタイプを満たしたことになります。

とりあえず当初の目的は達成、と言ってもいいと思います。
残りはよりバトル画面らしくするため、通常攻撃の演出や未実装であるスキルを実装できれば実装していきます。

25日まで残りは休みしかありませんが、出来る限りのことはやります。
nginx+codigniterで特定のディレクトリ配下で設置したいときの設定ファイルのサンプル

世の中で出回っているのだとCSSとかもcodigniterの影響を受けてしまうので
`
location /hoge {
　　root /home/www/html/; #hogeまでは含まない
　　if ($request_filename ~ ^/(.*\.css)) {
　　　break;
　　}                
　　if (!-e $request_filename) {
　　　rewrite ^(.*)$ /hoge/index.php?q=$1 last;
　　}
}
`
日経平均やダウ平均の状況をモードラインに表示する

# はじめに

経済状況が気になって仕方がないEmacsユーザにオススメです．`stock-ticker.el`を使います．

![Screen_Shot_2016-12-22_at_4_14_32_PM.png](https://qiita-image-store.s3.amazonaws.com/0/12232/73345a99-1e68-c5f5-390b-7f3f4069f815.png)

**NOTE: 最近繋がらないと思っていたら，YQLのデータベースのURLが変わっていました．`stock-ticker--update` にあるURLを `http://www.datatables.org/alltables.env` にすれば大丈夫です．ISSUE発行済．**

**NOTE: ISSUEが未解消なので，自分のリポジトリに置きました．**

```
git clone https://github.com/takaxp/stock-ticker.git
```

# 導入

MELPA を使うか，[Github](https://github.com/hagleitn/stock-ticker)から入手できます．

# 関数の再定義（オプション）

`stock-ticker.el`をそのまま使うと，モードラインの表示が長くなる傾向があるので， `stock-ticker--parse` を再定義して，銘柄（3桁のみ）と変動率だけを表示するようにします

```el:stock-ticker--parse.el
(defun stock-ticker--parse (data)
  "Parse financial DATA into list of display strings."
  (let ((qs (assoc-default
             'quote (assoc-default
                     'results (assoc-default 'query data)))))
    (mapcar
     (lambda (q)
       (let ((percent (assoc-default 'PercentChange q))
             (name (assoc-default 'Name q))
             (symbol (assoc-default 'Symbol q))
             (change (assoc-default 'Change q)))
         (format " %s:%s"
                 (substring
                  (if (or
                       (string-match "=" symbol)
                       (string-match "\\^" symbol))
                      name symbol) 0 3)
                 (if percent percent ""))))
     qs)))
```

# 設定

起動時には表示不要なので，ウィンドウにフォーカスが移った時に開始して，さらに指定秒数後に（デフォルト：90秒）でモードラインから消えるようにしています．表示秒数を指定したい場合は，`my:activate-stock-ticker`を引数付きで呼び出してください．

```el:stock-ticker-config.el
;; 適宜，遅延読み込みに設定を書き換えてください．
;; 初めてstock-ticker-global-modeが呼ばれる時に，パッケージを読み込むようにすればOKです．
(require 'stock-ticker)

;; 一定時間後に表示を消す独自関数
(defun my:activate-stock-ticker (&optional duration)
  "Activate stock-ticker within the given duration."
  (stock-ticker-global-mode 1)
  (unless (numberp duration)
    (setq duration 90))
  (run-with-timer duration nil 'stock-ticker-global-mode -1))
(add-hook 'focus-in-hook 'my:activate-stock-ticker)

;; 銘柄表示の間隔を変える
(setq stock-ticker-display-interval 5)
;; 銘柄指定
(setq stock-ticker-symbols '("^N225" "DOW"))
;; 5分に一回サーバから最新の価格変動を取得
(setq stock-ticker-update-interval 300)
```

# おわりに

需要は低そうですが，内部的には Yahoo の [Developer API](https://developer.yahoo.com/yql/)を定期的に叩いているだけです．なので，APIの呼び出し先とかをカスタマイズしたパッケージを書くと，株価に限らず，欲しい情報をなんでもモードラインに定期的に表示することが可能と思います．
Rails5 + sqlite3のrails consoleでsqliteのエラーでハマったこと

# 動作環境
rails 5.0.0.1
sqlite3 3.14.0

rails consoleで直にActiveRecord叩いたら以下のエラーがでてハマった。

```
$ rails console
irb(main):001:0> Message.create! content: 'Hello world!'
/Users/hiromichi.ema/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/activerecord-5.0.0.1/lib/active_record/connection_adapters/sqlite3_adapter.rb:27: [BUG] Segmentation fault at 0x00000000000110
ruby 2.3.3p222 (2016-11-21 revision 56859) [x86_64-darwin16]

-- Crash Report log information --------------------------------------------
   See Crash Report log file under the one of following:
     * ~/Library/Logs/CrashReporter
     * /Library/Logs/CrashReporter
     * ~/Library/Logs/DiagnosticReports

     * /Library/Logs/DiagnosticReports
   for more details.
Don't forget to include the above Crash Report log file in bug reports.

-- Control frame information -----------------------------------------------
# 略

```

参考にしたのはこのあたり

> http://stackoverflow.com/questions/39969734/rails-5-bug-segmentation-fault
> http://stackoverflow.com/questions/29092848/error-running-rails-server-on-os-10-10-2

結論から言うと、activesupportとかその周辺のバージョンが古かったみたい？な感じかと。

なので、

```zsh
$ bundle update 
```
でGemを最新に更新したら、正常に動作しました。

```zsh 
$ rails console 
irb(main):002:0> Message.create! content: 'Hello world!'
   (0.0ms)  begin transaction
  SQL (0.7ms)  INSERT INTO "messages" ("content", "created_at", "updated_at") VALUES (?, ?, ?)  [["content", "Hello world!"], ["created_at", 2016-12-22 07:13:27 UTC], ["updated_at", 2016-12-22 07:13:27 UTC]]
   (2.5ms)  commit transaction
=> #<Message id: 1, content: "Hello world!", created_at: "2016-12-22 07:13:27", updated_at: "2016-12-22 07:13:27">

```
C#を一行も書かずにボタンクリックでWindowを閉じる

コードビハインドは書きたくないけどわざわざ自分でAction作るのも面倒。
ということで出来合いのものでなんとかします。
System.Windows.Interactivity.dllとMicrosoft.Expression.Interactions.dllを参照に入れておいて、

```csharp
<Button>
    閉じる
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="Click">
            <is:CallMethodAction MethodName="Close"
                                 TargetObject="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}"/>
        </i:EventTrigger>
    </i:Interaction.Triggers>
</Button>
```
EventTriggerでクリックイベントを拾ってCallMethodActionでCloseを呼びます。
プロジェクトのふりかえりのガイドライン

## このドキュメントは

こんにちは。iRidge Advent Calendarの22日目を担当してみます。

ここ最近、社内の様々なプロジェクトのふりかえりに参加する機会があり、ふりかえりをする上でも様々な工夫があるなと気づくことが多くありましたので、それをガイドラインという形でまとめてみました。参考になれば幸いです。

## 「ふりかえり」とは

プロジェクトのふりかえりとは何か、改めて整理してみました。

ふりかえりは、プロジェクト完了後に、プロジェクトで起きた計画や事実をふりかえり、次のプロジェクトに活かせる知見を発見・共有する目的で開催しています。 **継続的な改善、仕組み化** を推進するために非常に重要な活動だと認識しています。

## ふりかえりのやり方

### 司会者を用意する

関係者が多いプロジェクトのふりかえりの場合、プロジェクト内部のメンバーだけでふりかえりを実施すると、利害関係にある立場同士で言い合いになってしまい、望ましくない進行になる恐れがあります。適切な司会者を用意することでこの問題を防ぎ、円滑に進行することができるようになります。プロジェクトに直接関係しない人を司会者にすると、発生した問題について冷静に判断して処理することができるようになります。

### 最初に「問題 vs 私たち」という構図を確認する

上とやりたいことは同じですが、ふりかえりのミーティングの開始時に、 **「問題 vs 私たち」** という構図であることを改めて確認します。後述のKPT、YWTの項目を列挙する時も、特定の個人を攻撃するような記載は控えるように周知します。

### QCDの観点でプロジェクトを確認する

プロジェクトを評価する上で、QCD（品質、コスト、納期）の観点から確認すると、プロジェクトの概要が把握できます。例えば以下のような観点から、◎、○、△、×のような評価をしてプロジェクト関係者と認識合わせをします。

- 品質
    - リリース後不具合の発生件数
    - コードレビュー率
    - 単体テストのカバレッジ率
- コスト
    - プロジェクト全体の原価
    - 稼働の予算と実績
- 納期
    - 納期遅延の有無
    - マイルストーン（要件定義、設計、開発、テスト、リリースなど）のスケジュールの計画と実績

### プロジェクト計画時に挙げたリスクの対応を評価する

弊社では、プロジェクト開始時にプロジェクト計画をレビューし、考えられるリスクと対策の一覧を作成しています。ふりかえりの時にそのリスクと対策の妥当性について確認することで、次回のプロジェクトではより適切な計画ができるようになります。リスクは以下の観点で評価しています。

- ○:顕在化しなかった 
- △:顕在化したが影響少ない 
- ×:顕在化して影響があった


### KPT、YWT手法を使って振り返る

ふりかえりの定番、 **KPT(Keep、Problem、Try）** を使い、関係者の意見を引き出します。KPTについては各所で説明があるので、ここで説明することはしません。KPT以外にも **YWT（やったこと、わかったこと、次にやること）** を採用しても良いでしょう。

各項目はGoogleスプレッドシートにみんなで事前に書き込んでもらうか、付箋に直接書き込んでもらうことが多いです。4~5人くらいの小グループに分けて意見出しを繰り返すと、全員の意見を反映しやすくなります。（大人数だと発言しない人がどうしても出てくる）

### 次に活かす

ふりかえりでえた知見は共有し、次のプロジェクトに活かすようにします。プロジェクトに失敗はつきものですが、同じような失敗を起こさない工夫が必要です。必要に応じて、仕組み化を検討します。個人の頑張りに期待しないような対策であることが望ましいです。


## おわりに

ふりかえりについて、ふりかえってみるのはなんとなく年末にふさわしい気もしますね！書き終わってみて、今年一年を振り返ってみたいなと思いました。
かねがね実用性のあるSlack botをRuby(とHeroku)で作ってみよう！

SlackのbotをRubyで作ろう！講座です。とってもカンタン。

【環境】
・Ruby 2.3.1

## まずは下準備♫
①お好きなディレクトリで下記コマンドを順に入力

```:ターミナル
$ mkdir test_bot
$ cd test_bot
$ touch app.rb
$ bundle init
```
②Gem fileに下記２行を追加

```:Gemfile
ruby "2.3.1"
gem 'slack-api'
```
③gemのインストール

```:ターミナル
$ bundle install
```
④SlackのTOKENを[こちら](https://api.slack.com/web)から作成(Generate test tokensボタンを押すだけ)。

<img width="718" alt="スクリーンショット 2016-12-22 16.36.32.png" src="https://qiita-image-store.s3.amazonaws.com/0/153140/8378ac39-298c-e280-8165-2a14a25a53c6.png">

⑤押したら別ページに自動で飛び、あなたが所属しているSlackチームのトークンを確認しましょう。<img width="695" alt="スクリーンショット_2016-12-22_16_40_31.png" src="https://qiita-image-store.s3.amazonaws.com/0/153140/575fcaf1-5f30-ff93-aa35-c7f9fc8f828a.png">

⑥botを実装したいチャンネルを[こちら](https://api.slack.com/methods/channels.list/test)から確認する(![unnamed.png](https://qiita-image-store.s3.amazonaws.com/0/153140/a211c538-02e2-ca54-cc63-0c2f9103f25b.png)

## それでは実装に入りましょう♫

①
フォールバックカルチャのサテライトアセンブリが見つからない

Visual Studio 2015の"Visual C++ for Cross-Platform Mobile Development"を試そうとしてプロジェクトを生成したらこんなエラーが。

![VS_iOS_error_2.png](https://qiita-image-store.s3.amazonaws.com/0/141731/458f6aca-9515-dba7-13c2-ce3cf32d317d.png)

>フォールバック カルチャ "en" の "Microsoft.VisualStudio.iOS.Project.resources.dll, Version=14.0.0.0, PublicKeyToken=b03f5f7f11d5a3a" というサテライト アセンブリが見つからなかったか、またはアセンブリを読み込むことができませんでした。この状況は通常セットアップの問題が原因で発生します。アプリケーションの再インストールまたは修復を検討してください。

エラーの意味がお分かりでしょうか？ 普通分からないですよね…。一般的な用語に翻訳すると、

*現在の使用言語向けのリソースが見つからなかったため英語の代替リソースを使用しようとしましたが、見つからなかったか読み込むことができませんでした。*

です。それが分かればあとは簡単。解決策は、

**ランゲージパックをインストールする**

です。

つまり、"Visual C++ for Cross-Platform Mobile Development"には日本語版リソースが用意されておらず、代替として英語版リソースを使おうとしたがインストールされていなかった、というわけです。

Microsoft Visual Studio 2015 Language Pack
https://www.microsoft.com/en-US/download/details.aspx?id=48157

VisualStudio2015を日本語環境で普通にインストールすると、英語リソースはインストールされないんですよね(確かに「ツール→オプション→国際対応の設定→言語」には「日本語」しかなかった)。当然、英語圏の方の環境では再現しないので情報が全然なく、えらい苦労しました。

同じ苦労をしているであろう人たちに届け！！
ConoHaでISOダウンロードが出来なかった件

# 起きたこと
[Rancher](http://rancher.com/rancher/)及び[RancherOS](http://rancher.com/rancher-os/)の記事を拝見して、
[ConoHa](https://www.conoha.jp/conoha/)で試して動くようなら色々出来るなと思いました。

そこで、RancherOSをConoHa APIのISOダウンロード機能を使って
ConoHaのVPSにインストールしようと思ったのですが、
[conoha-iso](https://github.com/hironobu-s/conoha-iso)を利用してもAPIを直接たたいても、エラーが返ってこないのに
いつまで経ってもダウンロードされませんでした。

# やろうとしたこと
* conoha-isoもしくはConoHa APIを利用したISOイメージダウンロード
* ダウンロードしようとしたのはRancherOSの最新版(下記リンク)
    * https://releases.rancher.com/os/v0.7.1/rancheros.iso
    * https://releases.rancher.com/os/latest/rancheros.iso

# このはさんマジ天使
技術的な話だから自力で解決するしかないかな、とりあえず誰かヒントくれないかなと思い、
上記のことをTwitterにつぶやいたところ、~~おｓ~~清楚かわいいこのはさんが
「サポートに連絡してくれると嬉しいな」(超意訳)と仰せだったのでサポートに粛々と連絡。

# 結論
ガッツリログを取得して送付したのも良かったのか、同様の問い合わせも多いのか、
超光速でサポートから返信が頂けました。
曰く、

>APIよりダウンロードされる際は、ISOイメージが保存されている
>ディレクトリがhttp接続でリスト表示できる必要がございます。

とのことでした...Oh...

# 回避策
個別に該当のURLから(この場合RancherOS周りのURLかな？)ダウンロードできるように
対応は検討してくださるとのことですが、当然のことながら目処は不明とのことです(2016/12/22時点)。

ですので、回避策としては
**自前でWebサーバー(NotHTTPS)を立てて、Indexes有効にしたディレクトリに上記ISOを配置、
その上でISOダウンロードを当該ファイル宛で実行する**
ということになります。
多分FTPでもftp://のリンクでディレクトリ取れないと駄目なんでしょうね。大変だ。

# 最後に
メジャーなOSは理研とかに上記条件を満たしたミラーがあり、
そのリンクに向けてISOダウンロード仕掛けることが多いかと思います。
ですので、嵌まる人も少ないのかなと思いつつも、
嵌まった人はド嵌まりすると思うので情報を共有しておく次第です。
EAIドリヴンによるシステム開発

ご覧になって頂いてる方、はじめまして。株式会社メディアフォースの小山と申します。EAIソリューション部に在籍しています。主にDataSpiderを活用したEAI、ETL関連のシステム提案、開発をしてます。
#EAIドリヴンって言いたいんです
このサイトをご覧になっている方はEAI界隈の方が多いかと思いますが、**データ連携開発のスコープって狭い**と感じている方は少なくないのではないでしょうか。因みに私もそう感じていた時期がありました。この領域で仕事をして10年程になりますが、開発規模（工数）は大小ありますが、規模の違いは連携本数の違いで、設計要素としてはシステム間の連携方式（プロトコルやアーキテクチャ設計）、運用設計、項目間のマッピング設計のみということが多く、システム全体の中では狭い領域のイメージを持っていました。
ですが最近は、業務要件を定義するところからEAIチームとして参画することも増え、考え方が変わってきました。
ゼロベースからEAIをシステムへ適用しようとすると、業務フローを作成して自動化やシステム間の連携ポイントを検討するところから始めます。観点は**業務改善に繋がるかどうか**となり、システム全体がスコープになります。私がEAIというキーワードを初めて調べたときに定義されていた説明文は、「異なるシステム間を有機的に繋げ、システム全体を効率的に動作させて変化するビジネスへの対応速度を上げる」というものでした。この内容に繋がるところであり、EAIを構築するチームはシステム全体を最適化をリードする存在になり、まさに**EAIドリヴン**のシステム開発が始まるのです。

#何から始めるべきか
１．EAIの概念を広める
プロジェクトチーム内で「EAIチーム」というものの存在を知ってもらうようにします。
プロジェクト内で「EAI」という単語が使用されていない場合は、設計書に「EAI」と積極的に書いていきます。打ち合わせでも「連携サーバ」とか「XXXX（システム愛称）」で呼ばれていても「EAI」とあえて呼んで、相手に単語を知ってもらいます。
聞いている相手が知らないようであれば、それとなく説明します。「EAI、つまりデータ連携基盤で…」
開発当初に定着しなくても、大丈夫です。結合試験期間に入ると、多くのチームがEAIチームへ質問に来ます。（結合試験時のインシデント解析はEAIチーム起点になることが多いのです）この期間に定着します。

２．プロジェクト内の全チームの役割を把握する
マルチベンダーのプロジェクトの場合は領域ごとに縦割りの体制になりやすく、領域間でどちらとも言えないような仕様の検討漏れが発生する事があります。その場合、結合試験でEAIチームで検知され、一旦、EAIチームの責任になったりするのですが、EAIドリヴンのシステム開発としてはこの断崖の仕様漏れを無くす為に、チーム間のスコープを明確にしておき各システムの外部仕様の整合性をチェックする必要があります。もはやシステムアーキテクトの仕事ですが、EAIドリヴンのシステム開発においてはそういうものです。

３．プロジェクト内のチーム間の情報伝達ルールを作成し、認識をあわせる
EAIチームがIF仕様を理解していくプロセスにおいて、IF仕様が複雑（項目間の紐付けが名称では理解不能な場合など）ではない場合は、個別にチャットツールやQ&A表のみで完結することが多いと思いますが、前述のように領域ごとにチームが縦割りになっている且つ、IF仕様が複雑だと連携仕様を決めるのが困難になります。

【失敗パターン】
（連携先）レイアウト仕様が出る　⇒　（EAIチーム）連携元に連絡　⇒　（連携元）項目の意味をEAIチームに問合せ　⇒　（EAIチーム）連携先に確認　⇒ ...繰り返す中でEAIチームが伝達漏れやミスが発生すると、全員にとって不幸なことになります。

【改善パターン】
（前提）EAIチームがマッピング仕様決定プロセスをパート図などで定義し、連携先と連携元 間で決定プロセスの合意をする
(連携元)レイアウト仕様書が出る　⇒　（連携元と連携先）語彙の共有をし概念レベルでマッピング　⇒　（EAI）概念レベルのマッピングについて連携先へ不明点を確認

他にも色々あるかとは思いますが、とにかくコミュニケーションにおけるマネージメント力がEAIの生産性を大きく上げる要因になると感じています。

# 最後に
今回の投稿を見たEAIエンジニアが「伸びしろですね」と感じていただければ嬉しく思います。
Vue.jsでチェックボックスやラジオボタンに初期値を入れる方法

vueを学ぶためにTODOアプリを作っていた際、チェックボックスに初期値を入れるうまい方法は無いかなーと探していた時の備忘録。

## 結論
```html
<input type="checkbox" :checked="true"/>
```
trueとなっている部分にはデータプロパティなどを入れることができる。
例えば簡素なTODOアプリであれば、以下のようになる。

```html
<tbody v-for="todo in todos">
  <tr>
    <td>{{ todo.name }}</td>
    <td><input type="checkbox" :checked="todo.done"/></td>
  </tr>
</tbody>

```
todo.doneがtrueならばチェックされた状態になる。

## 参考
http://stackoverflow.com/questions/34865348/vuejs-set-a-radio-button-checked-if-statement-is-true

## 最後に
もし間違っている部分や、ここはもっと良い書き方がある！などございましたら、どんなに些細な事でも構いません。
すぐに修正しますのでお気軽にお申し付け下さい。
phpで作るmovabletypeの検索システム

この記事は Movable Type Advent Calendar 2016 – Adventar の 22日目の記事です。

アドベントカレンダーとか初めてだったので、ものすごい緊張して、手が震えまくりながらネタを考える毎日でした。

考えたネタとしては、プラグイン、運用、営業ネタ、IoTネタとかシモネタとか色々考えましたが
やっぱりすぐにニーズがありそうで、使ってもらえるテンプレートネタにしてみました。

そして、書き終わった気が付いたのですが、
[6日目](http://www.tinybeans.net/blog/2016/12/06-131006.html)とかぶってますね。。
ごめんなさい。。。

##導入の背景
MTのサーバから複数台の公開サーバへのデプロイがありつつ、検索機能を動かしたい。

DataAPIでのアクセスでも実装は可能であったかも知れませんが、DBへの負荷、
実はPowerCMSだったりして、カスタムオブジェクトも検索対象でなので慣れないDataAPI（その頃は）よりも
phpを介した方が早いということで、このアプローチにいたりました。
こうすれば、検索の負荷はフロントに分散できるし、DB落ちても検索機能はとまりません。

##実装したもの
検索対象をphpの配列化したもの（インデックステンプレート）
検索機能（インデックステンプレート）


###検索対象をphpの配列化する
通常のエントリーとカスタムオブジェクトを配列にいれて、loopさせます。

```
<?php
$entryData = array();
<mt:entries lastn="0">
$array = array(
    "title" => "<mt:entrytitle escape="html">",
    "body" => "<mt:entrybody escape="html">",
    "link" => "<mt:entrylink>",
    "date" => "<$mt:EntryDate format="%Y年%m月%d日 %H時%M分%S秒"$>", 
    "categorylabels" =>  array(
<mt:entrycategories>"<mt:categorylabel>",</mt:entrycategories>
),
略（DataAPIの部分）
);
array_push($entryData, $array);
</mt:entries>

array_multisort(array_column($entryData, 'recdate'), SORT_DESC, $entryData);
```

###検索機能部分
完全にphpのお話なので詳細は省略！！
要はforeachで配列から必要な情報を取得します。

```<?php
include 'entry_db.php';
$title = "一覧";
$searchWord = @$_GET["search"];
if ($searchWord) {
$title = $searchWord . "の検索結果一覧";
$searchData = array();
foreach ($entryData as $entry) {
(略)
}
?>
```

最後に<?php echo $変数名?>をテンプレートいれていけば、必要な情報が取得できます！！

完成！！

ああ、かぶってる。。。
Canvasにおける画面サイズの違いの対応のための設定


![スクリーンショット 2016-12-22 15.55.44.png](https://qiita-image-store.s3.amazonaws.com/0/113504/40fc16b7-b7f5-1c07-995d-cd77981676c1.png "スクリーンショット 2016-12-22 15.55.44.png")

# 手順
1. UIScaleModeをScaleWithScreenSizeに変更
2. ReferenceResolutionを好みの比率に対応
3. Matchを横長ならHeight, 縦長ならWidthにあわせる
【簡単】Microsoft Cognitive Services Speech API + LUIS のJavaScript版導入手順（若干ハマりどころあったので、その解説を中心に）

##概要
Microsoft Cognitive Services Speech APIの試験用モジュール導入手順です。いくつかハマりどころが有りましたので記事にしました。

###対象アプリケーション
Microsoft Cognitive Services Speech APIで入力し、LUIS解析結果をjsonで表示できるというJavaScriptのみで作られたアプリがMicrosoftさんのGitHubに上がっています。ダウンロードしてVS2015でビルドするだけ。なはずだったのですが。
GitHubはこちら https://github.com/Microsoft/Cognitive-Speech-STT-JavaScript
日本語訳？  http://bit.ly/2h3I04g

###ハマりどころと内容のサマリ
* ビルドでエラー。
* マイクの使い方がよくわからない。
* LUISの結果が反映されない
* 日本語対応

##手順
* 基本はVisual Studio 2015でビルドするだけ。手順はGitHubにも記載されているとおりです。
* Visual Studio 2015 をインストール（説明省略します）
* GitHubのdownloadボタンからdownloadして解凍します。(GitHubの各種使い方は省略します)
* ビルドします。ビルドでエラーが出た場合【注１】へ
* 実行します。

###手順：Speech API
* Speech APIのテストにはAPIキーが必要です。（SpeechAPIのキーだけ入力すればSpeechAPIのみを使えます。）
![image](https://qiita-image-store.s3.amazonaws.com/0/123399/6b20224e-5db5-d8b1-f116-b10b6c67e0bb.png)
取得方法は http://magicbullet.hatenablog.jp/entry/CognitiveService_BingSpeechAPI が参考になりました。
（既存サブスクリプションは手順が簡単になります）

* マイクの使い方がわからない【注２】へ
* 日本語対応方法：VS2015で「en-us」を検索し、「ja-jp」にすればOK！！

![image](https://qiita-image-store.s3.amazonaws.com/0/123399/e82e8d83-2151-61ff-6683-19648c2324d9.png)

###手順：LUIS（詳細説明は別途HELP https://www.luis.ai/help 日本語訳 http://bit.ly/2hc4KCG を参考にしてください）
* LUISのテストにはAPIキーが必要です。LUISへのサインインはヘルプなど参考にしていただければよいかと思います。

 ![image](https://qiita-image-store.s3.amazonaws.com/0/123399/42b9c937-0c05-e6c6-b789-14784ff1beab.png)
LUIS API ID はアプリケーション登録画面より取得

![image](https://qiita-image-store.s3.amazonaws.com/0/123399/517dccb7-12bc-400b-542e-4e934d8076d9.png)
LUIS SbscriptionIdはAzure Portalから取得

* LUISがうまくいかない場合【注３】【注４】へ
* LUIS最短テスト登録【おまけ】へ

![image](https://qiita-image-store.s3.amazonaws.com/0/123399/e12a7405-0732-2f25-e5bb-bdb2712eec87.png)

##【注１】ビルドでエラーが出た場合
* Web Audio APIを使っています。
* Web Audio API - サポートブラウザ http://azu.github.io/slide/webaudioapi/web-audio.html
* VSの実行ブラウザーをchromeに変えればOKです。

##【注２】マイクの使い方がわからない
* マイクでなんらかの入力がない場合、結果はなにも出ません。入力がないです。というメッセージもありません。
* マイクはチェックボックスをつけて、startを押してから５秒間録音する仕様です。

##【注３】LUISの結果が何も帰ってこない（speechの結果しか返らない）
* キー違いなど、エラーが出ても、エラーは返却されない仕様のようです。chrome Developerでエラーを確認できます。
* LUISのバージョンが違うことが原因だと思うのですが、引数を渡している部分のソース修正が必要でした。（2016/12/21現在） 
* Speech1.0.0.js: 817行目を修正するとうまくいきました。
https://github.com/Microsoft/Cognitive-Speech-STT-JavaScript/issues/15

##【注４】LUISの結果がnoneになってしまう。登録結果が反映されない。
* LUIS結果を反映するための手順は、Train → publish → update publish applicationです。

##【おまけ】
HELPが冗長なので手っ取り早く確認したい人向けに書きました。

* intent に日付確認、例に今日は何日？をsave。
![image](https://qiita-image-store.s3.amazonaws.com/0/123399/fe12b7a0-c314-56a5-ff16-a47539c71cb8.png)

* New uttearanceに遷移したらそのままsubmit
![image](https://qiita-image-store.s3.amazonaws.com/0/123399/7b07a9cf-706d-64b3-8bd4-56753602a030.png)

* 左下のtrainを押す
* 左上のほうのpublishを押す。
* ポップアップが表示されるのでupdate publish applicationを押す!!【押し忘れ注意】

![image](https://qiita-image-store.s3.amazonaws.com/0/123399/09f36d1b-2699-44e9-7e1c-5c115094f276.png)

* queryで今日は何日？を入れてenter で、動作確認できます。

![image](https://qiita-image-store.s3.amazonaws.com/0/123399/0b223ff0-12ed-484a-ea03-cea866f62de9.png)

* 作成したJSアプリでも動くはず。です。^^

以上です。