OmniAICreator/Qiita-1.07M huggingface dataset:
C++用マイクロウェブフレームワークcrow入門(Hello,Worldまで)

C/C++用のウェブフレームワークcrowを使ってみます。  
[crow](https://github.com/ipkn/crow)

###プロジェクトディレクトリ作成
```
$ mkdir crow_example
$ cd crow_example
```

###crowインストール
####[chppl](https://github.com/nocotan/chppl-tool)が使える人
http://qiita.com/noco/items/4e4ca6c6abac99d19619
```
$ chppl download crow
```
####使えない人
crowのGitHubからcrow_all.hをダウンロードしてくる

###test_app.cpp作成

```test_app.cpp
#include "crow_all.h"

int main() {
  crow::SimpleApp app;

  CROW_ROUTE(app, "/")([](){
      return "Hello, World!";
  });

  app.port(8080).multithreaded().run();
}
```

#CMakeLists.txt作成
```CMakeLists.txt
cmake_minimum_required(VERSION 2.8)
project (crow_examples)

find_package(Threads)

if (NOT CMAKE_BUILD_TYPE)
    message(STATUS "No build type selected, default to Release")
    set(CMAKE_BUILD_TYPE "Release")
endif()


if (MSVC)
set(Boost_USE_STATIC_LIBS "On")
find_package( Boost 1.52 COMPONENTS date_time filesystem system thread regex REQUIRED )
else()
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -std=c++1y")
find_package( Boost 1.52 COMPONENTS date_time filesystem system thread REQUIRED )
endif()

include_directories( ${Boost_INCLUDE_DIR} )

set(PROJECT_INCLUDE_DIR
${PROJECT_SOURCE_DIR}/include
)

include_directories("${PROJECT_INCLUDE_DIR}")
include_directories("${PROJECT_SOURCE_DIR}")

add_executable(test_app test_app.cpp)
target_link_libraries(test_app ${Boost_LIBRARIES})
target_link_libraries(test_app ${CMAKE_THREAD_LIBS_INIT})
```

###ビルド
```
$ cmake .
$ make
```

###起動
```
$ ./test_app
```
http://localhost:8080
にアクセスして"Hello, World!"が表示されていることを確認

以上で終了です。お疲れ様でした。
メモ：Rails で置きたいところに node_modeule を置きたい

# 前提
プロジェクト直下に node_modules とかいう子がいるのが嫌
えいって vendor/assets 以下とかに移したら scss プリコンパイルしようとしたときにこんな↓エラーがでる。

```
BrowserifyRails::BrowserifyError
```

# 対処法

application.rb に一行追加

```
config.assets.paths << Rails.root.join('vendor', 'assets', 'node_modules')
```

こんなのに1時間近くはまりました。死にます。
あれ？サービス死んだ？ってなった時に確認すべきページのまとめ

![ikishitenai.png](https://qiita-image-store.s3.amazonaws.com/0/2624/41f69aea-0c47-49e1-5780-c9ae9416b10e.png)
先生助けてっ！サービスちゃんが息をしてないのっっ！!

※アルファベット順

## Airbrake
+ [Airbrake Status](https://status.airbrake.io/)

## AWS
+ [AWS Service Health Dashboard](http://status.aws.amazon.com/)

## Bitbucket
+ [Atlassian Bitbucket Status](http://status.bitbucket.org/) | [Twitter (@BitbucketStatus)](https://twitter.com/bitbucketstatus)

## Bitrise CI
+ [Bitrise CI Status](https://bitrise.statuspage.io/)

## CircleCI
+ [CircleCI Status](http://status.circleci.com/) | [Twitter (@CircleCIstatus)](https://twitter.com/circlecistatus)

## CocoaPods Status]
+ [CocoaPods Status](https://status.cocoapods.org/)

## Crashlytics
+ [Fabric Crashlytics Status](http://status.fabric.io/)

## DigitalOcean
+ [DigitalOcean Status](https://status.digitalocean.com/) | [Twitter (@DOStatus)](https://twitter.com/dostatus)

## esa.io
+ [esa.io Status](http://status.esa.io/)

## Facebook
+ [Facebook Platform Status](https://developers.facebook.com/status/)

## Firebase
+ [Firebase Status Dashboard](https://status.firebase.google.com/)
+ [Twitter (@FirebaseStatus)](https://twitter.com/firebasestatus)

## GitHub
+ [GitHub System Status](https://status.github.com/)
+ [Twitter (@githubstatus)](https://twitter.com/githubstatus?lang=ja)

## Google App
+ [Google Apps Status Dashboard](http://www.google.com/appsstatus#hl=en&v=status)

## Heroku
+ [Heroku Status](https://status.heroku.com/)
+ [Twitter (@herokustatus)](https://twitter.com/herokustatus)

## HipChat
+ [HipChat Status](https://status.hipchat.com/)

## Mackerel
+ [Mackerel Status](http://status.mackerel.io/)

## New Relic
+ [New Relic Status](https://status.newrelic.com/)

## npm
+ [npm, Inc. Status](http://status.npmjs.org/)

## RubyGems
+ [RubyGems.org Status](https://status.rubygems.org/)
+ [Twitter (@rubygems_status)](https://twitter.com/rubygems_status)

## SendGrid
+ [SendGrid Status](http://status.sendgrid.com/)
+ [Twitter (@sendgrid_ops)](https://twitter.com/sendgrid_ops)

## Slack
+ [Slack System Status](https://status.slack.com/)
+ [Twitter (@SlackStatus)](https://twitter.com/slackstatus)

## Travis CI
+ [Travis CI Status](https://www.traviscistatus.com/)
+ [Twitter (@traviscistatus)](https://twitter.com/traviscistatus)

## Twitter API
+ [Twitter API Status](https://dev.twitter.com/overview/status)

## Urban Airship
+ [Urban Airship Status](http://status.urbanairship.com/)
Photoshopの関連付けがうまくいかないのを直す(Windows)

Photoshopがメジャーアップデートするたびに関連付けがおかしくなるのでメモ。イラレは大丈夫なのに…

# 現象
jpgなどの画像ファイルを右クリック→「プログラムから開く」
→**Photoshopが無い！**

→「既定のプログラムの選択」→「参照」からPhotoshop.exeを選択
→**Photoshopが出ない！**

# 解決法
1. レジストリエディタを開く
2. この階層まで行く「HKEY_CLASSES_ROOT\Applications\Photoshop.exe\shell\open\command」
3. 右側の「(既定)」をダブルクリック
4. 「値のデータ」のPhotoshop.exeのディレクトリ名が違っているので正しい値を入力
5. 再度、冒頭のプログラムの選択に挑戦
6. **Photoshop出た！**

# 終わり
今回はPhotoshopCC 2015から、2015.5になったので発生しました。レジストリの値に「.5」を足して解決…。
使用Carthage 下载第三方库




On July 5, 2016

***

[使用Carthage 下载第三方库](https://github.com/willingseal/willingseal.github.io/blob/master/Note-Blog/CLI/20160705_Carthage.md)

***



####主要三个步骤：

1: 工程根目录下新建一个文件Cartfile

2: carthage update

3: 把获取到的`.framework` (UseCarthage/Carthage/Build/iOS/Alamofire.framework)文件拖入项目中

-------

new UseCarthage project

cd UseCarthage path

```
➜  UseCarthage carthage version
0.17.1
➜  UseCarthage touch Cartfile        在UseCarthage的根目录下新建一个文件Cartfile
➜  UseCarthage oepn -a Xcode Cartfile    用Xcode打开Cartfile并且编辑
➜  UseCarthage carthage update     拉取源代码并编译为 Framework
*** Fetching Alamofire
*** Checking out Alamofire at "3.4.1"
*** xcodebuild output can be found in /var/folders/k6/rb8qdg1s1_9_kqxvqr5s5mb80000gn/T/carthage-xcodebuild.KcHFZm.log
*** Building scheme "Alamofire OSX" in Alamofire.xcworkspace
*** Building scheme "Alamofire watchOS" in Alamofire.xcworkspace
*** Building scheme "Alamofire tvOS" in Alamofire.xcworkspace
*** Building scheme "Alamofire iOS" in Alamofire.xcworkspace
➜  UseCarthage
```

<br>


![ 2016-07-05 下午4.56.54.png](https://qiita-image-store.s3.amazonaws.com/0/131609/09e29179-0643-dccc-3d10-54dd481fea03.png)


```
Cartfile
你需要哪些依赖库，相当于Podfile
Cartfile.resolved
跟踪项目当前所用的依赖版本号
Carthage
存放依赖库的源文件和编译后的文件
     - Build
          - iOS - Alamofire.framework
          - Mac - Alamofire.framework
          - tvOS - Alamofire.framework
          - watchOS - Alamofire.framework

     - Checkouts
          - Alamofire


- ... xxx.xcodeproj ...
```

<br>

把获取到的`.framework` (UseCarthage/Carthage/Build/iOS/Alamofire.framework)文件拖入项目中


![2016-07-05 下午5.37.28.png](https://qiita-image-store.s3.amazonaws.com/0/131609/502a9ef0-2cea-e491-feea-cc7daba82b60.png)


![2016-07-05 下午5.38.40.png](https://qiita-image-store.s3.amazonaws.com/0/131609/09b6e122-b99b-da2a-0e9a-27c1b7e158e3.png)


<br>

在编译的时候你可能会遇到直接crash 报错：

```
dyld: Library not loaded: @rpath/Alamofire.framework/Alamofire
  Referenced from: /Users/willingseal/Library/Developer/CoreSimulator/Devices/267F110E-C0C2-4507-9DA0-BE119D4871D3/data/Containers/Bundle/Application/973D7627-758A-453B-ABDE-89556E7186DA/UseCarthage.app/UseCarthage
  Reason: image not found
(lldb)
```

[see this issue](https://github.com/Alamofire/Alamofire/issues/101)
C#スクリプトをDLL化してUnityで使う

#はじめに
C#をDLLにしてUnityで使おうとしたらいろいろハマったので記事にまとめてみました。

この記事のOSは Windows10, Unityのバージョンは Unity5.3.5f1 です.
Visual Studio 2015 Communityを使います。

#DLLを作ってUnityで使うまでの流れ
新規プロジェクト作成 -> C#クラス作成 -> DLL作成 -> Unityに入れる -> 使う

#1. C#プロジェクトを作成
DLLを作る準備として新規プロジェクトを作成します。

![New Project 2016-07-05 17.56.43.png](https://qiita-image-store.s3.amazonaws.com/0/44288/7dfcece2-6d7e-4a7e-4e4e-2b35adeaa28c.png)

Visual C# -> Class Library を選択してプロジェクト名を DLLTest にしてOKをクリック。

#2.  using namespace無しのDLLの作成
プロジェクトを作成するとClass1.csが作られているはずなので、これをを以下のように書き換えてDLL化することを考えます。
int値を返すstaticメソッドを1つだけ持つクラスです。

```Class1.cs
namespace DLLTest
{
    public class Class1
    {
        public static int Hoge()
        {
            return 114514;
        }
    }
}
```

##DLLの作成
まず、以下のbatchファイルを作成します。 名前はbuild.batとします。
smcs.bat、UnityEngine.dll、UnityEditor.dllはUnityのインストール場所にあるはずです.

```build.bat
smcs.batのファイルパス -r:"UnityEngine.dllのファイルパス" -r:"UnityEditor.dllのファイルパス" -target:library -out:任意の名前.dll *.cs
```
![image](https://qiita-image-store.s3.amazonaws.com/0/44288/b437dccc-e591-ad20-1286-81e65c147e03.png)


build.batをClass1.csやbinフォルダのあるディレクトリに配置します.
![image](https://qiita-image-store.s3.amazonaws.com/0/44288/08055ea1-acd1-1a6a-60b1-28b743f932cd.png)

build.batをダブルクリックするとdllが作られるので、これをUnityProjectの Assets/Plugins/ 以下に入れます。
![DLLTest 2016-07-05 18.33.26.png](https://qiita-image-store.s3.amazonaws.com/0/44288/b81db384-66f3-fab2-086d-c8cd2af4ef56.png)

<br>

#DLLを使う
```Test.cs
using UnityEngine;
using System.Collections;
using DLLTest;

public class Test : MonoBehaviour
{
    void Start()
    {
        Debug.Log(Class1.Hoge());
    }
}
```

実行してみるとConsoleに正しい値が表示されることが確認できます。
![image](https://qiita-image-store.s3.amazonaws.com/0/44288/9dd44862-55b0-86d1-efc6-6db34a3c2210.png)

<br>

#3.  using namespace有りのDLLの作成
using namespaceするコードをDLL化する場合、すこし手間がかかります。
例えば、何も考えずにusing UnityEngine;と書くと以下のようなエラーが出てしまいます。
![image](https://qiita-image-store.s3.amazonaws.com/0/44288/06d57a11-9995-90bd-6ece-658e81aae3f4.png)

これを回避するためにはリファレンスを追加する必要があります。

## リファレンスの追加
まず、ソリューションエクスプローラーのReferencesを右クリックして Add References を選択します。
![image](https://qiita-image-store.s3.amazonaws.com/0/44288/85770b72-675e-2464-7f0e-1d1419612116.png)

Browseを選んで　Browseボタンをクリック。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/44288/af4028e0-cf6f-6c79-061a-00614d5477f4.png)


UnityEngine.dllを選んでAddをクリック。
![image](https://qiita-image-store.s3.amazonaws.com/0/44288/9e04cfbb-74b6-a046-3b0e-1b6b12a9a0eb.png)

UnityEngine.dllが一覧に追加されるのでチェックを入れてそのままOK。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/44288/b883cf16-dabf-2ded-5032-400d924650d0.png)

using UnityEngine;のところで出ていたエラーが消えます(完)
![image](https://qiita-image-store.s3.amazonaws.com/0/44288/98c077ef-09db-c6de-00f3-cc60c2030f59.png)


#参考サイト
マネージド プラグイン
http://docs.unity3d.com/ja/current/Manual/UsingDLL.html
VirtualBox5にCentOS7を１からインストール

## 概要
VirtualBox5にCentOS7を１からインストールする手順を記載しています
各種設定値は適宜置き換えてください

## 環境
ホストOS:Windows7 Pro 64bit
メモリ:16GB
プロセッサ：i7-3770

## 手順
〇バーチャルボックスの環境を構築
1.VirtualBox5.0.20をインストール
2.CentOS7.2(CentOS-7-x86_64-DVD-1511.iso)をダウンロード
3.VirtualBoxの「新規」から仮想マシンを作成
4.名前「CentOS7.2」タイプ「Linux」バージョン「Red Hat(64-bit)」
5.メモリ「2048MB」
6.仮想ハードディスクを作成する
7.vmdkを選択
8.可変サイズを選択
9.10GB以上にする(centOS7.2は8GB以上の空き領域を必要とする為)

〇ネットワークの設定
1.ファイル→環境設定→ネットワーク→ホストオンリーネットワーク
2.+を押下してホストオンリーネットワークの詳細を開く
3.アダプターのIPv4アドレス「192.168.56.1」とIPv4ネットマスク「255.255.255.0」を入力
4.サーバー有効化「チェックON」DHCPサーバーのサーバーアドレス「192.168.56.100」サーバーマスク「255.255.255.0」アドレス下限「192.168.56.101」アドレス上限「192.168.56.255」
5.作成した仮想マシンを選択して設定ボタンを押下
6.ネットワークのアダプター1の設定画面を開く
7.高度タブを開き、ポートフォワーディングを押下
名前,プロトコル,ホストポート,ゲストポート
HTTP,TCP,80,80
HTTPS,TCP,443,443
8.アダプター2の設定画面を開く
9.ネットワークアダプターを有効化にチェック
10.名前をVirtual Box Host-Only Ethernet Adapterに設定
11.割り当てをホストオンリーアダプターに設定

〇CentOS7のインストール
1.作成した仮想マシンを選択して設定ボタンを押下
2.「ストレージ」→「CDマーク＋」→ディスク選択→CentOS-7-x86_64-DVD-1511.iso
3.「空」があれば割り当てを除去（消去）しておく
4.OKボタンを選択して戻る
5.作成した仮想マシンを選択して起動ボタンを押下
※Right Control(初期値)押下でvirtualbox環境から抜け出せます
6.Install CentOS7を選択
7.日本語を選択して続行ボタンを押下
8.ソフトウェアの選択で「開発およびクリエイティブワークステーション」を選択して完了
9.インストール先を選択して、そのまま完了
10.ネットワークとホスト名を選択して、「enp0s3」「enp0s8」をON
11.インストールの開始
12.インストール中にrootパスワードを設定
13.インストール中にuserを追加
14.再起動を押下

〇CentOS7の初期設定
1.1を入力
2.2を入力
3.qを入力
4.yesを入力
5.作成したユーザのパスワードを入力してログイン
6.日本語（かな漢字）を選択して「次へ」
7.オンラインアカウント設定はスキップ
8.右上の電源マーク→設定マーク→電源→ブランクスクリーンをOFF

〇Guest Additionsのインストールと他アップデート
1.メニューの「デバイス」から「Guest Additions CDイメージの挿入」を選択
2.ひとまず実行はキャンセル（ここで実行しても失敗します）
3.kernelと他必要なパッケージをインストール
 $ sudo yum install -y kernel-devel kernel-headers gcc gcc-c++
4.他全てアップデート
 $ sudo yum -y update
5.再起動
 $ reboot
6.起動時に「～3.10.0-327.13.1.el7.x86_64」を選択できる様になっているので、こちらを選択する
7.KERN_DIRに設定（パスは適宜変えてください）
 $ export KERN_DIR=/usr/src/kernels/3.10.0-327.13.1.el7.x86_64
8.Guest Additions CDを実行

〇仮想マシンの設定
1.仮想マシンから設定を選択
2.一般の高度タブを選択
3.クリップボードの共有とドラッグ&ドロップを双方向に選択
4.OKを選択

〇この構成では何故かシームレスモードが不安定
　修正方法不明。シームレスモードは使えない？

〇ホストオンリーネットワークのネットワーク接続が自動で起動しない設定になっている模様
1.viコマンドを使用してONBOOT=yesに変更する
 $ sudo vi /etc/sysconfig/network-scripts/ifcfg-enp0s8

2.ネットワークサービス再起動
 $ systemctl restart network

ひとまずここまで
ゲストOSからブラウザ上でネット閲覧できたり、ホストOSからゲストOSへ接続できると思います。
不備がありましたらすみませんm(_ _)m
Solidityの開発環境（IDE）

# 公式の情報
- Solidity開発に使えるIDEは [Solidity — Solidity 0.2.0 documentation](http://solidity.readthedocs.io/en/latest/index.html)で紹介されている

# 現状（2016年6月現在）
- コードが書けてコンパイル、デプロイ、実行までできるのは[browser-solidity](https://github.com/ethereum/browser-solidity)だけっぽい
- 但し、browser-solidityはコードが管理できないし、コード量が増えてくるとにカクカクしてくる

# 理想
1. コードエディタとして普通に使える
    - プロジェクト（フォルダ）を開ける
    - シンタックスハイライトができる
- Solidityのコンパイルができる
- コントラクトをブロックチェーンにデプロイできる
- コントラクトを実行できる
- デバッグできる

# 打開策
- コーディング＆コンパイルまでは[Visual Studio Code](http://juan.blanco.ws/solidity-contracts-in-visual-studio-code/)を使う
- デプロイ＆実行はbrowser-solidityか[Ethereum Wallet](https://github.com/ethereum/mist/releases)を使う
- これで理想の1～4までは満たせる

# おまけ（その他のIDEのインプレッション）
- Visual Studio
    - デプロイ先がAzureのBlocサービス。日本からはまだ使えない
- Mix IDE
    - 落ちまくる
- Atom
    -  コンパイルしようとするとエラー
-  Ethereum Studio
    -  ブラウザ上のエディタ
    -  ソースコードをクラウド上に全部預ける形。デプロイ先も指定のクラウド

# おわりに
もっといい方法があったらコメントください!
Macのストレージ Other(その他)による圧迫を減らす

#環境
Mac OSX El Capitan 10.11.5
システム言語 US

#ストレージの確認
「About This Mac」 -> 「Strage」 でHDの中身を確認
About
<img width="577" alt="Screenshot 2016-07-05 18.52.29.png" src="https://qiita-image-store.s3.amazonaws.com/0/42913/c588ca5a-679c-f382-779c-8fcf554257ba.png">
ファッ！？
ストレージがOtherで埋め尽くされててわけわからん...

#Terminalからduコマンドで容量の多いディレクトリを検索
`$sudo du -g -x -d 5 / | awk '$1 >= 5{print}'`
今回は5GB以上のディレクトリを出力させる

<img width="452" alt="Screenshot 2016-07-05 18.50.48.png" src="https://qiita-image-store.s3.amazonaws.com/0/42913/9511f8bf-e835-9cd9-4b34-16f9a5129837.png">

おやおや、/coreが62GBも食ってて怪しい..

#/core を削除
coreダンプファイルはMacの異常時とかにログとして書き出してるファイル。
消しても問題ないらしいのでディレクトリごと消しちゃいましょう。
`$sudo rm -rf /core`

#ストレージを再確認
<img width="582" alt="Screenshot 2016-07-05 19.06.11.png" src="https://qiita-image-store.s3.amazonaws.com/0/42913/76f10ea0-2425-b4ea-23fa-27a994667065.png">

まだ結構その他で埋まってますがｗ
一応、/coreによる圧迫が解消されました。

あとコアダンプファイルを自動生成させないようにする設定もあるらしいです。
(まだ自分はやってない)
mod_wsgiはpipで入れようねって話

# 私は正しくpythonを書いていた（つもりだった）
しかしある日突然の
`ImportError: cannot import name parse`
え？え？`urllib`って`pip`でいれるやつじゃないでしょ？　 ...うん、違った。

もしかしてと思い
`sys.version_info`
を出力
**`sys.version_info(major=2, minor=7, micro=11, releaselevel='final', serial=0)`**
こ、これだー！

# 原因は不明？
正直意味がわからないので色々調べるが、やっぱり原因がわからない。
`python -V`
やっても
`Python 3.5.1`
`sites-package`もしっかり動いてる。

しかしここらへんであることに気がつく。

# wsgiをビルドした時に使ったのがpython2だった
当たり前の話である。そりゃそうだ。python2でビルドしているんだからpython2で動くわ。

# しかしpython3ではwsgiのビルドができなかったんだ
ここにエラーを全文乗っけてると結構な分量になるので割愛するが、まあ、とにかくビルドできなかったんだ。
apxsが関係するエラーだったように思う。（そもそも以前やった時3でうまくいかず2でビルドしているので、今回はあまり深く調べていない。普通にできるぞ！　って情報があったらぜひ教えて下さい）

# っていうかそもそも自分でビルドする必要があんまりなかったんだ
人は忘れる生き物である、とは誰の言だったか。
ことさら私は忘れやすい生き物なので今後は気を使っていきたい。
そう、我々には `pip` があるということを。

```
pip install mod_wsgi
LoadModule wsgi_module /Users/name/.pyenv/versions/3.5.1/lib/python3.5/site-packages/mod_wsgi/server/mod_wsgi-py35.cpython-35m-darwin.so
```

すごく端的に書くと、これで動いた。
なんだかすごくはしょりすぎている気もするが、これで動いたので、こう書くしかない。
**動いた。**

ちなみにbrewも試してみたんだけど、動かなかった。

```
brew install mod_wsgi3
LoadModule wsgi_module /usr/local/Cellar/mod_wsgi3/3.5/libexec/mod_wsgi.so
```

これは以前brew doctorかなんかを使うときにpython3だと文句を言われたのでbrewではpython2をベースに働くように設定をしたような気がする（したのは確かなんだがどういう理由でどうやってそれを実現したのかはワスレテシマッタ）ので、それが原因だと思う。
恐らくそれさえ解決していればbrewで入れたmod_wsgiも正常に動くと思われる。

以上、Qiitaのエディタが予想外に使いやすくてついブログのような書き口になってしまったが、この記事が誰かのお役に立ってくれることを望むばかりである。
MediaInfoをMacコマンドラインで利用する

お世話になっているMediaInfo。GUIだけだと思ってたらCLI版もありました。

# インストール
以下からCLI版をダウンロードして、インストールします
https://mediaarea.net/en/MediaInfo/Download/Mac_OS

# 動作確認
```
$ mediainfo --version
MediaInfo Command line,
MediaInfoLib - v0.7.87
```

# 使ってみる
```
$ mediainfo xxxx.mp4    # 標準出力
$ mediainfo xxxx.mp4 -f # 詳細出力
$ mediainfo xxxx.mp4 -f --Output=XML # XML詳細出力
```

あとはヘルプ見てください

```
$ mediainfo --help
```
Electron (Node.js)で別プロセスとinteractiveなやりとりをする

Electronを使っていて、Rendere, Mainとはさらに別のプロセスとデータのやり取りをすることがあったのでそのメモを兼ねて。
シナリオとしては、GUIからの入力をMain -> ChildとpipeしてそれをGUIに戻すという感じ。
シーケンス図はこんな感じ。

![sec.png](https://qiita-image-store.s3.amazonaws.com/0/3209/15698fd4-f48d-8735-581b-83784b872272.png)

要は、Mainからforkしたchildのstdinに何かを書き込んでstdouをpipeしてもらえばいい。

## child_process#spawn

Node.jsには子processをforkする手段が2つある。
ひとつが`child_process.fork`、もうひとつが`child_process.spawn`。
この2つの違いは正直良くわからないのだが、forkはnode.jsスクリプトを子プロセスとしてspawnし、spawnはシェルコマンドをspawnするもののようだ。（詳しい話は公式ドキュメントを読んだほうがいいです）とりあえず今回はnode.js以外のコマンドを実行するのでspawnを使うことにした。

## Sample

```js:child-server-js

import {
    spawn
} from "child_process";
import EventEmitter from "events";
import {
    dirname,
    basename
} from "path";

class ChildServer {

    constructor() {
        this.event = new EventEmitter;
    }
    
    run(cmdPath, args = []) {
        const cmd = basename(cmdPath);
        const cwd = dirname(cmdPath);
        this.process = spawn(`./${cmd}`, args, {
            cwd: cwd
        });
        this.process.on("data", (rawData) => {
          const data = new Buffer(rawData).toString("utf-8");
          this.event.emit("child:response", data);
        })
    }
    
    write(cmd) {
        return new Promise((resolve) => {
            this.process.stdin.write(cmd + "\n");
            this.event.on("child:response", resolve);
        });
    }

    close() {
      this.process.kill();
    }
}
```

```js:main.js
const child = new ChildServer();
child.run();

electron.ipcMain.on("ipc:command", (ev, arg) => {
    child.write(arg).then((res) => {
      ev.sender.send("ipc:response", res);
    });
});
```

```js:renderer.js
$("#button").on("click", () => {
  const cmd = $("#input").value();
  electron.ipcRenderer.send("ipc:command", cmd);
});

electron.ipcRenderer.on("ipc:response", (res) => {
  console.log(res);
});

```

## 解説

spawnした子プロセスへの書き込みは、`process.stdin.write(cmd+"\n")`で行うのがミソ。（ちなみに`writeln`ではうまく行かなかった謎）
子プロセスからのoutputは、`process.on("data")`でしかキャプチャできないので、内部でEventEmitterを使ってPromiseしている。ただ、この実装だとcommandとresponseが常に排他制御されている場合にしか使えない。子プロセスがマルチスレッドで入力を受け付けて非同期でstdoutに結果を返すようなものだと、キューイングする仕組みが必要かもしれない。
Macでアプリケーションソフトの上部が枠外（画面の外）に出て動かせなくなった時の対処法 【第２弾 AppleScriptを使う】



[前回](http://qiita.com/sararilfy/items/1a2eea40263a8215db16)は、
Macのシステム環境設定でディスプレイサイズ無理やり変えて
ソフトのてっぺんを表示させていましたが、

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">AppleScriptじゃ、AppleScriptで移動させるのじゃ<br>/<br>Macでアプリケーションソフトの上部が枠外（画面の外）に出て動かせなくなった時の対処法 by <a href="https://twitter.com/sararilfy">@sararilfy</a> on <a href="https://twitter.com/Qiita">@Qiita</a> <a href="https://t.co/zTNhAZG2Fw">https://t.co/zTNhAZG2Fw</a></p>&mdash; hori,masaki (@masakihori) <a href="https://twitter.com/masakihori/status/722032264297623552">2016年4月18日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

上記アドバイスをいただいたので、どうにかAppleScriptでできないものかと探しました。

結果。AppleScriptをちゃんと調べる時間がつくれていない。。。
ただ、なんとか成功。（ほぼコピペですが...）

#手順

※ OSは、OS X Yosemite
※ 動かしたいものは Adobe Photoshop CC 2015.5

##1. スクリプトエディタを開く
![スクリーンショット 2016-07-05 18.29.06.png](https://qiita-image-store.s3.amazonaws.com/0/40940/84298fbe-47a9-06be-1435-10b4d98043e2.png "スクリーンショット 2016-07-05 18.29.06.png")

こんなの
![スクリーンショット 2016-07-05 18.30.18.png](https://qiita-image-store.s3.amazonaws.com/0/40940/27991042-6093-aac1-7b1b-61368211bc21.png "スクリーンショット 2016-07-05 18.30.18.png")

##2. 以下を記述。

  ```スクリプトエディタ
tell application "System Events"
	set position of first window of application process "Adobe Photoshop CC 2015.5" to {0, 44}
	set size of first window of application process "Adobe Photoshop CC 2015.5" to {1200, 600}
end tell
  ```
  
Photoshopの名称はアプリケーションフォルダのFinderからとりました。
![スクリーンショット 2016-07-05 18.34.59.png](https://qiita-image-store.s3.amazonaws.com/0/40940/8e9aaf6c-62cf-7a03-83de-ddfd3e6dfb1b.png "スクリーンショット 2016-07-05 18.34.59.png")


  ```スクリプトエディタ
set position of first window of application process "Adobe Photoshop CC 2015.5" to {0, 44}
  ```

上記は位置を[0, 44]の座標に移動


  ```スクリプトエディタ
set size of first window of application process "Adobe Photoshop CC 2015.5" to {1920, 1080}
  ```

上記はウィンドウサイズを[1920 * 1080]に変更

##3. 再生ボタンを押せば...
![スクリーンショット 2016-07-05 18.44.47.png](https://qiita-image-store.s3.amazonaws.com/0/40940/0372bbf1-c47e-77fe-fc3f-6d537aa53d14.png "スクリーンショット 2016-07-05 18.44.47.png")



##4. ブロックされた。設定する。

システム環境設定の、「セキュリティとプライバシー」を開く

![スクリーンショット 2016-07-05 18.37.52.png](https://qiita-image-store.s3.amazonaws.com/0/40940/96300a7c-ccc5-71de-c798-faf0ee59709a.png "スクリーンショット 2016-07-05 18.37.52.png")

スクリプトエディタ.appにチェックを入れる

![スクリーンショット 2016-07-05 18.37.35.png](https://qiita-image-store.s3.amazonaws.com/0/40940/58446359-2614-44f3-e51a-c8b275db8a8b.png "スクリーンショット 2016-07-05 18.37.35.png")

##5. 設定できたら、再生ボタンを押す

ピッタリ移動してくれました。
![スクリーンショット 2016-07-05 18.51.30.png](https://qiita-image-store.s3.amazonaws.com/0/40940/c0cdbec5-539f-4146-9087-d5cf67f0640a.png "スクリーンショット 2016-07-05 18.51.30.png")



ちゃんと覚えたい＞＜
Spring boot + GradleでDoma2を使う

## この記事でわかること

* Spring bootでGradleを利用してDomaを使うための方法

## この記事に書いていないこと

* Domaの機能に対する説明

## 前提条件

この記事で使用しているもろもろのバージョン。

* JDK 8
* Spring boot 1.3.5.RELEASE
* Gradle 2.13

## 依存関係の追加

build.gradleのdependenciesに必要な依存関係を追加します。

```groovy
compile('org.seasar.doma.boot:doma-spring-boot-starter:1.0.2')
compile('mysql:mysql-connector-java:5.1.38')
```

コネクターがMySQLになっていますが、使用するDBに併せて適宜変更してください。

また、Domaが扱うSQLファイルをコンパイルより前に出力先ディレクトリにコピーする必要があるため、build.gradleに以下の記述を追加します。 

> [参考][SpringBoot+Doma2+Gradleを試してみた](http://qiita.com/nyasba/items/1e22c2401f3849f9071d)

```groovy:bulid.gradle
processResources.destinationDir = compileJava.destinationDir
compileJava.dependsOn processResources
```

結果としてbuild.gradleは以下のようになります。

```groovy:build.gradle
// ・・・(省略)
    sourceCompatibility = 1.8
    targetCompatibility = 1.8
    [compileJava, compileTestJava]*.options*.encoding = 'UTF-8'

    processResources.destinationDir = compileJava.destinationDir
    compileJava.dependsOn processResources

    repositories {
        mavenCentral()
    }

    dependencies {
        // spring
        compile('org.springframework.boot:spring-boot-starter-actuator')
        compile('org.springframework.boot:spring-boot-actuator-docs')
        compile('org.springframework.boot:spring-boot-starter-aop')
        compile('org.springframework.boot:spring-boot-devtools')
        compile('org.springframework.boot:spring-boot-starter-mail')
        compile('org.springframework.boot:spring-boot-starter-security')
        compile('org.springframework.boot:spring-boot-starter-thymeleaf')
        compile('org.springframework.boot:spring-boot-starter-validation')
        compile('org.springframework.boot:spring-boot-starter-web')
        compile('org.springframework.boot:spring-boot-starter-websocket')

        // extension
        compile('org.projectlombok:lombok:1.16.6')

        // database
        compile('org.seasar.doma.boot:doma-spring-boot-starter:1.0.2')
        compile('mysql:mysql-connector-java:5.1.38')

        // specification
        testCompile('org.springframework.boot:spring-boot-starter-test')
    }
// ・・・(省略)
```

## datasourceの設定

筆者はyaml形式が好みなので、application.ymlに書いていきます。

```yaml
# Spring Core
spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/{dbname}
    username: {username}
    password: {password}

# Doma2 Reference URL <https://github.com/domaframework/doma-spring-boot>
doma:
  dialect: mysql
  sql-file-repository: no_cache
```

MySQLを使用する場合は中括弧の値を環境に合わせて設定してください。他のDBを使用する場合は、`driver-class-name`や`url`、`doma.dialect`などを環境に合わせて変えてください。特にdomaの設定方法については、[こちら](https://github.com/domaframework/doma-spring-boot)に記載があります。

## あとの手順

このあとの手順はエンティティクラスを作って、DAOインターフェースを作って、SQL書いていけば使用可能です。githubの[README](https://github.com/domaframework/doma-spring-boot)を見れば簡単に分かります。


この記事では上記のREADMEには書いていないけど、やっておかないと連携は出来ない小さなことを書きました。そのうちサンプルプロジェクトなどを使って本記事を修正するかもしれませんし、エンティティクラスやDAOインターフェースの自動生成やトランザクションやログ出力などに関することもそのうち書きたいです。
EnumerableにDefault値をいれる

たとえばこんな操作

```
void FindMin(List<int> list)
{
    if (list.Count > 0) { return 0; }
    else { list.Min(); }
}
```

DefaultIfEmptyをつかうとIEnumerableが空の時に、デフォルトの要素値を1つ加えてくれる。

```
void FindMin(List<int> list)
{
    return list.DefaultIfEmpty(0).Min();
}
```

if文とか不要でスッキリかける！
Linqで書いてるとときどき欲しくなるのでメモ
Unity5ハコスコVR開発 一人称視点のシューティングゲーム(FPS)の銃みたいに objectを配置したい、イージングでついてくる。

こんな感じで常に前面に潜水艦いさせたい。

![スクリーンショット 2016-07-05 18.01.11.png](https://qiita-image-store.s3.amazonaws.com/0/76843/dc7587e1-529a-71f7-aff2-36d7c82c6a8c.png)


1.空のGameObjectを作成(playerWrapと仮名)

2.下記、PositionControll.cs をアタッチ。
m_CameraTransformにはMainCameraを設定

```csharp:hoge.cs

using UnityEngine;
using System.Collections;

public class PositionControll : MonoBehaviour {

	public Transform m_CameraTransform;

	// Use this for initialization
	void Start () {
	}
	
	// Update is called once per frame
	void Update () {
		EasingMove();
	}


	void EasingMove(){

		// pos
		Vector3 diff = m_CameraTransform.position - transform.position;
		transform.position += diff * 0.05f;

		transform.rotation = Quaternion.Slerp (transform.rotation, m_CameraTransform.rotation, Time.deltaTime * 3f);
	}
}



```




3.常にカメラ前面にいてほしいオブジェクトを
(今回は潜水艦)をplayerWrapの子要素にする。

![スクリーンショット 2016-07-05 18.08.34.png](https://qiita-image-store.s3.amazonaws.com/0/76843/3048107b-7e75-030e-c2dc-c9bf7984c23d.png)

4、位置調節。
playerWrap、常にカメラ前面にいてほしいオブジェクトのpositionを一度0.0.0にする。
↓
その後、常にカメラ前面にいてほしいオブジェクト(ここでは潜水艦)の位置を画面右下に調節。

5、プレビューして確認。

（デバック方法）
Player Settings を開き(menu: Edit > Project Settings > Player)、 Other Settings を選択し Virtual Reality Supported のボックスをチェックすると、実行時にaltを押しながらドラッグすると視点を動かすデバックができる。


完
c++ builder XE4, 10.2 Tokyo > 自動付加された数値のsuffix (例 "Edit12"の12)を取得する実装

```txt:動作確認
C++ Builder XE4
RAD Studio 10.2 Tokyo Update 2 (追記: 2017/12/27)
```

コンポーネント名のEdit12から12を取得したり、Button3から3というインデックスを取得したい。

http://qiita.com/7of9/items/90c60cb9baa6c435b0cd
で実装していたものでは"_"始まりの数値しか取得できなかった。

以下でStrToIntDef()を使った実装をした。

```Unit1.cpp
static int16_t getSuffixIndex(String name)
{
	String work;
	int16_t val;

	for(int idx=0; idx < name.Length(); idx++) {
		work = name.SubString(idx + 1, MAXINT);
		val = StrToIntDef(work, -99);
		if (val != -99) {
			return val;
		}
	}
	return -1;
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
	int16_t val = getSuffixIndex(L"Button314");
	ShowMessage(IntToStr(val));

	val = getSuffixIndex(L"Edit12");
	ShowMessage(IntToStr(val));

	val = getSuffixIndex(L"Edit12_34");
	ShowMessage(IntToStr(val));
}
```

上記の結果、314, 12, 34の数値が取得できるようになった。

引数をSenderにした場合の実装は以下。
関連 http://qiita.com/7of9/items/d4d0a62d44c170b58dda

```cpp
static int16_t getSuffixIndex(TObject *Sender)
{
	TComponent *cmpPtr = (TComponent *)Sender;
	String name = cmpPtr->Name;

    String work;
    int16_t val;

    for(int idx=0; idx < name.Length(); idx++) {
        work = name.SubString(idx + 1, MAXINT);
        val = StrToIntDef(work, -99);
        if (val != -99) {
            return val;
        }
    }
    return -1;
}
```
ケーリーハミルトンで逆行列を求めてみた

ケーリーハミルトンの定理についてはここでは割愛します

#逆行列の求め方
ケーリーハミルトンの逆行列は次数に関わらず求めることができますが、ここでは3次の正方行列

```math
A = 
\begin{pmatrix}
a & b & c \\
d & e & f \\
g & h & i
\end{pmatrix}

```

について考えてみます

```math
det(\lambda E - A) \\
= ... \\
= \lambda^3-(a+e+i)\lambda^2+(ae+ei+ia-bd-cg-fh)\lambda + det|A|    \\
 \\
　 \\
 
\lambda = A とするとケーリーハミルトンの定理より \\
A^3-(a+e+i)A^2+(ae+ei+ia-bd-cg-fh)A - det|A|E  \\
= 0 ※ [1.1]
```

ここで両辺に$A^{-1}$をかけると逆行列を求めることができます

```math
A^{-1} = \frac{1}{det|A|} \{ A^2-(a+e+i)A+(ae+ei+ia-bd-cg-fh) \}
```

次数にかかわらず、以上のようにケーリーハミルトンで導出した特性方程式の両辺に$A^{-1}$をかけることで、逆行列を求めることができます

#例題
ここでは、ケーリーハミルトンから

```math
A = 
\begin{pmatrix}
1 & 2 & 1 \\
2 & 1 & 0 \\
1 & 1 & 2
\end{pmatrix}
```

の逆行列を求めてみます

```math
det|A| = -5 \\
A^2 = 
\begin{pmatrix}
6 & 5 & 3 \\
4 & 5 & 2 \\
5 & 5 & 5
\end{pmatrix} \\

　\\

A^{-1} = -\frac{1}{5} \{A^2 -(1+1+2)A+(1+2+2-4-1-0)E\} \\
= \frac{1}{5}
\begin{pmatrix}
-2 & 3 & 1 \\
4 & -1 & -2 \\
-1 & -1 & 3
\end{pmatrix} \\

```

このようにして逆行列を求めることはめったにありませんが、検算や参考までに覚えておくといいかも
【Gmaps for Rails】マーカー位置調整時の座標取得

##環境
Ruby 2.1.0
Rails 4.1.0
gmaps4rails 2.1.2

##GoogleMapsでマーカー位置座標の取得
Railsで飲食店検索サイトを作成しています。
GoogleMaps表示には```gmaps4rails```を用いています。

店舗情報は店舗が直接入力出来るようにしています。
gem```geocoder```を用いて入力してもらった住所から緯度・経度を取得し、GoogleMapsにマーカーを落とすようにしましたが実際の位置とはズレている事が多いです。

位置にズレがある場合は入力画面、もしくは確認画面で補正する方法はありませんでしょうか。
その際表示するGoogleMaps上でマーカーを直接動かして頂き、その位置の緯度・経度を取得してデータベースに保存できればベストだと考えています。

マーカー位置をドラッグでの移動は出来ましたが、その際の座標取得方法が分からずにいます。
通常でしたら```GetPosition```メソッドで取得可能なようですが、、
```Gmaps4Rails```を用いた場合の座標の取得教えて頂けませんでしょうか。


```shops_contrller.rb
  def edit
    @shop = Shop.find(params[:id])
    @hash = Gmaps4rails.build_markers(@shop) do |shop, marker|
        marker.lat shop.latitude
        marker.lng shop.longitude
        marker.infowindow shop.name
        marker.json({ title: shop.name })
    end
    respond_with(@shop)
  end
```

```shops/show.html.erb
  <div style='width: 800px;'>
    <div id="map" style='width: 800px; height: 400px;'></div>
  </div>

  <script type="text/javascript">
      handler = Gmaps.build('Google');
      handler.buildMap({ provider: {}, internal: {id: 'map'}}, function(){
        markers = handler.addMarkers(<%=raw @hash.to_json %>,{draggable: true});
        handler.bounds.extendWith(markers);
        handler.fitMapToBounds();
      });
  </script>
```
【論文シリーズ】依存構文解析のニューラルネットワークモデル

## 原文
[NNを使った、速く正確な依存構文解析 (A Fast and Accurate Dependency Parser using Neural Networks)](http://goo.gl/6CtoHj)
Danqi Chen (2014)

## 1. 要約／背景
* (普通の文章で)単語のデータ整形に工夫をして、データ間の依存性とスパース性を高めた。
* 以上の処理をもとに、NNにかけると、学習のスピードと精度が上がった。



## 2. 骨子の理論
(1)データの準備
Sentense(文)を単語・POS(Part-of-Speech)タグ・Arc量に分解する。
POSタグは、各単語に固有のものが振られる。2語or3語間の関係や依存性を捉える上で、大きな役割を果たす。(下図のVBZとか)
Arcは、単語間の遷移・移動を表す情報量。文法的な性質や操作の内容を内包しており、Parseにかけるときの実行的役割を果たす。
	例:amod: adjective modifier形容詞・修飾機能を捉えるarc

![151207223136_1.JPG](https://qiita-image-store.s3.amazonaws.com/0/127228/7a833b50-d0a8-f1aa-5c83-1ec6aab74e9a.jpeg)


(2)Parse作業の場
作業場(Stack)と、待合室みたいなBufferを用意し、適宜2集合間をShift(≒Transition)させ、Parseを進める。

(3)学習方法
Words、POSタグ、arc labelを入力ベクトルに格納し、NNにかける。
softmax関数によるクラス分類を通して、アウトプットと教師ラベルを比較していく。

![151207223136_2.JPG](https://qiita-image-store.s3.amazonaws.com/0/127228/58465bb3-436c-0ec6-4491-8baba74a83aa.jpeg)


(4)活性化関数
$y = x^3$という3次関数を使っているところに特徴がある。
3語間の特徴を捉えたりするときに、当てはまりが良いらしい。



## 3. モデル適用例
Maltというパフォーマンスの良いParseアルゴリズムがあるが、
Maltと正答率が拮抗する上に、1秒辺りの処理文数が2倍近くにのぼっており、処理能力の高さが伺える。

![151207223136_3.JPG](https://qiita-image-store.s3.amazonaws.com/0/127228/b0c9b2e8-d818-0417-bd91-787c7130b326.jpeg)
【論文シリーズ】多予測性Deep Boltzmann Machines

## 原文
[多予測性DBM (Multi-prediction deep Boltzmann machines)](http://goo.gl/TsjbRw)
Ian J. Goodfellow, Mehdi Mirza, Aaron Courville, Yoshua Bengio (2013)


## 1. 要約／背景
* MP-DBMは、一般尤度関数の変分近似で一価確率モデルを学習したものである。
* 多層化の際、貪欲法による積層化の処理が必要なくなる点で、斬新である。<br>
従来の積層に比べて、次のようなメリットがある
 - 上層が下層の影響を汲み取りやすい
 - 多様な確率モデルを適用できる
 - 複層計算によるコストを防げる

## 2. 骨子の理論
(1)Multi-prediction training
MPTは、平均場近似を使い、再帰ネットワークを誘起する学習方法である。
対応モデルとして

* １. 可変基準を持つ一価確率モデル
* ２. 再帰ネットワーク群

が挙げられる。
学習の際に観測される全ての変数群を$O$とする。$Q_i$を$i$番目の変数予測のための汎関数と取ると、$i$番目の変数予測の変分近似は次のように表される。

```math
Q_i(O_{S_i},h) = \arg\min_QD_{KL}(Q(O_{S_i},h)||P(O_{S_i},h|O_{-S_i}))
```
すなわち、同時分布と、$i$番目を除いた系による条件分布とのカルバック・ライブラー・ダイバージェンスの最小化に等しい。

MPDBMの学習のコツは、RBMを積み上げてDBMを作った後に、RBM時代のパラメータ群$\theta$を全て棄却し、DBM全体で学習し直す点である。平均場近似を使って、隠し変数を推定する。その上で、パラメータ$\theta$を推定し直す(Multi Layer Perceptron)

![151204040709_3.JPG](https://qiita-image-store.s3.amazonaws.com/0/127228/f51f591e-57cc-2e53-b121-adc09147d845.jpeg)


下図は、ミニバッチでMulti-predictionトレーニングをする挙動の様子を表す。
各段で、それぞれの学習例を示す。
黒丸は、そのネットワークが観測できる変数を表す。それに対し、青丸で予測された特徴が表現される。
これらの要素は、緑矢印で表現される関連性があってこそ、それぞれの挙動を発揮する。

![151204040640_2.JPG](https://qiita-image-store.s3.amazonaws.com/0/127228/ed0bbb3c-dc4c-216c-d5a1-76f61dc3d684.jpeg)



## 3. モデル適用例
MNISTやNORBのテストでは、調整されたDBMよりやや効果的な結果が出た。
Ransack「f.time_select」検索で空欄の場合は全ての結果を返したい

##環境
ruby 2.1.0
Rails 4.1.0
ransack 1.7.0

##Ransackでf.time_select
gem```Ransack```で開店時間を指定できる検索を実装したく、```f.time_select```を用いています。
```f.time_select```で時間を指定せずに検索し、空欄の場合は全ての結果が返されるようにしたいです。

現状、空欄でコンソールでの結果は
```Item Load (1.5ms)  SELECT DISTINCT `shops`.* FROM `shops`  WHERE `shops`.`time` = '0001-01-01 00:00:00'  ORDER BY `items`.`time1` ASC```
となりますが```0001-01-01 00:00:00```のデータ無いため当然何も返されません。

結果が```0001-01-01 00:00:00```の場合は全てを表示というような、方法はありませんでしょうか。

```item_controller.rb
def index
    @q     = Shop.ransack(params[:q])
    @q.sorts = 'name asc' if @q.sorts.empty?
    @shops = @q.result(distinct: true)
    respond_with(@shops)
end
```


```item/index.html.erb
<h1>商品一覧</h1>

<%= search_form_for @q do |f| %>
  <%= f.label :name_cont, "商品名" %>
  <%= f.search_field :name_cont %>

  <%= f.label :city, "市町村" %>
  <%= f.search_field :shop_city_cont %>

  <%= f.label :open_time, "開店時間" %>
  <%= f.time_select :open_time_eq, :minute_step => 10, :include_blank => true %>
  <%= f.submit '検索'%>
<% end %>

<table>
  <thead>
    <tr>
      <th><%= sort_link(@q,:shop_name,'店名') %></th>
      <th><%= sort_link(@q,:shop_city, '市町村') %></th>
      <th><%= sort_link(@q,:name,'商品名') %></th>
      <th><%= sort_link(@q,:price,'値段') %></th>
      <th><%= sort_link(@q,:open_time,'開店時間') %></th>
      <th>Content</th>
      <th colspan="3"></th>
    </tr>
  </thead>

  <%= render @items %>
```
【論文シリーズ】新しいRNNの学習方法（Hessian FreeとRBM利用）

## 原文
[RNNの学習 (Training recurrent neural networks)](http://goo.gl/smwaVx)
Ilya Sutskever (2013)

## 1. 要約／背景
新しいRNNの学習方法として、
①RBMを使う手法
②**脱ヘシアン(Hessian-free)**最適化
を提案した。

②では、長期時系列の予測にも耐えうることが知られている。
筆者らは、手法を文字列レベル（単語レベルでない）のNLPに適用した。

## 2. 骨子の理論
### (1)Temporal RBM
RBMのモデルを系列データに適用したパターンである。
系列$t$の可視変数と隠れ変数が、$t-1$以前の可視変数と隠れ変数にそれぞれ影響を受けているモデルである。

![151203164441_1.JPG](https://qiita-image-store.s3.amazonaws.com/0/127228/58cd4509-f1cd-9522-d382-91553f1464fe.jpeg)


系列$m$前まで影響があるときの、ボルツマン分布は、

```math
P(v_t,h_t|v_{t-m}^{t-1},h_{t-m}^{t-1}) = \frac{\exp(h_t{}^T\mbox{W}v_t + B_v(v_{t-m}^{t-1}){}^Tv_t + B_h(v_{t-m}^{t-1},h_{t-m}^{t-1}){}^Th_t)}{Z(v_{t-m}^{t-1},h_{t-m}^{t-1})}
```

サンプリングの際に、$m$系列前までの変数が影響を及ぼす。
サンプル採取(フィルタリング)の元になる、確率分布を、次のようにシグモイド近似している。

```math
P(h_{t,i} = 1|v_{1}^{t},h_{1}^{t-1}) = \mbox{sigmoid}\big((\mbox{W}v_t)_i + B_h (v_{t-m}^{t-1},h_{t-m}^{t-1})\big)
```

学習は対数尤度の最小化のアプローチで進行し、定石通りサンプルされた変数群の期待値の差に落とし込まれる。
ただし、今回は系列モデルであり、過去の系列の影響を受けない系($Q_1$)と$m$次前まで影響を受ける系($Q_2$)それぞれの期待値差で、重みの更新を決める。

```math
\Delta \mbox{W} \propto {\bf E}_{Q_1}\big[ h_tv_t{}^T\big] - {\bf E}_{Q_2^t}\big[ h_tv_t{}^T\big] \\
\Delta \mbox{W}_n \propto {\bf E}_{Q_1}\big[ (h_t - {\bf E}_{Q_2^t}[ h_t])v_{t-n}{}^T\big] \\
\Delta \mbox{W}_n' \propto {\bf E}_{Q_1}\big[ (h_t - {\bf E}_{Q_2^t}[ h_t])h_{t-n}{}^T\big] \\
\Delta \mbox{A}_n \propto {\bf E}_{Q_1}\big[ (v_t - {\bf E}_{Q_2^t}[ v_t])v_{t-n}{}^T\big] \\
```
<br>

```math
Q_2^t(v_{1}^{t},h_{1}^{t}) = P(v_t,h_t|v_{t-m}^{t-1},h_{t-m}^{t-1})Q_1(v_{1}^{t-1},h_{1}^{t-1})
```


### (2)RTRBM
再帰型TRBMは、フィードバックの影響を受けるTRBMである。
すなわち、同じ系列の可視変数をサンプリングするとき、ひとつ前の隠れ変数に加えて、同じ系列の隠れ変数の影響も受けるような仕組みである。Motion Captureのような動画認識において、強いパフォーマンスを見せる。

![151203164441_6.JPG](https://qiita-image-store.s3.amazonaws.com/0/127228/d8d25f9b-ff81-e8e0-cd80-7b38ac1fbff4.jpeg)


### (3)脱ヘシアン最適化
脱ヘシアン最適化は、(勾配降下法＝GDの代わりに)ニュートン法を大規模に適用した計算方法である。LSTMで問題になった、長期時系列依存性の問題をクリアし、長期記憶の改善に繋がると期待される。
GDは、悪質な曲率を持った目的関数と相性が悪いのは知られている。(勾配消失問題は、その一例)
ニュートン法は、そのデメリットがない。
ただし、計算の遅いデメリットがあるので、その工夫により適用可能性が広がる。

パラメータ$θn+1$の更新に際し、目的関数を副次目的関数$M$と正則化項$R$に分解する。

```math
q_{\theta_n}(\theta) \equiv M_{\theta_n}(\theta) + \lambda R_{\theta_n}(\theta)
```
副次目的関数は2次のニュートン法により、次のように近似される。

```math
M_{\theta_n}(\theta) = f(\theta_n) + f'(\theta_n){}^T \delta_n + \frac{\delta_n{}^T C_n \delta_n}{2}
```

$C_n$は、目的関数$f$の曲率に対する近似項である。


## 3. モデル適用例
### 言語モデルへのHF-RNNの適用
Multiplicative RNNというモデルを構築し、文字単位での言語予測モデルをRNNにより構築した。
(N-gramや単語ベクトルというレベルより、1歩先に進んだ系)

![151203164441_9.JPG](https://qiita-image-store.s3.amazonaws.com/0/127228/89c0936b-343f-354a-59f5-92160dd6fb41.jpeg)
営業マンがノンプログラミングで高速に集計してみた

MongoDB アダプタに続きまして、第2回です。
引き続き DataSpider Servista V4 SP1 の新機能を試してみます。
今回試すのは「マルチストリームコンバータ（略称：MSC）」です。
***
###マルチストリームコンバータ 概要
V4 SP1 より搭載された新エンジンにより「集計」「結合」「ソート」処理が高速化されました。
これによりパフォーマンスの高速化が実現できるだけではなく、「集計」「結合」「ソート」処理を作成する際の工数の大幅な削減が見込めます。
<img width="534" alt="MSC.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/129487/da3e1f11-51dd-86dc-f55e-474d1ccc623b.jpeg">
今回はこの中の「集計」の処理で実践してみます。
従来も集計を行うことはできましたが、より簡単に集計処理が作れるようになっています。
###準備
では、準備です。
ダミーデータは[こちらのサイト](http://kazina.com/dummy/index.html)で作りました。
データは
>名前,ふりがな,アドレス,性別,年齢,誕生日,都道府県

という形式で全部で 10,000件のデータがあります。こんな感じです（↓）。
<img width="422" alt="sampleData.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/129487/8352d1f8-247c-bd9a-f042-c0f17b50d2da.jpeg">
このデータを元にして、都道府県別の平均年齢を集計してみようと思います。
###スクリプト作成
CSV 読み取り機能の設定は割愛して、集計処理の機能にフォーカスしてご紹介します。

まず、ツールパレットを確認しましょう。
従来からの「マッピング」「マージ」に加えて「結合」「集計」「ソート」が追加されています。
<img width="232" alt="ツールパレット.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/129487/f8195950-107e-2c00-493a-f412b1f2cce4.jpeg">
「集計」アイコンをドラッグ＆ドロップで配置します。
設定は以下の通りです。殆どはプルダウンで選ぶだけです。

グループキー：集計のキーとする列を指定します。
<img width="343" alt="グループキー.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/129487/5a464366-da89-46a3-4ec0-704eae319cb5.jpeg">
集計対象：集計対象とする列を指定します。
今回は「列名：年齢」「関数：合計値」と設定します。
<img width="345" alt="集計設定.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/129487/32df13d6-d80d-ee45-bf02-57cf23be1496.jpeg">
今回は合計値を取得していますが、予め用意された関数を用いることで集計対象とする列について様々な値を取得することができます。
（一部の処理において使用可能なデータ型に制限があります。詳しくは[ヘルプ](https://dl.appresso.com/help/dss40sp1/help/index_ja.html)を確認しましょう）
<img width="281" alt="集計関数.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/129487/c295a856-0212-2ae1-c7c6-7fa20ee8136f.jpeg">
マルチストリームコンバータの設定（集計のための設定）はこれだけです。
あとは「平均年齢」を算出するためには「マッピング」機能を使います。
「マッピング」機能では様々な関数アイコンを使ってデータの加工ができます。
真ん中にあるアイコンが割り算のアイコンです。今回は「集計」アイコンによって取得した「合計値」を「件数」で割り、有効桁数小数点以下1桁として結果を取得します。
<img width="363" alt="mapping.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/129487/d1e88524-41cb-e7f6-c238-b649c57f32b2.jpeg">
設定はここまでです。この集計結果を Excel に出力します（設定は割愛）。

###いざ、実行！
出来上がったスクリプトを実行してみます（ポチッ）。
数秒待つかな？と思いましたが、なんと！一瞬（266ms）で結果が出ました。
ノートPC で試してこの結果なのでサーバー機であればもっと速いでしょう。
作成したスクリプトと実行速度の証拠は以下のとおりです。
<img width="320" alt="Script.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/129487/85e0a2da-5481-1cb7-2b99-9d285584d9a9.jpeg">
###結果確認
当然ですが、出力先の Excel は以下のように集計結果が出力されています。
<img width="133" alt="Excel.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/129487/01bdebe1-2261-a3e3-1c01-eb7f8a030647.jpeg">
###まとめ
・・・とこんな感じで凄く簡単に集計処理作成することができます（作成時間：1時間弱）。
私はプログラムを書くことができないので、他の方法（スクラッチ開発）との比較をすることができないのですが、1万件の集計が一瞬で終わるパフォーマンスは使う人にとって十分に満足いただけるものと思います。
集中できる開発スタイルを目指して

# 概要
最近ですが、会社で作業しているとノイズが多く、開発効率が悪いです。
ノイズのせいだと決めつけて、ノイズ源を明記してルール化してみました。

# 基本はコーディング
基本は、[射撃しつつ前進](http://japanese.joelonsoftware.com/Articles/FireAndMotion.html)していく。

ざっくり概要を書いたら、ともかく撃ちまくる（コードを書いていく  ）
テスト駆動開発を用いれば、空の関数とか書いていくスタイルなので、
一文字でコミットでも良いから、とにかく進んでいけるはず

コードが不格好でも、テスト駆動開発なので、リファクタリングでカバーできる

ポモドーロテクニックなども入れると、より一層前進できる気がします。
最近は、とりあえずタイマースタートして、ポモドーロの前準備もポモドーロでやったりしてます。

# チャットツールやメールなど通知があるものは全部落とす
* hipchat（チャットツール）
* skype（チャットツール）
* line（チャットツール）
* メール（メール）
* コンフル（wiki）
* facebook （SNS）

SNS系の割り込みを無くす。意外に落とし穴なのは、コンフル。
コンフルも通知があるので、開いちゃダメです。
見る時間を日に２回位（朝と帰り際とか）に決めて、それ以外は落としておく。

# コンフルに書く内容は、テストフォルダにマークダウンファイルを入れておく。
* memo.md
* spec.md

というファイル名。コミットもしちゃう。
仮にマージされちゃっても、害は無いはず。（後で消せばよい）
spec.mdは、書き上がったら、コンフルなど正規位置に移すこと。
bitbucketじゃなければ、GUIから修正できるから、使用決定者と共に
Gitのmdファイルを直していけると思った。

# 各マークダウンのルール
## memo.md
邪魔なものが目に入らないように、今実装に必要な物のみが書いてある感じ。
ツール自体は、mindmapでも、Excelでも何でも良いが、
ともかくノイズが入らないものを使うように。

## spec.md
https://gist.github.com/daijinload/cd912a507207535e8a4b0fd0bc857a0c

オレオレで申し訳ないが、GoogleDesignDocを参考に、
機能仕様に必要な物だけを、抽出した項目で書いていく。
（こちらは改善ポイントがあれば、適宜改善予定）
gitログのカスタマイズ


logコマンドにオプションをつけて見やすくカスタマイズしてみます。

下のコマンドは私がよく使用しているログコマンド
```git log --graph --all --color --pretty='%x09%ad %x09%h %cn%x09%s %Cred%d'```

上記コマンド解説

| オプション | 説明 |
|:-----------|:------------:|
| --graph | ツリー表示     |
| --all     | 他ブランチ含む全てのログ表示 |
| --color | 色 |
| --pretty | ログのフォーマット |

また--prettyで見た目の変更や色々情報を追加しています。

| pertty補足 | 説明 |
|:-----------|:------------:|
| %x09 | タブ |
| %ad | 日付 |
| %h | 短縮版ハッシュ |
| %s | 件名 |
| %Cred | %Cred以降の色を赤色にする(%Cblue、%Cgreen等もある。リセットは%Creset)|
| %d | branch名 |

上記以外にも色々なコマンドがあります。用途によって入れます。

| オプション | 説明 |
|:-----------|:------------:|
| --stat | --shortstat |
| --shortstat | --stat コマンドのうち、変更/追加/削除 の行だけを表示する |
| --name-only | コミット情報の後に変更されたファイルの一覧を表示する |
| --name-status | 変更されたファイルと 追加/修正/削除 情報を表示する(--prettyで%ad使用時) |

またprettyにも色々ありまして、私的に使えるのが[%cr]でこれは相対日付が出せます。
2週間前にコミットされていたら(2 weeks ago)のような表示になります。

表示の際は色指定を細かくやると見やすくてとてもいい感じです。

コマンドは長いですが最初のコマンドを更に改造したコマンドがこちら。

```git log --graph --all --pretty='%x09%ad %x09%Cblue%h%Creset %C(yellow)%cn%Creset %s %Cred%d %Cgreen(%cr)'```

是非お試し下さい。
エディットモード中に実行せずに一定時間おきに更新処理を行う方法

スクリプトから動的にモデルの頂点をいじったりする処理を作っていましたが…
実行しないと確認できない…。
実行中にパラメータ調整しても停止したら消える…。
と、非常に作業効率が悪かったので、エディットモード中に実行せずに更新処理を行って確認する処理を作ってみました。

## 要点

- クラス宣言の上に **[ExecuteInEditMode]** をつける(エディットモード中にスクリプト実行する属性）
- **EditorApplication.update** デリゲートに更新用メソッドを追加する。
- 更新用メソッドの中で経過時間を見て、更新処理を行う。
- **EditorApplication.update** だけでは画面の書き換えは発生しないので、強制的に **SceneView.RepaintAll()** を呼ぶ。

## サンプル
```csharp
#if UNITY_EDITOR
   static double waitTime = 0;

   void OnEnable()
   {
       waitTime = EditorApplication.timeSinceStartup;
       EditorApplication.update += EditorUpdate;
   }

   void OnDisable()
   {
       EditorApplication.update -= EditorUpdate;
   }

   // 更新処理
   void EditorUpdate()
   {
       foreach (var go in Selection .gameObjects)
       {
           // 選択中のオブジェクトのみ更新
           if (go == this.gameObject)
           {
               // １／６０秒に１回更新
               if (( EditorApplication.timeSinceStartup - waitTime) >= 0.01666f )
               {
                   // 君だけの更新処理を書こう！
                   UpdateFunc();

                   SceneView.RepaintAll(); // シーンビュー更新
                   waitTime = EditorApplication.timeSinceStartup;
                   break;
               }
           }
       }
   }
#endif
```

## おまけ

応用すればエディターウィンドウ上で動くテトリスとか作れるかもしれませんね。
https://www.assetstore.unity3d.com/jp/#!/content/2796
コマンドがシェルの内部組み込みコマンドか確認する

すぐ忘れるのでメモ。
環境はCentOS7.2およびAmazonLinux

内部組み込みコマンドのほうが早いはず…
外部コマンドだとそれをインストールすればどこでも
使える利点はあるけど。

そのコマンドが組み込みコマンドか調べるときは
typeコマンドを使う。


` $ type pwd
pwd is a shell builtin`


`$ type jq
jq is /usr/bin/jq`

内部組み込みコマンドが何か調べるには
`$ help`

helpコマンド自体も内部組み込みコマンド
`$ type help
help is a shell builtin`

`$ type cat
cat is hashed (/usr/bin/cat)`

is hashedがよく分からないので後で調査。

（参考
[atmarkit](http://www.atmarkit.co.jp/flinux/rensai/linuxtips/109shellcomd.html)
構造方程式モデリングGUI Ωnyx ことはじめ

##構造方程式モデリングGUI Ωnyx
http://onyx.brandmaier.de/

落としてきたjarをダブルクリックすると起動する。

１．メニューから「Load Model or Data」を選択し、対象のデータリストを読み込む。

![151202151023_01.png](https://qiita-image-store.s3.amazonaws.com/0/127228/ac034332-ff1b-aa10-8789-56e197acd49e.png)


２．メニューから「Create Empty Model」を選択し、ワークスペースを開く。

![151202151023_02.png](https://qiita-image-store.s3.amazonaws.com/0/127228/f617e5df-fd01-43ab-bf3e-f43316b5d8dd.png)


３．読み込んだデータをドラックアンドドロップでワークスペースに配置。

![151202151023_03.png](https://qiita-image-store.s3.amazonaws.com/0/127228/9ffd113d-8409-5496-7b0f-a23a0ec01b33.png)


４．ワークスペースで右クリックして「Create Variable > Latent」で潜在変数を追加。

![151202151023_04.png](https://qiita-image-store.s3.amazonaws.com/0/127228/d29f6814-63c9-6421-e3f4-60380107ab4e.png)


５．各変数のうえで右クリック押しながらドラックアンドドロップでパスを引く。

![151202151023_05.png](https://qiita-image-store.s3.amazonaws.com/0/127228/e9ffbd69-8ead-1e9c-b3a9-88d369488ce2.png)


６．ワークスペースで右クリックして「Show Script > sem package」でsem用のscriptを出力。

![151202151023_06.png](https://qiita-image-store.s3.amazonaws.com/0/127228/ff773bce-6b10-d12e-0982-3e075f8a5a64.png)


７．パッケージ読み込み、ファイルの読み込み部などを正しく修正し、Rstudioで実行。
ディスクを追加してxfsでフォーマットする

仮想マシンにハードディスク(仮想ディスク)を追加してファイルシステム「xfs」でフォーマットする。
OSはCentOS6.5。
***
xfsとは
[(参考) Linuxファイルシステムをまとめてみました](http://qiita.com/sion_cojp/items/c8e015db39ddbf43012e)
***

1. 仮想マシンにハードディスク追加

2. xfsprogsインストール
`# yum install -y xfsprogs`

3. パーティション作成
`# fdisk /dev/sdc`
`デバイスは正常な DOS 領域テーブルも、Sun, SGI や OSF ディスクラベルも
含んでいません
新たに DOS ディスクラベルをディスク識別子 0x7fe3af03 で作成します。
あなたが書き込みを決定するまで、変更はメモリ内だけに残します。
その後はもちろん以前の内容は修復不可能になります。
警告: 領域テーブル 4 の不正なフラグ 0x0000 は w(書き込み)によって
正常になります
警告: DOS互換モードは廃止予定です。このモード (コマンド 'c') を止めることを
      強く推奨します。 and change display units to
         sectors (command 'u').
コマンド (m でヘルプ): p
ディスク /dev/sdc: 21.5 GB, 21474836480 バイト
ヘッド 255, セクタ 63, シリンダ 2610
Units = シリンダ数 of 16065 * 512 = 8225280 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O size (minimum/optimal): 512 bytes / 512 bytes
ディスク識別子: 0x7fe3af03
デバイス ブート      始点        終点     ブロック   Id  システム
コマンド (m でヘルプ): n
コマンドアクション
   e   拡張
   p   基本パーティション (1-4)
p
パーティション番号 (1-4): 1
最初 シリンダ (1-2610, 初期値 1):
初期値 1 を使います
Last シリンダ, +シリンダ数 or +size{K,M,G} (1-2610, 初期値 2610):
初期値 2610 を使います
コマンド (m でヘルプ): p
ディスク /dev/sdc: 21.5 GB, 21474836480 バイト
ヘッド 255, セクタ 63, シリンダ 2610
Units = シリンダ数 of 16065 * 512 = 8225280 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O size (minimum/optimal): 512 bytes / 512 bytes
ディスク識別子: 0x7fe3af03
デバイス ブート      始点        終点     ブロック   Id  システム
/dev/sdc1               1        2610    20964793+  83  Linux
コマンド (m でヘルプ): w
パーティションテーブルは変更されました！
ioctl() を呼び出してパーティションテーブルを再読込みします。
ディスクを同期しています。`

4. xfsでフォーマット
`# mkfs -t xfs /dev/sdc1`
`meta-data=/dev/sdc1              isize=256    agcount=4, agsize=1310300 blks
         =                       sectsz=512   attr=2, projid32bit=0
data     =                       bsize=4096   blocks=5241198, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none`

5. マウントポイント作成
`# mkdir -p /mnt/gfs_vol`

6. マウント
`# mount /dev/sdc1 /mnt/gfs_vol`
`# vi /etc/fstab`
`/dev/sdc1               /mnt/gfs_vol            xfs     defaults        1 2`

7. 確認
`# df -T`
`Filesystem                      Type  1K-blocks    Used Available Use% Mounted on
/dev/mapper/vg_nonmem01-lv_root ext4   20243012 5809080  13385356  31% /
tmpfs                           tmpfs   1962856      72   1962784   1% /dev/shm
/dev/sda1                       ext4     495844   88461    381783  19% /boot
/dev/mapper/vg_nonmem01-lv_data ext4   19492656 1835064  16609016  10% /var
/dev/sdc1                       xfs    20954552   32928  20921624   1% /mnt/gfs_vol`

終わり
Rails4で年齢を選択するドロップダウンリスト

モデルにするほどの必要もないけど選択項目が多い年齢などの
ドロップダウンリストを簡単に作るにはどうしたらよいか悩んでだので備忘録。

```
<%= select_tag(:age, options_for_select((18..85).to_a)) %>
```

簡単でした。
Shinyで複数のデータフレームを処理する手法を整理してみる

個人的（？）に[IOT開発で無敵だと考えているR/Shiny](http://qiita.com/komde/items/0f7a8f01ae6366055f47)に関して、ちょっとしたコツみたいなものをつらつら書き残しておきたいと思います。

自分がつまずいたところがまず複数のデータフレームを1つのReactivityで処理するのにどう書いたら良いかというところです。実は何通りかあるようなのでこの記事ではそれの分類まで記載しておきます（完全動作サンプルは時間ができたら用意するのでしばらくお待ちください）。
※ちなみに以前は永続代入(グローバル変数)を使う方法も併記していましたが、Shiny-Serverで複数ユーザー同時使用時に他ユーザーのデータで上書きされる現象が見つかったため、そちらの記載は削除しました。多分同一インスタンス内でグローバル変数を使っているせいかなとは想像しています。

##Reactivityとは
Shinyはフォームへの入力結果が勝手に画面に反応される動作がデフォルトになっています（乱暴な表現ですが、、）。それのスコープを定義しているのがReactivityという概念で、適切な区切りにしておかないと上手く動かないことがあります。詳しくはココ
http://shiny.rstudio.com/articles/reactivity-overview.html

##データ読み込み方法の分類
###eventReactive()で受けとる
actionButtonなどが押されたときに読み込む、という場合に有効です。Buttonを複数用意して異なるデータセットを異なるタイミングで読み込むことも可能です（例えばヘッダー情報を読み込むボタンでヘッダー一覧を読み込み、それの詳細が必要な場合は詳細読み込みボタンを押す、などのケースが考えられます）。

```
reload_head <- eventReactive(input$session_load, {
 #値を演算、複数DFの場合はリスト
 #リストで返す
  return(list(data1=data1,data2=data2))
 }
output$header_list <- renderTable({
　#リストの場合
  data <- reload_head()[["data1"]]
  data
})

```

###reactive()でくくる
これは演算全体をreactiveにする場合に有効で、画面上で自動更新を実現させたい時などはこれを使うと良いです。

```
autoInvalidate <- reactiveTimer(15000) #再読み込みタイマーの設定
reload <- reactive({
#自動更新フラグがオンの時は自動更新させる
  if (input$auto_reload){
    autoInvalidate()
  }
  #値を演算、複数DFの場合はリスト
  return(list(data1=data1,data2=data2))
})
output$list <- renderTable({
  data <- reload_head()[["data1"]]
  data
})
```

###reactiveValues()な変数を定義する
上記2つとほぼ同じことができるのですが、関数の返り値としての受け取りをする必要がなくなります。

```
tmp <- reactiveValues() #データ貯めるテンポラリバッファのリスト
observeEvent(input$reload, { #reloadボタンが押されたら、、
  #tmpリストに演算結果をセット
  tmp$data1_rv <- data1
  tmp$data2_rv <- data2
})
output$plot <- renderPlot({
  hist(tmp$data1_rv$Strength, breaks = 60, main = NULL)
})

```