OmniAICreator/Qiita-1.07M huggingface dataset:
node-redでゲージ表示

#概要
node-redでwebsocketを使って、ゲージ表示する。
jsdo.itに、置く。
#写真

![guage.jpg](https://qiita-image-store.s3.amazonaws.com/0/18104/8780643c-eab5-9633-a69d-2253526710b8.jpeg)

![websocket.jpg](https://qiita-image-store.s3.amazonaws.com/0/18104/51923f7c-c3f3-8006-ee05-98c9a3f2bd2e.jpeg)

#サンプルコード
```
google.load('visualization', '1', {
    packages : ['gauge']
});
var tmp = 0;
var opt2 = {
    min: -20,
    max: 80,
    width: 300, 
    height: 300,            
    yellowFrom: 40, 
    yellowTo: 60,
    redFrom: 60, 
    redTo: 80,
    minorTicks: 4
};
var chart2;
function reloadData() {
    var table2 = [['Label', 'Value'], ['℃', tmp]];
    var data2 = google.visualization.arrayToDataTable(table2);
    chart2.draw(data2, opt2);
}    
function sendData(str) {
    window.external.onData(str);
}
var websocket;
function setup() { 
    websocket = new WebSocket("ws://node-red/test0");
    websocket.onopen = function() {
        alert("CONNECTED"); 
    };
    websocket.onmessage = function(e) {
        tmp = parseFloat(e.data);
        reloadData();
    };
    websocket.onerror = function(e) {
        alert("ERROR: " + e.data);
    };
    google.setOnLoadCallback(drawChart);
    function drawChart() {
        chart2 = new google.visualization.Gauge(document.getElementById('chart2'));
        reloadData();
    }
}
setup();

```
RxSwiftでリアクティブにインターバル間隔を変えるintervalを作る方法 #rxSwift



元々質問のつもりで作ったんですが自己解決しました
タイトルの通り、intervalの間隔をリアクティブに対応する関数を作りました。

![interval.gif](https://qiita-image-store.s3.amazonaws.com/0/3844/b4cf743b-31a4-dded-958c-0c91ad185691.gif "interval.gif")

```swift:インターバル値を都度変更する関数
public func interval(throttle throttle:Variable<Double>) -> Observable<Double> {

    return create { (observer) -> Disposable in
        
        var intervalDisposer:Disposable?
        return throttle.subscribeNext { (chagedValue) -> Void in
            intervalDisposer?.dispose()
            intervalDisposer = interval(chagedValue, MainScheduler.sharedInstance).subscribeNext({ count -> Void in
                observer.on(.Next(chagedValue))
            })
        }
    }
}

```


いかが実際に利用している箇所のコードとなります。


```利用例


import UIKit
import RxSwift
import RxCocoa

class ViewController: UIViewController {

    @IBOutlet weak var incrementalLabel: UILabel!
    @IBOutlet weak var addDurationButton: UIButton!
    @IBOutlet weak var decDurationButton: UIButton!
    @IBOutlet weak var durationTimeLabel: UILabel!
    
    var durationTime = Variable(0.3)
    var incrementValue = Variable(0)

    var disposeBag:DisposeBag = DisposeBag()

    override func viewDidLoad() {
        super.viewDidLoad()
        
        //該当呼び出し箇所 <------
        interval(throttle: durationTime).subscribeNext { _ in
            self.incrementValue.value += 1
        }.addDisposableTo(disposeBag)
        

        //txt
        incrementValue.map{ return "\($0)"}.bindTo(incrementalLabel.rx_text).addDisposableTo(disposeBag)

        //chnage durationtime
        addDurationButton.rx_tap.subscribeNext {
            self.durationTime.value += 0.1
            self.durationTime.value = abs(self.durationTime.value)
        }.addDisposableTo(disposeBag)

        decDurationButton.rx_tap.subscribeNext {
            self.durationTime.value -= 0.1
            self.durationTime.value = abs(self.durationTime.value)
        }.addDisposableTo(disposeBag)

        self.durationTime.map{ return "\($0)" }.bindTo(durationTimeLabel.rx_text).addDisposableTo(disposeBag)
        
    
    }

}
```


以下に既存コードを置いています。
https://github.com/m0a-mystudy/adjustableInterval
gitのコミット（commit）とマージ（merge）とトピックブランチの削除

## 書く動機
[Rails チュートリアル](http://railstutorial.jp/chapters/beginning?version=4.2#book_menu)で学んだことを覚えるために書く。

##変更が終わったトピックブランチの状態を見る　`git status`

```cmd:command
$ git status
On branch test
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   nokonoko.rb
no changes added to commit (use "git add" and/or "git commit -a")
```

##コミット `git commit -a -m "コメント"`
-aフラグはすべてのファイルへの変更を一括でコミットすることが出来る。

```cmd:command
$ git commit -a -m "nokogiri_sample revised"
[test 60734eb] nokogiri_sample revised
 1 file changed, 2 insertions(+), 2 deletions(-)
```

##マージ　`git merge <ブランチ名>`
ブランチでのファイル変更が終わったので、マスターブランチに切り替えて、`git merge <ブランチ名>`コマンドでマスターブランチに変更を反映する。

```cmd:command
$ git checkout master
Switched to branch 'master'
$ git merge test
Updating 5a58185..5d8a1ce
Fast-forward
 nokonoko.rb | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
```

##トピックブランチの削除 `git branch -D <トピックブランチ名>`
この時点でトピックブランチが残っています。
トピックブランチを削除せずにそのまま残しておくことはよくあるそうですが、作成したトピックブランチが不要になったりすることもあるので、書いておく。
例では、トピックブランチ`test`を削除してみる。

```cmd:command
$ git branch
* master
  test

$ git branch -D test
Deleted branch test (was 5d8a1ce).

$ git branch
* master
```
Excelのタブを縦表示するVSTOアドイン

_この記事はなにがしかのアドベントカレンダーに投稿するつもりだったものです。_

![VTab.gif](https://qiita-image-store.s3.amazonaws.com/0/60841/33b5f685-d2ec-5a88-113f-dda23b45cfeb.gif)
このようなものを作って自分で利用しています。

## なぜ作ったのか
シート数がそれなりに多いエクセルを利用していると「シートタブの視認性・検索性が著しく悪い」という悩みがあった為お勉強も兼ねて解決できないかと思いたちました。
同僚が同様のぼやきをしていたような気もします。

## 結果どうだったのか
極端に言うとタブを縦に並べた+インクリメンタルサーチをつけただけなのですが結構便利です。
公式で実装してほしいくらい。
社内では私以外にも使いたいという人が現れました。

## 機能
- ワークシートのタブを縦に並べたカスタムタスクペイン上でワークシートの選択
- シート名でのインクリメンタルサーチ
- ドラッグドロップでのシート順入れ替え

## 実装について
ソースコードはこちらになります。
https://github.com/nk9k/ExcelVerticalTab
### リスト部分
WPFで作ったユーザーコントロールをVSTOでホストしています。
ListBoxItemのスタイルをTabItem風にしてタブ感を演出しました。
ドラッグアンドドロップについては以下の記事を参考にさせていただきました。
[WPFでListBoxアイテムのドラッグ＆ドロップを実装する。](http://posaune.hatenablog.com/entry/2012/12/07/220208 "亀岡的プログラマ日記")
[ListBoxのアイテムを半透明ゴーストつきドラッグアンドドロップで並べ替える](http://main.tinyjoker.net/Tech/CSharp/WPF/ListBox%A4%CE%A5%A2%A5%A4%A5%C6%A5%E0%A4%F2%C8%BE%C6%A9%CC%C0%A5%B4%A1%BC%A5%B9%A5%C8%A4%C4%A4%AD%A5%C9%A5%E9%A5%C3%A5%B0%A5%A2%A5%F3%A5%C9%A5%C9%A5%ED%A5%C3%A5%D7%A4%C7%CA%C2%A4%D9%C2%D8%A4%A8%A4%EB.html "tinyjoker.net")
![VTab2.gif](https://qiita-image-store.s3.amazonaws.com/0/60841/42bf0a0c-c5c2-7571-c475-df27557863cb.gif)

### 名称変更と通常タブのシート順変更に追従する
VSTOで提供されているオブジェクトモデル上ではシートの名称変更や並び順変更を検知するイベントが存在しません。
どうしたものかと悩んでいたところ[親切な先生](https://twitter.com/xin9le)がサクッとWindowMessageをハンドルするコードを書いてプレゼントしてくれたので助かりました。
~~感謝っ・・・・！圧倒的感謝っ・・・・！~~
AirSpace::Notification っていうのを引っ捕らえるといいらしいです。

## 公開は？
社内ではクリックワンスで配布しているのですが一般向けに配布するにはどういう手段をとればいいのかよくわかっていない為需要がありそうなら本腰入れて調べないとなぁと思っています。つまりバイナリは未公開です。
ビルドできる人はソースコードフォークしてもらえれば早いんですが…

## 締め
そんなこんなで今年も残りあと僅かとなりました。
1年間いろんな方にお世話になりました。ありがとうございました。
次の1年もまたよろしくお願いします。
皆様よいお年を。
アプリケーションが落ち着くまで待つAppleScriptハンドラ


* アプリケーションに重い処理をさせたときに使う


```applescript:waitWhileApplicationIsBusy.scpt
use scripting additions
use framework "Foundation"

my waitWhileApplicationIsBusy("Finder")

on waitWhileApplicationIsBusy(anApplication)
	tell application "System Events"
		set pid to unix id of my getProcess(anApplication)
	end tell
	repeat while character 1 of my doShellScript("ps -p " & pid & " -o state=") is in {"D", "R", "U"}
		delay 1
	end repeat
end waitWhileApplicationIsBusy

on getProcess(args)
	tell application "System Events"
		if class of args = application then
			return application process (name of args)
		else if class of args = application process then
			return args
		else
			return application process (args as text)
		end if
	end tell
end getProcess

on doShellScript(command as text)
	--require framework: Foundation
	set task to current application's NSTask's alloc()'s init()
	set task's launchPath to "/bin/sh"
	set task's arguments to {"-c", command}
	set outPipe to current application's NSPipe's pipe()
	set task's standardOutput to outPipe
	set errorPipe to current application's NSPipe's pipe()
	set task's standardError to errorPipe
	task's |launch|()
	set outData to outPipe's fileHandleForReading()'s readDataToEndOfFile()
	if outData = missing value or outData's |length|() as integer = 0 then
		set errorData to errorPipe's fileHandleForReading()'s readDataToEndOfFile()
		if errorData = missing value or errorData's |length|() as integer = 0 then
			error "0 以外の状況でコマンドが終了しました。" number 1
		else
			error (current application's NSString's alloc()'s initWithData:errorData encoding:(current application's NSUTF8StringEncoding)) as text number 1
		end if
	end if
	return (current application's NSString's alloc()'s initWithData:outData encoding:(current application's NSUTF8StringEncoding)) as text
end doShellScript
```


## 更新履歴

* 2011-11-27: Evernoteを対象に作成
* 2012-03-04: 任意のアプリケーションに対応
* 2013-10-29: CPUの計測から`ps -o state=`へ変更
* 2016-02-20: シェルコマンドの実行をObjective-Cに変更
MEANスタックのNとE

MEANスタックのNとE、Node.jsとExpressの構築をやっていきましょう。

# Node.jsとExpressのインストール

Node.jsをインストールして、この辺りを参考に0.12.xxにバージョンアップしました。
http://akiyoko.hatenablog.jp/entry/2015/06/20/132239

Expressはnpmで以下のコマンドを実行してインストールします。

```
npm install -g express
npm install -g express-generator
```

express-generatorは、アプリケーションの自動生成のライブラリですね。

# リポジトリの作成

Github上でリポジトリを作成します。

<img width="733" alt="Screen Shot 2015-12-28 at 15.06.51.png" src="https://qiita-image-store.s3.amazonaws.com/0/103661/b488a630-917a-cf0c-adce-8b1a873b90cc.png">

今回のプロジェクト名は __siamese__ です。
今回は.gitignoreにはNodeを、licenseにはMITを指定しました。

作成したリポジトリをローカルにcloneして準備完了。

先ほどcloneしたプロジェクトの __1階層上で__ 、以下のコマンドを実行します。

```
$ express -e siamese
destination is not empty, continue? [y/N] y
```

Expressプロジェクトに必要なファイルやディレクトリが自動で作成されました。

あとは以下のようにリポジトリの直下に移動して、npmで必要なパッケージをインストールすれば雛形の完成です。

```
$ cd siamese && npm install
```

では、早速起動してみましょう。以下のコマンドで起動して、 http://localhost:3000 にアクセスします。

```
$ npm start
```
MySQL5.7.9でGROUP BYがエラーになった件

## ■エラー内容

MySQL5.6ではエラーにならなかった以下のSQLが...

```
SELECT a.name, b.name
FROM a LEFT JOIN b ON a.id = b.id
GROUP BY a.id
```

MySQL5.7.9では以下のエラーとなりました。

```
Expression #n of SELECT list is not in GROUP BY 
clause and contains nonaggregated column 'dbname.b.name' 
which is not functionally dependent on columns in GROUP BY clause;
this is incompatible with sql_mode=only_full_group_by
```

## ■原因

そもそもこのSQLは誤っているのでエラーになるのが正しいようですが、
MySQL5.6では「only_full_group_by」が無効になっているらしくエラーになりませんでした。

MySQL5.7.9ではデフォルトで有効になっているようなので、エラーになったようです。

## ■許容するには

「only_full_group_by」を無効にすればOKそうです。
が、誤っているSQLもエラーにならないという罠に陥るので、
迂闊に無効にするのは危ない気がします。
設定大事。(今まで書いたSQL大丈夫か心配になってきました...)
オシロスコープ SDS7102 のスクリーンショットを撮る


SDS7102 のスクリーンショットを撮るには USB 経由で撮る方法(ハマるらしい)と、有線LANで撮る方法がある。

有線LANのIPを手動設定(デフォルトは192.168.1.72)で適当にセットする。自宅のネットワークは 192.168.24.0/24 なので、192.168.24.72 にセット。


![lan_setting.png](https://qiita-image-store.s3.amazonaws.com/0/5330/61bffd8d-5517-7194-434c-d872a7cdf900.png "lan_setting.png")

有線LANの設定をすると、 TCP の 3000 でサーバが立ち上がるので、適当に write & read する。のが面倒なので、よしなにやってくれるコマンドを cho45 先生が作ってくれてるので利用する。

- http://lowreal.net/2014/01/28/4
- https://github.com/cho45/owonosc

を clone して適当に owonosc コマンドが使える様に path を通す。内部で convert と optipng を叩いてるので、brew で入れておく。

```
$ brew install optipng imagemagick
```

owonosc のソース読んでたら ~/.owonoscrc に設定が書けるよう。

```ruby
  def load_rc
    rc = Pathname("~/.#{File.basename(__FILE__)}rc").expand_path
    @logger.debug "rc file: #{rc}"
    if rc.exist?
      binding.eval(rc.read, rc.to_s)
    end
    self
  end
```

スバラシス。というわけで ~/.owonoscrc に

```
@opts[:host] = '192.168.24.72'                                                                                            
```

を書いておく。これで

```
$ owonosc foobar.png
```

で簡単にオシロスコープのスクリーンショットをとれる様になった！！cho45 様々ですナ…。

![pwm.png](https://qiita-image-store.s3.amazonaws.com/0/5330/50f6a943-6a3b-fb82-e0de-58731a7fdd5b.png "pwm.png")

なお、時々撮影に失敗する(tcp の readpartial で刺さる)けど、やり直すとだいたいうまくいく。
IntelliJ で Go ファイル保存時に整形する

いままでは IntelliJ の external tool として goimports を設定して、ファイル保存時に goimports を実行するマクロを作って、ファイル保存キーマップを置き換える方法で実現してた。ただ、新しい pc に変えたときとか IntelliJ アップデートした場合とかに再設定するのが面倒で、もっと簡単な方法ないかなーと思ったら File Watchers ってプラグインが良かった。

2017/11 追記: 本記事では IntelliJ を対象としていますが、Gogland や GoLand でも同じ方法で OK です。今だったら goimports より [goreturns](https://github.com/sqs/goreturns) がオススメかな。

---

プラグインをインストールして、

![install plugin](https://qiita-image-store.s3.amazonaws.com/0/19335/dbc4b3f9-dbf2-b5c4-3336-27be75b6dd52.png)

Custom テンプレートで新しい設定項目開いて、

![new config](https://qiita-image-store.s3.amazonaws.com/0/19335/b3d4991b-a046-ea8c-6dfd-4d8e31cfd30b.png)

goimports のパスをこんな感じに設定（追記: `Immediate file synchronization`は無効のほうが良い）して、

![edit config](https://qiita-image-store.s3.amazonaws.com/0/19335/6678e41a-6ffa-16cb-fc47-6155e4804bb7.png)

Apply するだけ。

![run apply](https://qiita-image-store.s3.amazonaws.com/0/19335/dfd66806-5835-1cd6-9044-e76f2de3f531.png)

---

簡単に設定できるし Go ファイルだけに適用されるのでオススメ。結構有名なプラグインっぽいけど初めて知ったので忘却メモとして書いてみた。他の外部ツールを実行する際にも使えそう。あと `Immediate file synchronization` オプションを有効にするとファイルの変更を検知したタイミングで自動整形されるけど、カーソルがズレて面倒だから無効にして保存時のみにしたほうが良かった。

元ネタ: 
http://marcesher.com/2014/03/30/intellij-idea-run-goimports-on-file-save/
http://jen20.com/2015/09/14/gofmt-or-goimports-in-intellij.html
petalinux / microzed > H. POSIX message queueの使用設定 / 注意点

自分の過去のメモより

デフォルトではPOSIX message queueは使用不可となっている。
以下の手順で使用可能にできる。

``` 
$ petalinux-config -c kernel
```
General setupを選択
上から9個目あたりの "POSIX Message Queues"のチェックを入れる
  
これを行うと

```
CONFIG_POSIX_MQUEUE=y
CONFIG_POSIX_MQUEUE_SYSCTL=y
```

と設定される
Saveを選択して保存すると
subsystems/linux/configs/kernel/config
に変更したconfigファイルが作成される
 
<注意点>
初期値ではPOSIX message queueの最大メッセージ数は10となっている。 最大メッセージ数を増やすには /proc/sys/fs/mqueue/msg_max をroot権限で書き換える必要がある。
petalinux / microzed > G. RTOSのMailBoxについて

自分の過去のメモより

linuxでMailBox機能を探したが同等機能はPOSIX message queueで実現できそう。
PetaLinuxにてPOSIX message queueを利用するには、カーネル設定を変更し、CONFIG_POSIX_MQUEUEを利用できるようにする。
msgget()などのSystemV message queueも利用可能だが、POSIX message queueの方が扱いやすいかもしれない。
petalinux / microzed > F. microSDのmount

自分の過去のメモより

ビルドしたPetaLinuxにて、以下のコマンドでmicroSDをマウントできた。

```bash
$ mkdir /media/card
$ mount /dev/mmcblk0p1 /media/card
```

/etc/fstabに上記に関するコメントが記載されている。
gitのセットアップ

## 書く動機
[Rails チュートリアル](http://railstutorial.jp/chapters/beginning?version=4.2#book_menu)で学んだことを覚えるために書く。

## 初めてのシステムセットアップ。最初に1回だけやる設定。

```command:command
$ git config --global user.name "Your Name"
$ git config --global user.email your.email@example.com
$ git config --global push.default matching
$ git config --global alias.co checkout

```

1行目、2行目の設定内容はリポジトリ上で一般に公開される。
3行目は前方互換性のために入れる設定。
4行目は`checkout`コマンドを`co`とするためのエイリアス設定。




##リポジトリセットアップ
ルートディレクトリ移動して、新しいリポジトリのセットアップをする。

```cmd:command
$ git init
Initialized empty Git repository in /home/ubuntu/workspace/sample/.git/
```

次に、プロジェクトのファイルをリポジトリに追加する。.gitignoreファイルに記載されているパターンにマッチするファイル以外のすべてのファイルが、リポジトリに追加される。

```cmd:command
$ git add -A
```

gitはいきなりコミットせずにステージングエリアという待機用リポジトリに置かれ、コミットを待つ。ステージングエリアの状態は、statusコマンドを使用する。

```cmd:command
$ git status
On branch master

Initial commit

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

        new file:   .gitignore
        new file:   Gemfile
        new file:   Gemfile.lock
        new file:   README.rdoc
        new file:   Rakefile
・・・その他たくさんのファイル名
```

ステージングエリアで控えている変更を本格的にリポジトリにコミットするには、commitコマンドを使用する。-mフラグでコミットメッセージを入力する。

```
$ git commit -m "Initialize repository"
[master (root-commit) 5a58185] Initialize repository
 59 files changed, 1080 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 Gemfile
 create mode 100644 Gemfile.lock
 create mode 100644 README.rdoc
・・・その他たくさんのファイル名
```
petalinux / microzed > E. アプリの自動実行を解除する方法

自分の過去のメモより

http://qiita.com/7of9/items/94795ed1bb4ff883dbd0
で自動実行にしたものを自動実行解除する方法


1. <project-root>/components/apps/<APP>/のMakefileを元に戻す
2. 以下を実行する。
`$ petalinux-build -x distclean`

3. 以下を実行する
`$ petalinux-build`
4. ビルドしたファイルをもとにBOOT.binの再作成などを行うと自動実行が解除されるようになる。
     
    上記の2からの処理については、以下でも良いようだ。こちらの方がビルド時間を短縮できる。

```bash
$ petalinux-build -c rootfs -x distclean
$ petalinux-build -c rootfs
$ petalinux-build -x package
```
[Android] MultiDex でのビルド速度向上に効果があったこと３つ


[こちらの投稿](http://qiita.com/hkusu/items/962929e763f6723e174b#%E3%81%BB%E3%81%8Bmultidex-%E5%AF%BE%E5%BF%9C)のようにプロジェクトを MultiDex にしたのですが、ビルドがすごく遅くなってしまいました。下記のことを実施することで(環境によると思いますが)自分の場合は２分近くかかってたものが１分ぐらいになりました(まだまだ遅いですが..)

## 1. Gradle のバージョンを上げた

もともと `2.2.1` だったものを `2.8` にしました。

```:gradle-wrapper.properties
...

distributionUrl=https\://services.gradle.org/distributions/gradle-2.8-all.zip
```

こちらは効果あるか分かりませんが、ついでにプラグインのバージョンも最新にすると良いかも。

```:build.gradle
buildscript {
...

    dependencies {
        classpath 'com.android.tools.build:gradle:1.3.0'
    }

...
```

## 2. MulitDex に関するオプションを指定した

```:build.gradle
android {
...

    dexOptions {
        preDexLibraries false
        javaMaxHeapSize "2g" // ヒープの最大を 2GB にする
    }

...
}
```

## 3. オフラインでビルドするようにした

MulitDex とは直接関係ありませんが。

![スクリーンショット_2015-12-28_14_57_15.png](https://qiita-image-store.s3.amazonaws.com/0/35733/5ab50284-4a42-ade7-e5aa-46d1fbeed8d7.png "スクリーンショット_2015-12-28_14_57_15.png")

以上
[Common Lisp]Quicklispにまだ登録されていないライブラリを取ってくるライブラリを書いてみた


## はじめに

最近、Common Lispに再再再入門ぐらいをしてみたので、試しにライブラリを書いてみました。

## 動機

Common Lispではライブラリの管理にQuicklispを使うのが一般的みたいだが、Quicklispは１カ月に１度しか更新されないらしいので、使ってみたいライブラリがGitHubにあっても簡単に使えないことがある。
そこで、GitHubから直接ライブラリを取ってくるようにしてみた。

# Stein（読み：シュタイン）

## インストール

インストールの仕方は、まずshell上で

```bash:shell
$ cd ~/quicklisp/local-projects
$ git clone https://github.com/JunSuzukiJapan/stein.git
```

として、GitHubのレボリドリを取ってきます。
次に、Lisp(sbclあるいはccl）のreplで

```lisp:lisp
(require :quicklisp)
(ql:register-local-projects)
(ql:quickload :stein)
```

とすればオッケーです。

## 使い方

例えば、[t-sinさんのinquisitor](https://github.com/t-sin/inquisitor)をダウンロードするには、

```lisp:lisp
(stn:quickload "https://github.com/t-sin/inquisitor.git")
```

という風にします。

## 補足

GitHubからダルンロードした元ファイルは、~/quicllisp/local-projects/フォルダにあります。

また、Steinの動作は

- git clone {project url}
- cd ~/quicklisp/local-projects/
- (ql:register-local-projects)
- (ql:quickload {project名})
- cd 元のディレクトリ

という動作をしているだけです。
まあ、勉強がてら書いてみたのでこんなものですね。
Pythonからmecab-ipadic-neologdを使う


# やりたいこと
- 形態素解析にMeCabを使う
	- http://mecab.googlecode.com/svn/trunk/mecab/doc/index.html

- 新語辞書を使う
	- https://github.com/neologd/mecab-ipadic-neologd/
- Pythonスクリプト内で他のモジュールと組み合わせて使う

# 環境
- OSX 10.10.5
- Conda 3.19.0
- Python 2.7.11 
- MeCab 0.996

# Python 2.7
[Conda](http://conda.pydata.org/docs/install/quick.html#os-x-miniconda-install)を使う。

```
$ conda create -n py27con python=2.7 anaconda
$ conda info -e
$ source ~/.pyenv/versions/miniconda3-3.16.0/envs/py27con/bin/activate py27con
```


# mecab-ipadic
あとでmecab-ipadic-neologdを使うのでUTF-8で入れる

```
$ cd ~/path/to/mecab-ipadic-2.7.0-20070801/
$ make clean
$ ./configure --with-charset=utf8
$ make
$ make install
```

# mecab-ipadic-neologd


```
$ cd ~/path/to/mecab-ipadic-neologd/
$ bin/install-mecab-ipadic-neologd 
```

# mecab-python

MeCabのPythonバインディング

```
$ pip install https://mecab.googlecode.com/files/mecab-python-0.996.tar.gz
```

# 動作確認

```python:test.py
# -*- coding: utf-8 -*-
import MeCab
m = MeCab.Tagger(' -d /usr/local/lib/mecab/dic/mecab-ipadic-neologd')

text = '''
『アイドルマスター シンデレラガールズ』（THE IDOLM@STER CINDERELLA GIRLS）は、バンダイナムコエンターテインメント（旧バンダイナムコゲームス）とCygamesが開発・運営する『THE IDOLM@STER』の世界観をモチーフとする携帯端末専用のソーシャルゲーム。
'''
print(m.parse(text))

```

文章は[Wikipedia](https://ja.wikipedia.org/wiki/%E3%82%A2%E3%82%A4%E3%83%89%E3%83%AB%E3%83%9E%E3%82%B9%E3%82%BF%E3%83%BC_%E3%82%B7%E3%83%B3%E3%83%87%E3%83%AC%E3%83%A9%E3%82%AC%E3%83%BC%E3%83%AB%E3%82%BA)より。

```
$ python test.py
『	記号,括弧開,*,*,*,*,『,『,『
アイドルマスター シンデレラガールズ	名詞,固有名詞,一般,*,*,*,アイドルマスターシンデレラガールズ,アイドルマスターシンデレラガールズ,アイドルマスターシンデレラガールズ
』	記号,括弧閉,*,*,*,*,』,』,』
（	記号,括弧開,*,*,*,*,（,（,（
THE IDOLM@STER CINDERELLA GIRLS	名詞,固有名詞,一般,*,*,*,THE IDOLM@STER CINDERELLA GIRLS,アイドルマスターシンデレラガールズ,アイドルマスターシンデレラガールズ
）	記号,括弧閉,*,*,*,*,）,）,）
は	助詞,係助詞,*,*,*,*,は,ハ,ワ
、	記号,読点,*,*,*,*,、,、,、
バンダイナムコエンターテインメント	名詞,固有名詞,一般,*,*,*,バンダイナムコエンターテインメント,バンダイナムコエンターテインメント,バンダイナムコエンターテインメント
（	記号,括弧開,*,*,*,*,（,（,（
旧	接頭詞,名詞接続,*,*,*,*,旧,キュウ,キュー
バンダイナムコゲームス	名詞,固有名詞,一般,*,*,*,BANDAI NAMCO Games,バンダイナムコゲームス,バンダイナムコゲームス
）	記号,括弧閉,*,*,*,*,）,）,）
と	助詞,並立助詞,*,*,*,*,と,ト,ト
Cygames	名詞,固有名詞,一般,*,*,*,Cygames,サイゲームス,サイゲームス
が	助詞,格助詞,一般,*,*,*,が,ガ,ガ
開発	名詞,サ変接続,*,*,*,*,開発,カイハツ,カイハツ
・	記号,一般,*,*,*,*,・,・,・
運営	名詞,サ変接続,*,*,*,*,運営,ウンエイ,ウンエイ
する	動詞,自立,*,*,サ変・スル,基本形,する,スル,スル
『	記号,括弧開,*,*,*,*,『,『,『
THE IDOLM@STER	名詞,固有名詞,一般,*,*,*,THE IDOLM@STER,アイドルマスター,アイドルマスター
』	記号,括弧閉,*,*,*,*,』,』,』
の	助詞,連体化,*,*,*,*,の,ノ,ノ
世界観	名詞,固有名詞,一般,*,*,*,世界観,セカイカン,セカイカン
を	助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
モチーフ	名詞,一般,*,*,*,*,モチーフ,モチーフ,モチーフ
と	助詞,格助詞,一般,*,*,*,と,ト,ト
する	動詞,自立,*,*,サ変・スル,基本形,する,スル,スル
携帯端末	名詞,固有名詞,一般,*,*,*,携帯端末,ケイタイタンマツ,ケイタイタンマツ
専用	名詞,サ変接続,*,*,*,*,専用,センヨウ,センヨー
の	助詞,連体化,*,*,*,*,の,ノ,ノ
ソーシャルゲーム	名詞,固有名詞,一般,*,*,*,ソーシャルゲーム,ソーシャルゲーム,ソーシャルゲーム
。	記号,句点,*,*,*,*,。,。,。
EOS

```

ちなみに、` -d /usr/local/lib/mecab/dic/mecab-ipadic-neologd`を抜かして違いを見ると、新語辞書がいい感じに仕事してくれているのがよくわかる（主に固有名詞）。

# 保留したところ
頻発問題のリスト:

- 出力が化ける
	- ちゃんとUTF-8の辞書を使えばいいだけかも
- Conda PythonとSystem Pythonの何らかの差異・コンフリクト
	- 例：pythonを`source activate`する際にシェルが落ちる
		- これは、`activate`のパスをちゃんと指定すればよい
- 入手したPythonバインディングのセットアップスクリプトやサンプルスクリプトをPython 3.5に対応させる作業
- バインディング自体をSWIGで3.5対応させる作業
- それでもなおUnicode関連のエラーが出る

できれば3.5でやりたかったけどいろいろハマって脱出できなかったのでとりあえず2.7でやった。
よく使うunixコマンド

よく使うコマンドをまとめた。

| コマンド | 例 | 説明 |
|:----------------------|:---------------------|:------------|
| `ls`                  |`$ ls -l`　         　|ディレクトリ内容の表示 |
| `mkdir <ディレクトリ名>`|`$ mkdir sample`|ディレクトリの作成|
| `cd <ディレクトリ名>`   |`$ cd sample/`| ディレクトリの移動 |
|          |`$ cd ..`　 | 上のディレクトリに移動|
| `mv <移動元/現在の名前> <移動先/変更後の名前>` | `$ mv README.rdoc README.md` |    ファイルの移動やリネーム|
| `cp <コピー元> <コピー先>`|`$ cp README.rdoc README.md`|ファイルのコピー|
| `rm <ファイル名>`|`$ rm README.rdoc`|ファイルの削除	|
| `touch <ファイル名>`|`$ touch README.rdoc`|空のファイルの作成|
Meanスタック事始め


Webアプリケーションの言語、ミドルウェア、フレームワークなどは多種多様ですよね。

僕自身、今まで色々な言語、ミドルウェア、フレームワークに手を出している雑食系男子なわけですが、最近は自分の中でのデファクトスタンダードを決めたいという気持ちが芽生えてきました。

小さな管理ツールやWebサービスを立ち上げるときは、技術の選定において特に開発効率が重視されますが、開発効率の高い技術を選定することに時間をかけてしまうのも悲しいですよね。

「これを使っておけば100点ではなくても70点以上のスコアは取れるだろう」といえる構成を、引き出しの1つとして持っておきたいのです。

かつてはLAMPというものがありましたが、現在ではMEANスタックがいい感じ。

Meanスタックとは、Node.js、Express、MongoDB、AngularJSを使用したアプリケーションの構成のことです。

詳しくはこちら
http://www.ibm.com/developerworks/jp/web/library/wa-nodejs-polling-app/

ナレッジをしっかりpushしておいて、いつでもpopできるようにしておきましょう。あ、スタックだけにね。
gitの ブランチ (branch)

## 書く動機
[Rails チュートリアル](http://railstutorial.jp/chapters/beginning?version=4.2#book_menu)で学んだことを覚えるために書く。

##ブランチ `git checkout -b <トピックブランチ名>`
親リポジトリはをmasterブランチと呼ばれる。トピックブランチ (一時的なブランチ) はcheckoutと-bフラグを使って作成できる。

```command:command
$ git checkout -b TOPIC-BRANCH
Switched to a new branch 'TOPIC-BRANCH'

```


##すべてのブランチを参照する `git branch`
`git branch`ですべてのローカルブランチが参照でき、頭に`*`があるのが、今使っているブランチ。

```command:command
$ git branch
  master
* TOPIC-BRANCH
```
gitを使ってbitbucketへアップロードするための初期設定

## 書く動機
[Rails チュートリアル](http://railstutorial.jp/chapters/beginning?version=4.2#book_menu)で学んだことを覚えるために書く。

##前提
IDEはcloud9を使用したが、手順はcloud9でなくても同じだと思う。

##公開鍵の設定
1. catコマンドで公開鍵を表示する
2. catコマンドで表示した公開鍵をコピーして、bitbucketのサイトでSSH Keysに追加する

```cat:command
$ cat ~/.ssh/id_rsa.pub
```


##bitbucketのサイトからリポジトリを追加する。
「アクセスレベル」にある「これは非公開リポジトリです」にチェックを入れておくと非公開にできるので便利。

##gitの情報をbitbucketへアップロード
gitの情報をoriginとしてbitbucketへアップロードする。`<username>`は適宜変更する。

```git:command
$ git remote add origin git@bitbucket.org:<username>/XXXXX.git
$ git push -u origin --all
```
[Unity] 一定の時間間隔で処理を実行する方法まとめ（時間制御）


いわゆる、タイマの張り方。

## Time.deltaTimeを使う方法

[Time.deltaTime](http://docs.unity3d.com/ScriptReference/Time-deltaTime.html)には、最後のフレームからの経過時間[ms]が格納されています。
つまり前回のUpdate()からの経過時間がとれます。

Update()が実行されるたびに経過時間を積み上げていき、指定した時間を超えたら望みの処理を実行するようにします。


```c#
// timeOut[ms]毎に処理を実行する
public class ExampleClass : MonoBehaviour {
	public float timeOut;
	private float timeElapsed;

	void Update() {
        timeElapsed += Time.deltaTime;
        
        if(timeElapsed >= timeOut) {
        	// Do anything
        	
        	timeElapsed = 0.0f;
        }
    }
}

```


またdeltaTimeは、 **FixedUpdate()** 内で取得すると前回のFixedUpdate()実行からの経過時間が取得できます。



## Time.timeを使う方法

[Time.time](http://docs.unity3d.com/ScriptReference/Time-time.html)にはアプリケーション起動からの経過時間[ms]が格納されています。
Time.time + タイムアウト時間 をトリガーに処理を実行することでタイマーを実現します。


```c#
// timeOut[ms]毎に処理を実行する
public class ExampleClass : MonoBehaviour {
	public float timeOut;
	private float timeTrigger;

	void Update() {
		if(time.Time > timeTrigger) {
			// Do anything
			
			timeTrigger = Time.time + timeOut;
		}
	}
}
```

ただ特に理由がなければdeltaTimeを使えば良いです。
使いどころとして思いつくのは、Update()やFixedUpdate()の更新タイミングとは違う処理時間でタイマ張りたい場合。。（あるのかな？）




## StartCoroutine() + WaitForSeconds()を使う方法

[StartCoroutine関数](http://docs.unity3d.com/ja/current/ScriptReference/MonoBehaviour.StartCoroutine.html)を使うことで似非マルチスレッドっぽい動作が可能です。
並列実行させたい関数（例：下のFuncCoroutine関数）を作り、StartCoroutine関数に参照を渡すと並列実行されます。
その呼び出し先に無限ループ＆waitを入れることで、一定間隔の繰り返し処理が実現できます。
StartCoroutine()自体は実行後すぐに返ってきますので、呼び出し先の処理が重くなりそうな場合にボトルネック化を防げます。


```c#
// timeOut[ms]毎に処理を実行する
public class ExampleClass : MonoBehaviour {
	public float timeOut;

	void Start() {
		StartCoroutine( FuncCoroutine() );
	}
	
	IEnumerator FuncCoroutine() {
		while(true){
			// Do anything
			
			yield return new WaitForSeconds(timeOut);
		}
	}
}
```

呼び出し先の関数は返戻値がIEnumarator型でなければいけないのですが、yieldとともに使える待ち時間作成関数WaitForSeconds()がありますので、これを使いましょう。
Window Message > difference > SendMessage() / PostMessage() > 同期、非同期の違い

Window Message関連を調べていて、参考になるページを見つけた。

http://d.hatena.ne.jp/tekk/20091016/1255711526

処理の同期、非同期で二者を使い分けるとのこと。

関連する[SO](http://stackoverflow.com/questions/3376619/what-is-the-difference-between-send-message-and-post-message-and-how-these-relat)
Nokogiriでスクレイピングするときの注意点　（Ruby on Rails 備忘録１）

# はじめに
facebookで投稿するときにurlを貼り付けると、自動的に写真や記事のタイトルがカードになって表示されるのが素敵で、どうやっているのか気になって調べてみました。
忘れそうなので書いておきます。

##環境
`rails 4.2.4`
`ruby 2.0.0`

##OGP（Open Graph Protocol）
サイトの紹介に使用する簡単な説明や画像をhtmlに記すためのルール。
htmlのmetaタグに書かれた情報を元に、写真や記事タイトルを取得してカードで表示しているそうです。
[The Open Graph protocol](http://ogp.me/)や[facebook for developers](https://developers.facebook.com/docs/sharing/opengraph)が詳しいです。

ただ、全てのサイトがOGPで書かれた情報があるわけではないので、例えばサイトのタイトルであれば、titleタグで取得するなどしたほうがよさそう。

##Nokogiri
Railsで、リンク先のHTML解析などをやるにはこれがいいらしい。

## Nokogiriとopen-uriをインストール

```lang:gemfile
gem 'nokogiri'
gem 'open-uri'
```

`$ bundle install`

##NokogiriでHTMLを読み込む

```rb


require 'nokogiri'
require 'open-uri'

url = 'http://www.perfume-web.jp'

charset = nil
html = open(url) do |f|
  charset = f.charset # 文字種別を取得
  f.read # htmlを読み込んで変数htmlに渡す
end

# ノコギリを使ってhtmlを解析
doc = Nokogiri::HTML.parse(html, charset)
 
```

##解析した中から欲しい情報をピックアップする
`doc.css(@@@)`で、@@@はCSSセレクタで要素を指定してればよいみたい。
今回のように`content`属性を取りたい場合は`/@content`をセレクタの後ろにしていすればよいようです。

##サイトのタイトル
```rb

# site title
if doc.css('//meta[property="og:site_name"]/@content').empty?
  p doc.title.to_s
else
  p doc.css('//meta[property="og:site_name"]/@content').to_s
end
```

##サイトのdescription
```rb

# description
if doc.css('//meta[property="og:description"]/@content').empty?
  p doc.css('//meta[name$="escription"]/@content').to_s
else
  p doc.css('//meta[property="og:description"]/@content').to_s
end
```

##サイトのイメージ
```rb

# image
p doc.css('//meta[property="og:image"]/@content').to_s
```

##結果
```
"Perfume Official Site"
"所属事務所アミューズによるPerfumeオフィシャルサイト"
"http://www.perfume-web.jp/img/og.png"
```

##参考にしたページ
Nokogiriのこと
http://morizyun.github.io/blog/ruby-nokogiri-scraping-tutorial/

meta要素のこと
https://reference.hyper-text.org/html5/element/meta/

CSSセレクタ
http://zero.css-happylife.com/selectors/
Rails5 で追加されてる active_support/core_ext のメソッドを眺めてみた

ActionCable とか、RailsAPI とか、そこらへんの目玉はいろんな人が紹介してくれていますが、
ActiveSupport の core_ext で Rails 5 から追加されたメソッドを調べてみました。
rails のリポジトリを clone してきて、以下のコマンドでみているので、Rails 5 beta に含まれていないものもあるかもしれません。

```git
git diff origin/4-2-stable origin/master activesupport/lib/active_support/core_ext
```

# Array#without

Enumerable#without というのもあって、それの Array 版。
reject に近いですが、reject よりも速いみたいです。

```rb
users = ['yamada', 'tanaka', 'sato']
#=> ["yamada", "tanaka", "sato"]
users.without('yamada')
#=> ["tanaka", "sato"]
```

# Array#inquiry

配列のインスタンスに `#inquiry?` とすると、`#any?` と、`String#inquiry` みたいに `hoge?` な感じのことを Array でも使えるようになります。

```rb
users = ['yamada', 'tanaka', 'sato'].inquiry
#=> ["yamada", "tanaka", "sato"]
users.any?('sato')
#=> true
users.any?('sato', 'suzuki')
#=> true
users.any?('suzuki', 'kimura')
#=> false

users.tanaka?
#=> true
users.suzuki?
#=> false
```

# Numeric#positive?, negative?

数字が正数か負数かを判断するメソッドです。

```rb
number = -1
number.negative?
#=> true

number = 1
number.positive?
#=> true
```

# Enumerable#pluck

AR の pluck を Enumerable でも使えるようになります。

```rb
users = [{name: 'yamada'}, {name: 'tanaka'}, {name: 'sato'}]
#=> [{:name=>"yamada"}, {:name=>"tanaka"}, {:name=>"sato"}]
users.pluck(:name)
#=> ["yamada", "tanaka", "sato"]
```

# Date#prev_day, next_day

yesterday, tommorow と同じ。

```rb
time = Time.new
#=> 2015-12-29 17:00:22 +0900
time.next_day
#=> 2015-12-30 17:00:22 +0900
time.prev_day
#=> 2015-12-28 17:00:22 +0900
```

# Date(Time)#next_weekday, prev_weekday, on_weekend?

次の平日とか、前の平日とか、週末かどうかとかが取れるようになりました。

# Time#days_in_year

指定した年が何日あるかが取れるようになりました。

```rb
Time.days_in_year(2016)
#=> 366

# 指定しない場合は current.year になる
Time.days_in_year
#=> 365
```

# thread_mattr_reader, thread_mattr_writer, thread_mattr_accessor

Changelog にサンプルが載っていましたが、Thread に属性を設定できるようになるようです。
以下、Changelog のサンプル

```rb
module Current
  thread_mattr_accessor :account
  thread_mattr_accessor :user
  
  def self.reset()
    self.account = self.user = nil 
  end
end

class ApplicationController < ApplicationRecord
  before_action :set_current 
  after_action { Current.reset }

  private
  
  def set_current 
    Current.account = Account.find(params[:account_id]) 
    Current.user = Current.account.users.find(params[:user_id])
  end
end

class MessagesController < ApplicationController 
  def create 
    @message = Message.create!(message_params)
  end
end

class Message < ActiveRecord::Base
  has_many :events 
  after_create :track_created

  private 

  def track_created 
    events.create! origin: self, action: :create
  end
end

class Event < ApplicationRecord
  belongs_to :creator, class_name: 'User' 
  before_validation { self.creator ||= Current.user }
end
```

## 参考

https://github.com/rails/rails/blob/v5.0.0.beta1/activesupport/CHANGELOG.md
BEMでmodifierを作る時に便利な&の変数化パターン

# 上位のmodifierから下位のelementを上書くときに名前を省略したい

※この記事はSCSSでBEMスタイルのコーディングをすることを前提としている。

最近のSassでは、&をクラス名に使うとコンパイル後にセレクタを外出ししてくれる便利な機能がある。

```sample.scss
// blockクラス
.my-class {
  // デフォルトのスタイル
  &__body {
    // 本文elementのスタイル
  }

  // 強調アレンジの為のmodifierクラス
  &--emphasis {
    // ここにelement上書きのスタイルを実装(※)
  }
}
```

ここで(※)の部分に注目する。

modifierの内側でも`&__body`の型でelementを指定したくなるが、この部分で`&`を使うとイメージとは異なる結果になってしまう。

```sample.scss
.my-class {
  // デフォルトのスタイル
  &__body {
    // 本文スタイル
  }

  // 強調アレンジの為のmodifier
  &--emphasis {
    &__body {
      // .my-class--emphasis .my-class__body というルールにしたい(☆)
    }
  }
}
```

上記をコンパイルすると、「☆」部分のセレクタは、

`.my-class--emphasis .my-class__body`ではなく
`.my-class--emphasis__body`

となってしまい、思った通りにならない。
(そういう仕様だから当たり前なんだけど)

### block名直書きは恰好悪い…

直にblock名を書いてもよいが、せっかく他では`&`を使っているのになんか気持ち悪い。

```sample.scss
.my-class {
  // デフォルトのスタイル
  &__body {
    // 本文スタイル
  }

  // 強調アレンジの為のmodifier
  &--emphasis {
    .my-class__body {
      // せっかく&で省略できたのに恰好悪い
    }
  }
}
```

## block直下で`&`を変数に格納して解決

そこで、適当な変数に`&`を格納すると上手くいく。クラス名として使うにはインターポレーションが必要になる。

```sample.scss
.my-class {
  // $thisに".my-class"を格納する
  $this: &;

  // デフォルトのスタイル
  &__body {
    // 本文スタイル
  }

  // 強調アレンジの為のmodifier
  &--emphasis {
    #{$this}__body {
      // 本文の上書き
    }
  }
}
```

変数名は`$this`・`$and`・`$self`など気にいったものを使えば良い。筆者はなんとなくJSっぽくなるので`$this`を使っている。プロジェクト全体で名前を統一し、必ずBlockクラスの直下で定義するようにした方が良いだろう。
Windowsのgitでerror setting certificate verify locationsが出た場合

git cloneができなくなった。

``` powershell
fatal: unable to access 'https://xxx.git/': error setting certificate verify locations:
  CAfile: C:/Program Files/Git/mingw64/ssl/certs/ca-bundle.crt
  CApath: none
```

`C:/Program Files/Git/mingw64/ssl/certs/ca-bundle.crt`は存在しない

http://curl.haxx.se/docs/caextract.html から`cacert.pem`をダウンロード

`~/.ssh/cacert.pem`とか適当な場所へ置く

``` config:~/.gitconfig
[http]
	sslcainfo = C:/Users/shwld/.ssh/cacert.pem
```

こんな感じのを.gitconfigに足すと

できるようになった
入門 - Tableau が見せるデータビジュアル化の世界とは？

#まとめると・・・
・Tableau は、データビジュアル化ツール
・SaaS 版「Tableau Online」が提供されている
・大規模で使うと、コスト/可用性/拡張性/セキュリティ面で十分な検討や設計が必要かも

#スターウォーズで一番長セリフだったのは？
　こちらは、Tableau Public の 'Viz of the Day' で公開されたデータビジュアル化の一つです。世の中にはこんなものまで分析している人がいるんですね。
![image](https://qiita-image-store.s3.amazonaws.com/0/106773/5d45a045-acc2-3e0f-bf01-89a723ddf71d.png)

#Tableau ってなに？
　Tableau Software は、スタンフォード大学から2003年にスピンアウトした会社で、本社はワシントン州シアトルにあります。Tableau Software のミッション「お客様がデータを見て理解できるように支援すること」に基づき、簡単に情報を分析してビジュアル化し、共有することを可能にするデータビジュアル化ツールです。
![image](https://qiita-image-store.s3.amazonaws.com/0/106773/2e8ad8bd-2be0-2d83-b292-1c65daeb1c3d.png)

#Tableau Public とは？
　世界中の Tableau ユーザがオープンデータを使用して作成した様々なレポートを無料でブラウザで閲覧することができます。'Viz of the Day'というサイトでは、世界中のTableau ユーザが作成したダッシュボードの中から、優れたダッシュボードが紹介されています。言ってみれば、Tableau Public は、Tableau ユーザがデータビジュアル化のテクニックを競う場となっています。
![image](https://qiita-image-store.s3.amazonaws.com/0/106773/c9b292f9-e40a-e48a-51a4-24882c594de2.png)

# Tableau Online とは？
　Tableau Server のホスティング型 SaaS 版サービスで、高速なビジネスインテリジェンスの導入を容易に行えます。Tableau Desktop で作成したダッシュボードを Tableau Online で公開するだけで、同僚、パートナー、顧客と簡単にインサイトを共有できます。

# Tableau で実装した場合のコストはいくらぐらいかかるのか？
　例えば、Tableau を20人の部署で3カ年、インターネット公開して活用する場合のライセンス価格を試算したところ、\13,680,000-.(税抜)となりました。利用するライセンスは、Tableau Desktop Professional Edition(*1)×20人、Tableau Server(*2)×20人、Tableau Online(*3)×20人として見積もりました。ただしこれらは定価であるため、実際には値引きが適用されるものと推察されます。
*1：240千円/人 + 2年目以降、年間保守料48千円/人
DB接続不要の場合、Personal Edition(12万円/人)も有り
*2：120千円/人+2年目以降、年間保守料24千円/人
最低利用人数は10人
*3：1ユーザーあたり、6万円/年

#Tableau に制限はあるのか？
　Tableau Public では、1つのデータソースから100万レコードまで、保存できるサイズは1GBまでとなっています。Premium サービスのようなものがありそうなので、別途、調査する必要はありそうです。

# リファレンス
http://www.tableau.com/
https://public.tableau.com/s/
http://www.graffe.jp/blog/835/
http://sios.jp/bigdata/tableau/price.html
http://get.tableau.com/ja-jp/trial/tableau-9-1.html
http://kb.tableau.com/articles/knowledgebase/data-requirements-and-limitations?lang=en-us

#ディスクレーマー
　Tipsに記載された内容は、情報の提供のみを目的としています。したがって、本Tipsに用いた内容は、必ず読者ご自身の責任と判断によってご利用ください。Tipsの活用の結果について、Tips作成者はいかなる責任も負いません。本Tipsは Tableau 社の製品サポートとは無関係ですので、本Tipsを元に Tableau 社サポートに問い合わせることはご遠慮ください。なお、本Tipsにおいて示されている見解は、Tips作成者の見解であって、Tableau 社の見解を必ずしも反映したものではありませんのでご了承ください。本Tips記載の情報は、2015 年 12 月 28 日時点のものを掲載していますので、ご利用時には、変更されている場合もあります。
PHP namespace ネームスペースについてのメモ

naemspaceについてのメモ
参照：http://kudox.jp/php/namespace

恥ずかしながら
>名前空間を定義するには、namespaceキーワードを使用して名前空間を宣言します。名前空間の影響を受けるのは、クラス、インターフェイス、関数、constで定義された定数です。変数やdefine()関数で定義された定数は影響を受けません。

を知らなかった。

```sample.php
<?php
namespace Test;
class Directory
{
  public function __construct()
  {
    echo 'Test1\Directory', PHP_EOL;
  }
}



namespace Test2;
class Directory
{
  public function __construct()
  {
    echo 'Test2\Directory', PHP_EOL;
  }
}




namespace Test;
$direcotry = new DIrectory();


namespace Test2;
$direcotry = new DIrectory();

?>
```

[Paiza.io サンプルコード](https://paiza.io/projects/e/nqQU0bAKn8wNilgnG8AzBA?theme=twilight)

同じclassをnewしてるが、namespaceによって参照されるclassが異なります。


----

追記です。
namespace Test1,Test2を
namespave Test3で利用したい場合


```tuika.php

<?php
namespace Test1;
class Directory1
{
  public function __construct()
  {
    echo 'Test1\Directory', PHP_EOL;
  }
}



namespace Test2;
class Directory2
{
  public function __construct()
  {
    echo 'Test2\Directory', PHP_EOL;
  }
}





//namespace Test1,Test2をTest3で利用したい場合
namespace Test3;
use Test1;
use Test2;
$direcotry1 = new Test1\DIrectory1();
$direcotry2 = new Test2\DIrectory2();



```
AWSをはじめて扱う人へのQ&A


AWSをはじめてさわる人がサービスがありすぎてどこから手をつけたらいいのかわからない問題があるので、情報をQ&A方式でまとめてみました。

# サービスがあるすぎるのですがはじめはどれを勉強すればいいですか？

Webコンソールにログインすると多くのサービスがありどれから手をつけていいかわかりませんorz..
この中で最初に目をつけるべきは EC2, S3, RDS です。

![aws_top.png](https://qiita-image-store.s3.amazonaws.com/0/30079/d8b44a31-4608-b907-482d-0a0af998742f.png "aws_top.png")


| サービス名 | 説明 |
|:-----------|:------------|
|EC2|仮想サーバ。sshでログインできてApacheなどインストールしてWebサーバなどとして使う事が多い|
|S3|静的ファイルを保存する。image/js/cssなどをおいて、ブラウザから静的ファイルはこちらを参照する場合もある。CDNのバックエンドとして使うことも一般的。|
|RDS|MySQLなどのマネージドデータベース。マネージドという意味は障害が起きたときなど自動的にフェイルオーバーしてくれるので運用が楽。またスケールアップもGUIで出来る。|
|ElastiCache|Redis/memcahcedなどが使える。これもマネージド。|

MySQL, RedisなどはEC2の上にたてる方法もありますが、fail overなど自分で各種やらなければいけないので運用コストを減らしたい場合は、RDS, ElastiCacheを使うといいと思います。

# EC2, S3, RDS, ElastiCacheはわかりましたが次はどこをみればいいですか？

| サービス名 | 説明 |
|:-----------|:------------|
|VPC|ネットワークを区切りたい時やファイヤーウォールの設定などはここ|
|IAM (Identity & Access Management)|各種ユーザのアクセス権限などの設定はここ|
|Route 53|独自にDNSを設定したいときはここ|
|CloudFront|CDNを利用したくなったときはここ|
|Elastic Beanstalk|自動的にサーバがスケールアウトし、デプロイも楽にしたかったらここ|

# クラウドデザインパターンってありますか？

[あります](http://aws.clouddesignpattern.org/index.php/%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%9A%E3%83%BC%E3%82%B8)

ここにはクラウドで想定されるさまざまな問題に対処できるアーキテクチャがのってます。

![AWS-CloudDesignPattern.png](https://qiita-image-store.s3.amazonaws.com/0/30079/afb78e82-572c-9541-edff-c307b04612a5.png)


# ドキュメントはどこを見ればいいですか？

公式のドキュメントが充実していていいと思います。
たとえば[EC2](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/concepts.html)だとリンクからいけます。

チュートリアルも充実しているので自分で実際に試してみるといいと思います。


# 内部実装など深い情報を知りたいときはどうすればいいですか？

[ここ](https://aws.amazon.com/jp/aws-jp-introduction/)に各種情報がありますが、AWS Black Beltシリーズが詳しいです。

# 最新の情報を取得するにはどうすればいいでしょうか？

日本語の場合は、[Amazon Web Services ブログ](http://aws.typepad.com/aws_japan/)を、英語の場合は[AWS Official Blog](https://aws.amazon.com/jp/blogs/aws/)があります。

# AWSで費用を見積もりたいのですがどのようにすればいいでしょうか？

[AWSの月間費用見積もり](http://calculator.s3.amazonaws.com/index.html) がリンクからできるのでここで簡易的な費用見積もりができます。

![Amazon_Web_Services_Simple_Monthly_Calculator.png](https://qiita-image-store.s3.amazonaws.com/0/30079/5ab4778d-d5cf-95ad-8ca3-f0a51d757d78.png "Amazon_Web_Services_Simple_Monthly_Calculator.png")

# AWSの障害情報はどこから見ればいいですか？

[ここ](http://status.aws.amazon.com/)から見れます。

![AWS_Service_Health_Dashboard_-_Dec_27__2015_PST.png](https://qiita-image-store.s3.amazonaws.com/0/30079/88857a9d-3947-0583-127a-bbea4326aad4.png "AWS_Service_Health_Dashboard_-_Dec_27__2015_PST.png")

# 各リージョンからのlatencyを調べたい
http://aws-latency.altaircp.com/

# 資格はありますか？
[AWS 認定プログラム](https://aws.amazon.com/jp/certification/)

# AWS Webコンソールでよくアクセスするサービスのショートカットを作りたい

![EC2_Management_Console.png](https://qiita-image-store.s3.amazonaws.com/0/30079/07013ae9-39b3-70b2-bfa3-74ff6de58250.png)
AppVeyor 設定項目 - Tests編

# AppVeyor
.NET開発者向けのCI&デプロイツール
[Continuous Integration and Deployment service for Windows developers - Appveyor](http://www.appveyor.com/)

[AppVeyor 設定項目 - General編 - Qiita](http://qiita.com/shoooo/items/3137a93c355f3ca07656)

[AppVeyor 設定項目 - Environment編 - Qiita](http://qiita.com/shoooo/items/c4c0456fd0899dee55c6)

[AppVeyor 設定項目 - Build編 - Qiita](http://qiita.com/shoooo/items/518e44d56624187c3ea7)

## Tests
テスト設定
以下の3タイプから選ぶ

- AUTO：AppVeyorが自動でいい感じにやってくれる設定
- SCRIPT：PowerShellかCmdでビルドスクリプトを記述
- OFF：そもそもテストしない

`MSBUILD`以外は特に記述することはないので、以下`MSBUILD`について記載する

### AUTO
#### Test assemblies
デフォルトではAppVeyorが自動でテスト用のアセンブリを見つけて実行してくれる。
大規模なプロジェクトになると時間がかかるので、対象のアセンブリを指定してやる。（ワイルドカード使用可能）

```
**\*.tests.dll
```

#### Test categories
実行するテストの対象を以下から指定する

- All categories : すべてのカテゴリのテストを実施
- Only categories below : 指定したカテゴリのみテストを実施
- All except categories below : 指定したカテゴリ以外のテストを実施

カテゴリは複数指定可能
##### テストフレームワーク別カテゴリ指定方法
###### Visual Studio unit tests
```csharp
[TestMethod, TestCategory("A")]
public void TestA()
{
}
```

###### xUnit
```csharp
[Fact, Trait("Category", "A")]
public void TestA()
{
}
```

###### NUnit
```csharp
// TestFixture単位
[TestFixture, Category("A")]
public class Tests
{
}

// メソッド単位
[TestFixture]
public class Tests
{
    [Test, Category("A")]
    public void TestA()
    {
    }
}
```

###### MSpec
```csharp
// Tagsで指定
[Subject(typeof(Hoge), "Hoge")]
[Tags("A")]
public class TestA
{
}
```

#### Parallel testing groups
グループ毎に並列でテストジョブを実行できる。
グループにはカテゴリを指定できる。

#### Before tests script
テスト前に実行するスクリプトを記述
PowerShellかCmdが選べる

#### After tests script
テスト後に実行するスクリプトを記述
PowerShellかCmdが選べる

### SCRIPT
カスタムスクリプトを用いてテストする場合に記述。

#### テストフレームワーク別テスト実行コマンド

##### Visual Studio Unit Testing framework
```
vstest.console /logger:Appveyor <assembly> [options]
```
[VSTest.Console.exe のコマンド ライン オプション](https://msdn.microsoft.com/ja-jp/library/jj155796.aspx)

##### NUnit 2.x
```
# 64bit
nunit-console <assembly> [options]

# 32bit
nunit-console-x86 <assembly> [options]
```

##### NUnit 3.x
```
nunit3-console <assembly> [options] --result=myresults.xml;format=AppVeyor
```

##### xUnit
```
xunit.console <assembly> /appveyor

# .NET 4.0
xunit.console.clr4 <assembly> /appveyor
```

##### MSpec
```
mspec [options] <assemblies>
```
さくっとカレンダーにイベント登録したい

# tl;dr
https://github.com/kei-sato/homebrew-addevent

```
brew tap kei-sato/addevent
brew install addevent

# 30分後の自分に通知
addevent -M 30 "金曜ロードショー"
```

# こんな人におすすめしたい
* Mac OS X Yosemite 10.10 以降を使っている
* GUIでポチポチするよりコマンドの方が早いと思っている
* スケジュール管理には基本的にカレンダーを使う

# おすすめの使い方
## Googleカレンダーと同期
Calendar.app > 環境設定 > アカウント > Googleアカウントを追加
コマンドで追加したアカウントを選択

```
$ addevent -d 1 "an event"
0 xxxxxxxxxxx
1 youraccount@gmail.com
2 xxxxxxxxxxx

which would you like to use? [Numeber] > 1
```

## カレンダー番号を指定してエイリアス

```sh:~/.bashrc
alias ae='addevent -c 1'
```

# 使用例

```
# 仕事帰りに買い物
addevent -H 8 "イトーヨーカドー"

# 明後日飲み会2時間。10分前に通知
addevent -d 2 -H 19 -t 120 -i -10 "ひつじや@四ツ谷"

# 通知はしなくていい
addevent -n -d 2 "仕事休み"
```

# 手動インストール
ただのシェルスクリプトなので、ダウンロードしてパーミッション変えればOK

```
FPATH=/usr/local/bin/addevent

[[ -f $FPATH ]] && echo "
####################
$FPATH exists. This will be destroyed!
Please make a backup of this file.
####################"

wget -O "$FPATH" https://gist.githubusercontent.com/kei-sato/f55c4eafb5e689b7ce03/raw/32addd9feed46fed16fe1dc529033910d8f98761/addevent
chmod +x "$FPATH"
```
BigQueryでsocket timeoutを回避したメモ

JavaアプリケーションからBigQueryに対してInsertしているとたまにsocket timeoutでエラーになってしまうことがあったので対応内容の備忘録。

# やったこと

GoogleCredential.BuilderのRequestInitializerでreadTimeoutを設定。

# サンプルコード

```java
    HttpTransport httpTransport = new NetHttpTransport();
    JsonFactory   jsonFactory   = new JacksonFactory();
    GoogleCredential.Builder credBuilder = new GoogleCredential.Builder();
    credBuilder.setJsonFactory(jsonFactory);
    credBuilder.setTransport(httpTransport);
    credBuilder.setServiceAccountId(ACCOUNT_ID);
    credBuilder.setServiceAccountPrivateKeyFromP12File(KEY_FILE);
    credBuilder.setServiceAccountScopes(Collections.singleton(BigqueryScopes.BIGQUERY));
    final HttpRequestInitializer initializer = credBuilder.getRequestInitializer();
    credBuilder.setRequestInitializer(new HttpRequestInitializer() {
        public void initialize(HttpRequest request) throws IOException {
            initializer.initialize(request);
            request.setReadTimeout(0); // milliseconds (0: infinity)
        }
    });
    GoogleCredential credential = credBuilder.build();
    :
    :
```

[これ](http://javadoc.google-api-java-client.googlecode.com/hg-history/30a4252b443a391f018cab26a4a824015e06661e/1.3.1-alpha/com/google/api/client/http/javanet/NetHttpTransport.html)とかみると NetHttpTransportでreadTimeoutを設定すれば良い気もしたけど、HttpTransportをNetHttpTransportに変えてもビルドエラーになってしまったのでとりあえずこれで回避。
ReactiveXを説明できるようになるシリーズその2 - Subscribe

[前回はこちら](http://qiita.com/bl-lia/items/e3100c64a4edbd2e070b)

今回は、Subscribeについて見てみたいと思います。

# Subscribeってなに？
Subscribe自体は、言葉の通り「購読する」みたいな意味で、Observableの中でemitされたアイテムを受信する受信者みたいな捉え方でいいのかなと思います。

[The Observable Contract](http://reactivex.io/documentation/contract.html)を見ると、こちらには以下のように書いてあります。
> An observer communicates with its Observable by means of the following notifications:
>
> Subscribe
indicates that the observer is ready to receive notifications from the Observable

「Subscribeは、ObserverがObservableからの通知を受信する準備ができてることを指してるよ」みたいに書かれています。

事実、[RxJavaでSubscriberの実装](https://github.com/ReactiveX/RxJava/blob/1.x/src/main/java/rx/Subscriber.java)を見ると、

```java:Subscriber.java
public abstract class Subscriber<T> implements Observer<T>, Subscription {
...
```

といったようにObserverをimplementしているのがわかるので、やはり受信者という認識で問題無さそうです。

ちなみに、Subscriber自体は抽象クラスで、Observerインターフェースのメソッドについては何も触ってないので、subscribeするときにonNextとかを実装してやらないといけないんですね、なるほど...

## Subscribeするとどうなるのか
Subscribeすると何が帰ってくるのかは、[Javadoc](http://reactivex.io/RxJava/javadoc/rx/Observable.html#subscribe())を見ると分かるように、[Subscription](http://reactivex.io/RxJava/javadoc/rx/Subscription.html)が帰ってきます。
Subscription自体はunsubscribeするためのインターフェースですので、一度subscribeするとあとはそれを止めることしかできないって訳ですね。

じゃあ実際に、subscribeされた時に中では何をしてるのか見てみます。
https://github.com/ReactiveX/RxJava/blob/1.x/src/main/java/rx/Observable.java#L8254
メソッド的にはここですが、実際この中でsubscribeっぽい処理をしているのは下のあたりだと思います。

```java:Observable.java
try {
	// allow the hook to intercept and/or decorate
    hook.onSubscribeStart(observable, observable.onSubscribe).call(subscriber);
    return hook.onSubscribeReturn(subscriber);
} catch (Throwable e) {
...

```
このうち、hook([RxJavaObservableExecutionHook](https://github.com/ReactiveX/RxJava/blob/1.x/src/main/java/rx/plugins/RxJavaObservableExecutionHook.java))のonSubscribeStartとonSubscribeReturnについては、現状単に引数を返しているだけなので、実体としてはOnSubscribe.call(subscriber)って事になりそうです。
OnSubscribeについては、[Observable生成時に必須のパラメータ](https://github.com/ReactiveX/RxJava/blob/1.x/src/main/java/rx/Observable.java#L59)となるので、ようはSubscriberを引数にOnSubscribeを呼んでるだけっぽいですね。

# つまり
Subscribeについては、「Observableからの通知を受け取る」という意味で、Subscriberについてはその受信するためのクラスという風に言えそうです。
また、ObservableをSubscribeする事については「Observableの中のOnSubscribeがSubscriberを引数にcallされ、Observableの中でemitされると、Subscriberにそれが送られる」という事になりそうです。

実際は、OnSubscribeがcallされるといってもHot ObservableとCold Observableでニュアンスが変わるような気もするのですが、それは別の機会に見てみたいと思います。
Window Message > WM_USER+100 でなく WM_APP + Nを使う

Window Messageについて調べていて、以下を見つけた。

http://www.nishishi.com/blog/2008/07/wm_user_wm_app.html

> 独自のメッセージを定義したいときは、WM_USERではなくWM_APPを使わねばならないようです。

...

> WM_APP ～ WM_APP＋16383（？）は、どのシステムのメッセージともコンフリクトしないことが保証されているのだそうな。
WinAppDev > 考察 > 他のアプリにコマンドを送る方法

```txt:開発環境
C++ Builder XE4
```

あるアプリから他のアプリにコマンドを送りたい。

1. 前面に出して、キーを送る
  - http://qiita.com/7of9/items/e0bb49501224178ba4e2
2. Window Messageを使う
  - Wparam
  - Lparam

Window Messageのリスト
http://wiki.winehq.org/List_Of_Windows_Messages

Windows Messageを使う場合、クリティカルなコマンドを送る時、誤判断を防ぐのはどうするのだろうか。

Lparamの上位ビットに確認用のキーを入れて、下位ビットにパラメータとしての値(例: 120)を渡す、なりの工夫が必要だろうか。

<hr>
(追記)
WparamとLparamで２つの数値を送ることができた。
[Rails] 色々メモ


すぐ忘れちゃうのでメモ。
随時アップデート予定。

## db migration

dbのmigrationのやり方。

以下のようにコマンドを入力すると、処理に必要なファイルの雛形を生成してくれるのでそれを利用する。

```console
$ rails g migration fileName
```

`db/` 以下にマイグレーション用のファイルが生成されるので、そこに変更処理を記述します。
例えば以下の感じ。

```ruby
class RenameHogeToAnyTable < ActiveRecord::Migration
  def change
      rename_column :tableName, :oldColumnName, :newColumnName
      
      add_column :tableName, :columnName, :type
      
      remove_column :tableName, :columnName, :type
  end
end
```

必要な変更処理を記述したら、以下のコマンドでマイグレーションを実行します。

```console
$ rake db:migrate
```


## JSONを入れ子にして返す

APIとして公開してレスポンスを生成する例。
（e.g. http://example.com/api/hoges ）

```ruby
module Api
    class HogesController < ApplicationController
        def index
            @hoge = Hoge.all[0]

            render({
                :json => @hoge.as_json({
                    :include => {
                        :data => {
                            :include => [:item, :item2]
                        }
                    }
                })
            })
        end
    end
end
```

### 出力例

```console
{
    "id": 1,
    "created_at": "2015-12-15T06:03:20.770Z",
    "updated_at": "2015-12-21T10:09:38.649Z",
    "data": {
        "id": 1,
        "url": "http://placekitten.com/304/150",
        "created_at": "2015-12-25T10:21:36.497Z",
        "updated_at": "2015-12-25T10:35:35.046Z",
        "hoge_id": 1,
        "item": {
            "id": 1,
            "name": "名前",
            "icon": "http://placekitten.com/304/150",
            "width": 44,
            "height": 44,
            "created_at": "2015-12-25T11:14:56.746Z",
            "updated_at": "2015-12-25T11:18:26.797Z",
            "datum_id": 1
        },
        "item2": {
            "id": 1,
            "image": "http://placekitten.com/g/304/150",
            "width": 300,
            "height": 250,
            "created_at": "2015-12-22T02:48:54.453Z",
            "updated_at": "2015-12-25T11:29:24.783Z",
            "datum_id": 1
        }
    }
}
```

ただ、複数データを返す場合にどうやるかはまだ不明・・。
とりあえずスタブ環境的にざっくりとデータを返すAPIだけを作りたかったのでこんな感じにしました。