OmniAICreator/Qiita-1.07M huggingface dataset:
vagrantで別パーティションの共有フォルダ追加 for Windows7

# はじめに
Windows環境でvagrantの共有フォルダを別のパーティションでマウントする方法です。
今回はYドライブを対象にします。
ちなみにvagrantのディレクトリはDドライブです。

この方法でもNFSをマウントしたい場合ホストOS側でマウントしてないと行けないので、なんかとても面倒です。。
良い方法探し中

## Vagrantfileの設定
仮に今回はYドライブのmtm_downというところを/mtm_downでマウントします。

```rb
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
...
  config.vm.synced_folder "Y:/mtm_down", "/mtm_down", type: "nfs"
...
```

## 再起動
```bash
$ vagrant reload
...
==> default: Mounting shared folders...
    default: /vagrant => D:/myVagrantUbuntu3
    default: /mtm_down => Y:/mtm_down
...
```

## ログインして確認
無事マウントされてます。

```bash
$ vagrant ssh
...
$ df
Filesystem      1K-blocks       Used Available Use% Mounted on
/dev/sda1        41251136    1500940  38014284   4% /
none                    4          0         4   0% /sys/fs/cgroup
udev               249888         12    249876   1% /dev
tmpfs               50728        340     50388   1% /run
none                 5120          0      5120   0% /run/lock
none               253624          0    253624   0% /run/shm
none               102400          0    102400   0% /run/user
/vagrant        953118720  720425984 232692736  76% /vagrant
/mtm_down      1953512444 1766780044 186732400  91% /mtm_down
```
C# VB.Net におけるソースコードのドキュメント化(Sandcastle)

C#/VB.Netで開発をしていて、JavaDocいいな・・・なんてさみしい思いをしたことはないでしょうか。
実は、Sandcastleというツールを使用することで.NETでもソースコードからドキュメントを生成できます([こんな感じ](http://icoxfog417.github.io/kintoneDotNET/Index.html))。今回はその方法をご紹介します。

## Sandcastleのインストール
Sandcastleはもともとマイクロソフトが開発していたのですが、2010年ごろおやめになってしまい(ええっ!?)、それからしばらく.NETではJavaDocのようなツールがない状態でした。

その後(2012～2013年ごろ?) Eric Woodruffという心優しい方が元プロジェクトをforkし新たに[Sandcastle Help File Builder](https://github.com/EWSoftware/SHFB)として開発を行ってくださり、今に至ります。

前書きはこれくらいにして、ありがたくインストーラーを頂戴します。

https://github.com/EWSoftware/SHFB/releases
(※以前は[CodePlexにありました](http://shfb.codeplex.com/)が、GitHubへ移行したようです)

インストーラーはちょっと珍しい形式で、必要なコンポーネントを順次インストールしていくスタイルです(左下のPrevious/Nextで進めていく)。

まずはヘルプファイルのビルドに必要なコンパイラをインストール。ここから落とせとリンクが指定されているので、仰せの通りにリンク先に遷移。
![install_00.PNG](https://qiita-image-store.s3.amazonaws.com/0/25990/bc61fedc-4129-bfdc-3020-40aa594af33d.png)


HTML Help Workshopを落とし、インストール。
![install_01.PNG](https://qiita-image-store.s3.amazonaws.com/0/25990/263c497a-5bfc-5829-83f9-b51076a77e13.png)

後は必要ないので飛ばす。
![install_0.PNG](https://qiita-image-store.s3.amazonaws.com/0/25990/69927b2c-345b-a773-e46b-95756f0816ba.png)

続いて、Sandcastle本体をインストール。
![install_1.PNG](https://qiita-image-store.s3.amazonaws.com/0/25990/5d9c9a30-7d32-217a-3bd8-df3c3ab2242a.png)

完了したら、左下のNextを押して行って完了する。

## Sandcastleを利用したドキュメントビルド
GUIを起動する。
![install_3.PNG](https://qiita-image-store.s3.amazonaws.com/0/25990/bdc9a95b-b46f-d5f4-725e-49b959c7abb3.png)

ものすごい殺風景な画面が立ち上がるが、落ち付いて新規プロジェクトを作成する。
![install_4.PNG](https://qiita-image-store.s3.amazonaws.com/0/25990/16067e5c-a32e-2bb2-9f5f-d1c155792cef.png)

ドキュメント化したいクラスライブラリのdllを、Documentation Sourceとして追加する。
![install_5.PNG](https://qiita-image-store.s3.amazonaws.com/0/25990/57a970bc-4d93-e89b-26c6-99e1f209e1c9.png)

後はビルド設定。
作成したいファイル形式を選択。大抵Help1のみだが、Webサイトにしたい場合はWebsiteも選択。
![build_0.PNG](https://qiita-image-store.s3.amazonaws.com/0/25990/8240d33f-0f9b-996d-df22-1210d450e981.png)

タイトルなどその他もろもろを設定。PresentationStyleはもうvs2013も選べるみたい。
![build_1.PNG](https://qiita-image-store.s3.amazonaws.com/0/25990/2b5ba440-c25c-d8ef-8ed1-ed61f18d56fc.png)

Summaryを設定することで、ヘルプファイル全体、また名称空間ごとの記述を設定することができる。
![build_2.PNG](https://qiita-image-store.s3.amazonaws.com/0/25990/a4fa927d-19a2-c644-d4b8-b0826829b9b0.png)

全ての設定が終わったら、Ctrl+Shift+BかBuild the help fileのボタンを押してドキュメントを作成する。
作成されたchmファイルはこんな感じになる。
![build_3.PNG](https://qiita-image-store.s3.amazonaws.com/0/25990/879c1761-e0e2-d358-5ccf-8d58805958d6.png)

コメントのタグは[こちら](http://msdn.microsoft.com/ja-jp/library/5ast78ax.aspx)になるが、普通にHTMLタグも使用可能(リンクとか)。

これでコメントを書くモチベーションががぜん上がる！に違いない。
git log を見やすくする


```
git log --graph --all --format="%x09%an%x09%h %d %s"
```

![1__alise_nayalabo___public_project__ssh_.png](https://qiita-image-store.s3.amazonaws.com/0/4476/15cad947-f5d5-344f-29b5-4d2092b00e95.png "1__alise_nayalabo___public_project__ssh_.png")


`--format`オプションで指定している文字

* %x09 : タブ区切り(タブの16進数コード0x09)
* %an  : 修正した人(**A**uthor **N**ame)
* %h   : コミットID(**H**ash値)
* %d   : HEADとブランチの表示(**D**ecorate)
* %s   : コミットメッセージの1行目(**S**ubject)

```
git log --graph --all --format="%x09%C(cyan bold)%an%Creset%x09%C(yellow)%h%Creset %C(magenta reverse)%d%Creset %s"
```



![1__alise_nayalabo___public_project__ssh_.png](https://qiita-image-store.s3.amazonaws.com/0/4476/ed9d643a-2b27-f516-553a-ac46acabd95a.png "1__alise_nayalabo___public_project__ssh_.png")


色・属性を指定するフォーマット文字列には、こんな意味がある

* %C(xxx) : 色・属性のフォーマットxxxを指定する
* %Creset : 色・属性のフォーマットを解除する

xxxの部分には次のような文字を指定できる

* 色  : normal, black, red, green, yellow, blue, magenta, cyan, white
* 属性 : bold(太字), dim(減光), ul(下線), blink(点滅), reverse(反転)

上記のコマンドを、`git tree`コマンドにする(alias指定する)と、長いコマンドを毎回入力しなくてよい。

```
$ git config --global alias.tree 'log --graph --all --format="%x09%C(cyan bold)%an%Creset%x09%C(yellow)%h%Creset %C(magenta reverse)%d%Creset %s"'
```


```
$ git tree
*       Alice   bb73902  (HEAD, next) $LANGが未設定だった場合のロジックをlanguageメソッドに含める
| *     Alice   87b2c8c  (refs/stash) WIP on next: f1c90ff 実行環境に合わせてデフォルト言語を設定する languageメソッドを追加
| |\
|/ /
| *     Alice   1e1a447  index on next: f1c90ff 実行環境に合わせてデフォルト言語を設定する languageメソッドを追加
|/
*       Alice   f1c90ff  実行環境に合わせてデフォルト言語を設定する languageメソッドを追加
| *     Alice   f269f85  (origin/master, origin/HEAD, master) 対話の返答で日本語全角文字にも対応
|/
*       Alice   d14cb82  (Version-0.1) Merge remote-tracking branch 'origin/master'
|\
| *     takasianpride   5b387fe  showメソッドのメッセージを修正
* |     Alice   0471608  対話入力のyもyesと判定するように変更
```


# 参考
[アリスとボブのGit入門レッスン](http://www.amazon.co.jp/dp/4798035009)
07-05 歴史を見やすい表示にしておく
超チューニング祭に参加＆表彰した

# 超チューニング祭

ちょっと遅くなったけど、2014/4/26-27の二日間、ニコニコ超会議3内のまるなげひろばの一角で開催された[超チューニング祭](http://cyoppaya.kunikiya.jp/)にドワンゴチーム(メンバーは [江添亮](http://cpplover.blogspot.com/2014/04/3_30.html)さん, kmizuさん, [masarakki](http://masarakki.github.io/blog/2014/04/29/cho-tuning/)さんと合わせて4人)として参加したり表彰などをした話。

参加チームは全部で18チームかな?(チーム番号は20までだけど、2チーム欠番?)。

## 競技ルール

ルールは、[niconico](http://www.nicovideo.jp)のスマートフォン版webのコピーの一部改変版を主催者サーバー上に配置し、速度とUIの改善を競うというもの。チームごとにコピーが配置され、各チームに秘密鍵が配られ、その鍵でSFTPで各チーム用サーバーにuploadする。
UIのユーザー投票と測定結果のそれぞれの順位の合計が一番少ないチームが総合優勝となるため、速度だけでもデザインだけでもだめ、というものであった。
投票以外では、UI要件(どの要素がいくつ必要とか、2クリック(タップ)以内でそれぞれのリンクに到達できること、iOSで判定されることなど)と、速度(リソース取得時間とレンダリング時間)などが判定された。

競技は1日目の朝9時すぎから始まり、二日目の午前11時に終了。

## 競技でやったこと

私は最近サーバーばっかりでフロント部分は勉強中で勝利をめざすレベルにないので、UI改善は放棄して、速度改善の勉強として手法を色々試してみることにした。

 * [IntelliJ IDEA](http://www.jetbrains.com/idea/)でソースを見ると警告やエラーが多数でたので、それをチェックしていった。
   * とりあえず画像のサイズ指定と画像の実寸が違うため、表示サイズに縮小・再圧縮してサイズを削減した。
 * ブラウザの開発者ツールでタイムライン(ネットワーク)を確認して、ボトルネックを確認した。
 * 特定の広告の取得がすごい遅いが、レギュレーションに必要な広告は２つだけで、この遅い物を抜いても満たすので撤去。
 * jQueryのロードが遅い。ソースマップが無いエラーが出ている。
   * jQuery取得元をCDNに変更
   * さらに、jQueryではなく互換もので小さいもののひとつ、[Zepto.js](http://zeptojs.com/)に変更
 * cssを結合して[gulp-minify-css](https://github.com/jonathanepollack/gulp-minify-css)でminifyすることでファイルを減らした。またこれを[gulp](http://gulpjs.com/) watchすることでcssの編集に自動追従させる。
 * jsも要らないものを撤去
 * 画像をcss sprite化。windows環境で挑戦している関係でcss-sprite関連のセットアップを放棄して、css spriteを作ってくれるweb service [CSS Sprite Generator](http://ja.spritegen.website-performance.org/)に画像をuploadして結合画像にし、参照を置き換え
 * cssが巨大で、中を見ると要らない物が一杯あるので手でチマチマ参照を探しては削除してサイズを削っていった

[結果](http://cyoppaya.github.io/result.html)は、速度で18チーム中10位ということで中程かなｗ

## 表彰とLT発表会

結果は:

* 「努力賞(速度賞)」と「戀塚賞」のふたつを [jbking](http://qiita.com/jbking/items/d87961dc0a4e4b969f76) さんが獲得
* 「学生証」と「ベストUI賞」のふたつを[高橋せいべえ](http://www.slideshare.net/ToshinariTakahashi/140429-34080452)さんが獲得
* 「最優秀賞」はチーム[ウルフギャング](http://blog.mikiishijima.com/cho-tuning-fes/)が獲得。

戀塚賞だけど、ファーストビューで読み込むのがindex.htmlだけ？というところまで削減しきっていて、モバイル回線速度条件だと最重要な点をきっちりやってると考えて選んだ。

賞品のひとつとして[無刻印HHK Pro2](https://www.pfu.fujitsu.com/hhkeyboard/hhkbpro2/nokeytop.html)のキートップに手書きでキーを書くよう指示されたので、ニコニコらしいコメントに使うような文字だけ書こう、と考えて「8」「w」「!」「?」と、最後にenterキーを書いた。どうだったかなー。

表彰後、LT大会が行われた。ここで各チームがどのような工夫をしたのかがそれぞれ解説された。これによって知識差が埋まってゆくとしたら良いイベント形態だなぁ。

参加者のみなさん、主催の[くにきや](https://twitter.com/kunikiya)さんをはじめとするスタッフの皆さん、お疲れ様でした。
serverspecとCapybaraを一緒に使う

<!-- too_old -->
> **この記事は最終更新から1年以上経過しています。** 気をつけてね。

serverspecで状態をテストした後、Webのアプリなら振る舞いもテストしようと思いました。

で、serverspecがRSpecならば、[Capybara](https://github.com/jnicklas/capybara "jnicklas/capybara")も混ぜたらいいんじゃね？ と試してみた。

## コード

https://github.com/higanworks/serverspec_with_capybara-example


`spec_helper`はこんな感じで。

アプリのコードを読むわけではないので、webkitドライバでリモート扱いとしてテストすることにしました。


```ruby:spec_helper.rb
require 'serverspec'
require 'capybara/rspec'
require 'capybara-webkit'

include SpecInfra::Helper::Exec
include SpecInfra::Helper::DetectOS

RSpec.configure do |c|
  if ENV['ASK_SUDO_PASSWORD']
    require 'highline/import'
    c.sudo_password = ask("Enter sudo password: ") { |q| q.echo = false }
  else
    c.sudo_password = ENV['SUDO_PASSWORD']
  end
end

Capybara.default_driver = :webkit
```


で、serverspecとcapybaraのテストを混ぜたspecファイルを書いた。

- (serverspec) `openssl version` の戻りをチェック
- (Capybara練習用) [Test your server for Heartbleed (CVE-2014-0160)](https://filippo.io/Heartbleed/ "Test your server for Heartbleed (CVE-2014-0160)") のサイトに到達性チェック
- (Capybara練習用) とばっちり的に`google.com:443`のHeartbleedをテストして、`All good〜`の出力を得る

接続先は`Capybara.app_host`で自由に調整できるし、サイト上でのクライアント挙動も端的に記述できていい感じです。
実際にやる場合はサーバにデプロイしたアプリや、自前で運用しているWEBのエントリポイントに対して行いましょう。


```ruby:heart_spec.rb
# coding: utf-8
require 'spec_helper'

## serverspecのコマンドリソースでopensslのバージョンをチェックする
describe command('openssl version') do
  it { should return_stdout /^OpenSSL\ 1\.0\.1g/ }
end


## `:type => :feature`で`capybara`を使う
describe 'visit Heartbleed test' ,:type => :feature do

  before :each do
    Capybara.app_host = 'https://filippo.io'
  end

  ## Heartbleedテストのトップページを表示するテスト
  it 'show testpage' do
    visit '/Heartbleed/'
    expect(page).to have_content 'Heartbleed test'
  end

  ## google.com(任意)に対してHeartbleedテストを実施して、`All good`が表示されることを確認
  it 'check google ssl' do
    visit '/Heartbleed/'
    fill_in 'hostname', :with => 'google.com'
    click_on 'Go!'
    expect(page).to have_content 'All good, google.com seems fixed or unaffected!'
  end
end
```

どちらもRSpecなので、統一感がありますね。



## テスト実行

では実行してみましょう。

```rspec:rspec_output
$ rspec -fd --color

Command "openssl version"
  should return stdout /^OpenSSL\ 1\.0\.1g/

visit Heartbleed test
  show testpage
  check google ssl

Finished in 4.79 seconds
3 examples, 0 failures
```


いけました。

## 追記:Sshバックエンドなときー

describe内のbeforeではなく、テンプレートから生成されたspec_helperに入れちゃう手があります。

```
# -- snip --
    if c.host != host
      c.ssh.close if c.ssh
      c.host  = host
## ここでCapybara.app_hostを設定しちゃう。
      Capybara.app_host = "http://#{host}"
      options = Net::SSH::Config.for(c.host)
      user    = options[:user] || Etc.getlogin
      c.ssh   = Net::SSH.start(host, user, options)
    end
# -- snip --
```

これだとRSpec実行端末から到達性が必要なので、いっそSocksやポートフォワード張らせてもいいのかもしれない。
loading jquery dynamically

```js
var script = document.createElement('script');
script.src = '//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.0/jquery.min.js';
document.body.appendChild(script);
// Poll for jQuery to come into existance
var checkReady = function (callback) 
{
    if (window.jQuery) {
        callback(jQuery);
    }
    else {
        window.setTimeout(function () 
        {
            checkReady(callback);
        }, 100);
    }
};
// Start polling...
checkReady(function ($) {}
```
tmux 1.9 でウインドウ分割時にカレントディレクトリを維持する

split-window に `-c "#{pane_current_path}"` を追加する。

```diff
-bind C-s split-window -v
-bind C-v split-window -h
+bind C-s split-window -v -c "#{pane_current_path}"
+bind C-v split-window -h -c "#{pane_current_path}"
```
【jQuery】submit前に処理を行う方法

submit前にバリデーションチェックや、データの加工などを行う方法。

## submitイベントを利用する方法

```html:html
<form id="form_id" method="" action="">
  <button type="submit"></button>
</form>

```

```js:jQuery
$('#form_id').submit(function(){

    //
    // バリデーションチェックや、データの加工を行う。
    //

    //バリデーションチェックの結果submitしない場合、return falseすることでsubmitを中止することができる。
    return false;
})
```

## clickイベントを付与したボタンをトリガーにする方法
ボタンのクリックイベントで、jQueryを呼び出して、バリデーションチェックや、データの加工を行った後、submitを行う。
type="button"としないとsubmitがはしるので注意。

```html:html
<form id="form_id" method="" action="">
  <!-- type="button"を省略すると、submitされる。 -->
  <button type="button" id="btn_id"></button>
</form>
```

```js:jQuery
$(function(){
  $('#btn_id').click(function(){
    //
    // バリデーションチェックや、データの加工を行う。
    //

    $('#form_id').submit();
  });
})

```
Pythonでスクリプトを動的にimportする

Pythonでは、 **ハイフン(-)** がファイル名に入ったスクリプトはimportステートメントではできません。
ですがテストを書くためにどうしてもハイフンが入ったファイル名をimportしたい場合、どうすればいいのか、調べて分かったのでメモ。

## \_\_import\_\_

**\_\_import\_\_** は、ファイルのパス名を引数にとり、ファイルのモジュールを返します。

```py:load-path.py
import sys
path = sys.path
```

```py
>>> module = __import__("load-path")
>>> type(module)
<type 'module'>
>>> dir(module)
['__builtins__', '__doc__', '__file__', '__name__', '__package__', 'sys', 'path']
>>> dir.path
```

これでハイフンがついたファイルでも、簡単にimportできます。

## テストクラス内で使う

```py:unit.test.py
import unittest

class Tester(unittest.TestCase):
    module = __import__("load-path")

    def setUp(self):
        for key in dir(self.module):
            setattr(self, key, getattr(self.module,key))
```
リッチなテキストエディターで、画像タップ時にキャレット位置がおかしくなる（iOS Safari）

リッチなテキストエディター = RTE: Ritch Text Editor.

## 状況

* iOS SafariないしWebViewで（Androidは未確認）
* `contenteditable=true`な領域に
* `<img>`を配置
* 画像の左半分をタップ
* キャレットが次の段落の先頭へ移動してしまう
    * 普通画像の左隣じゃね？
    * 条件によっては左隣になる場合もある
    * 右半分をタップしたときは、右隣になる
* コード: http://jsfiddle.net/ginpei/8RFLF/0/
* デモ: http://jsfiddle.net/ginpei/8RFLF/0/show
* 動画: http://gyazo.com/d61456d1b4272cea1255a771b5ae386c

![ritch.gif](https://qiita-image-store.s3.amazonaws.com/0/10765/d2d12410-88c2-3f97-9afb-ebe28ee1be38.gif)

## 回避策

CSSのプロパティとかでどうにかならんかなと思ったけど、うまい事できませんでした。

ので、JavaScriptで処理するようにしました。画像クリック時、その右隣へキャレットを設定します。

```js
var elEditable = document.querySelectorAll('[contenteditable=true]')[0];
elEditable.addEventListener('click', function(event) {
  var elImage = event.target;
  if (elImage.tagName.toLowerCase() !== 'img') {
    return;
  }
  var selection = document.getSelection();
  var range = document.createRange();
  range.setStartAfter(elImage);
  range.setEndAfter(elImage);
  selection.removeAllRanges();
  selection.addRange(range);
  range.detach();
});
```

* コード: http://jsfiddle.net/ginpei/8RFLF/7/
* デモ: http://jsfiddle.net/ginpei/8RFLF/7/show

## iOS 5

iOS 6.0, 7.1で試したらうまくいったけど、5.1だと駄目だった。

## もっと良い回避策など

あれば教えてください。JSで操作するのこわい。
最大40人まで同時通話が可能なシステム開発 - Twilioを使えばたった7行で実現可能

最大40人まで同時通話が可能なシステムの開発、Twilioのカンファレンスコールを使えばたった7行（XML）で開発が可能になります。

もちろん RubyやPHPなどみなさんが好きなプログラミング言語で開発すればみなさんの希望に近いアプリケーションやシステムの開発が可能になります。

## まずはカンファレンスコールの仕組
①　カンファレンスコール参加希望者がTwilioの電話番号（050-xxxx-xxxx）に電話を掛けます。
②　電話番号に設定されているTwiMLが呼ばれカンファレンスルームが開設されます。
③　二人以上の人が①の電話をかけるとカンファレンスが開始されます。
④　①〜③の流れ、つまり参加希望者が同じ番号に電話をかけるとどんどん参加され最大40人まで参加可。

## 早速、Twilioを使ってカンファレンスコールを作ってみましょう。
下のように、たった7行！のコードを書くだけで同時通話アプリの開発は完了です。
次はカンファレンス用の電話番号（Twilioから取得した電話番号）のRequest URLにTwiMLのURLを設定するだけです。

Twilioの各動詞には名詞の指定が可能です。名詞の属性を使えばより細かい操作ができます。
例えば、カンファレンスコールの作成で待機音を変更したい場合は「waitUrl」を指定することで実現可能になります。（ソースコードの 5行目）

◎ コードの動き
ユーザーから電話がかかってくると最初「Twilioカンファレンスへようこそ！」が流されます。
その後、カンファレンスコールが始まります。

```xml:twilio-conference.xml
<?xml version="1.0" encoding="UTF-8" ?>
<Response>
    <Say language="ja-jp">Twilioカンファレンスへようこそ！</Say>
    <Dial>
        <Conference waitUrl="https://api.twilio.com/Cowbwell.mp3">twilioConferenceRoom</Conference>
    </Dial>
</Response>
```

## カンファレンスルームの振り分け
下のように特定の電話番号を取得し、それぞれ違うカンファレンスルームの生成ができます。

```php:conference-sort-telNo.php
<?php
    header('Content-type: text/xml');
    echo '<?xml version="1.0" encoding="UTF-8" ?>';
?>
<Response>
    <Dial>
    <?php
        if ($_REQUEST['From'] == '+8180xxxxxxxx')
        {
            echo '<Conference>appleRoom</Conference>';
        }
        else {
            echo '<Conference>orangeRoom</Conference>';
        }
    ?>
    <Dial>
</Response>
```

##カンファレンスルームの指定（携帯番号（数字）入力）
プッシュ音によるカンファレンスコールの生成も可能。
例えば、ユーザーグループが作られていてそのグループ番号をメンバー各自電話器の数字ボタンを押します。そうすると押された番号ごとにルームを生成し、同じグループのメンバー間通話が可能になります。

◎ 番号の入力（プッシュ音認識）
Twilioの「Gather」という動詞を使えば、ユーザーがどの数字を押したかをわかります。
下のコードをご覧ください。
下のファイルではGather動詞を使って番号の入力をもらいます。入力された数字情報を「action」に乗せ、「conference-input-roomNo.php」に渡します。

```xml:conference-input-roomNo.xml
<?xml version="1.0" encoding="UTF-8" ?>
<Response>
    <Gather action="conference-input-roomNo.php" numDigits="4">
        <Say language="ja-jp">ルーム番号を４桁で入力してください。</Say>
    </Gather>
</Response>
```

上の「<Gather action="conference-input-roomNo.php" numDigits="4">」から番号が渡されるファイルです。「$key = $_REQUEST['Digits'];」部分で渡されたパラメータを取得し、続きの処理を行います。

ここでは入力された番号ごとにカンファレンスルームが選択されるようになっています。

```php:conference-input-roomNo.php
<?php
    header('Content-type: text/xml');
    echo '<?xml version="1.0" encoding="UTF-8" ?>';
 
    $key = $_REQUEST['Digits'];
?>
<Response>
    <?php
        if ($key == '1234')
        {
            echo '<Dial>';
            echo '<Conference>appleRoom</Conference>';
            echo '</Dial>';
        }
        else {
  		// ルーム番号を間違って入力したら案内メッセージを再生し、リトライする。
            echo '<Say language="ja-jp">ルーム番号を確認し、もう一回入力してください。</Say>';
            echo '<Redirect>conference-incoming-gather.xml</Redirect>';
        }
    ?>
</Response>
```

いかがでしょうか？
今まで！はこのようなシステムを開発するためにはいろんな人が複雑な仕様に基づき長い期間開発を進んで来たと思いますが、Twilioを使えばこのようにたった7行で同時通話アプリの開発が可能です。
なおかつ各プログラミング元号を使えばより細かい処理をさせることも可能。

[Twilio for KDDI Web Communications 公式ページ](http://twilio.kddi-web.com "公式ページ")
[Rails4]CarrierWaveを使ってs3に画像をアップロードする


いくつか方法はあるみたいなんですが、s3バケット内にディレクトリも作らせたかったので、今回はPaperclipを使うことにしました。
userモデルはすでにあって、そこにプロフ画像を追加します。

環境
Rails4.0.0
Ruby2.0.0-p246

参考URL
RailsでPaperclipを使ってAmazon S3に画像を保存する
http://www.aguuu.com/archives/2012/12/paperclip/

公式
paperclip
https://github.com/thoughtbot/paperclip

# 下準備
## S3にアクセスするユーザを作成する
その際に、Access Key IDとSecret Access Keyをメモしておく
## S3にバケットを作成
image-upload
とか本番・開発で分けたかったら分けて立てる
先ほど作成したユーザにpermissionタブから割り当てるのを忘れずに。(権限は、show/edit permissionは外していいと思う)

## Gemfileに登録

```Gemfile
gem 'paperclip'
gem 'aws-sdk'
```


```console
bundle install
```

# ここから本番
## DBに画像保存用のカラムを追加
DBに保存と言っても、画像そのものじゃなくて画像ファイル名とかコンテントタイプとかの保存に使うようです。

```console
rails generate paperclip user avatar
      create  db/migrate/20140424060535_add_attachment_avatar_to_users.rb
```

migrationファイルの中はこんな感じ。

```add_attachment_avatar_to_users.rb
class AddAttachmentAvatarToUsers < ActiveRecord::Migration
  def self.up
    change_table :users do |t|
      t.attachment :avatar
    end
  end

  def self.down
    drop_attached_file :users, :avatar
  end
end
```

migrateする

```console
rake db:migrate
```

## S3の設定ファイルを作成する
東京リージョンにs3を立てた場合は、host_nameはs3-ap-northeast-1.amazonaws.com固定っぽい。

```config/s3.yml
bucket: image-upload
access_key_id: IAMで作成したユーザのkey_id
secret_access_key: IAMで作成したユーザのaccess_key
s3_host_name: s3-ap-northeast-1.amazonaws.com
```

本番環境とstg環境でバケットを分けたい場合は、環境毎に書けるみたい。

## userモデルにアタッチするファイルの情報を記述する
以下を記述すればOK。pathはここでは更新時間をファイル名にしているけど、ハッシュ値とか他にも使えるよう。

```user.rb
  has_attached_file :avatar,:storage => :s3,
    :s3_credentials => "#{Rails.root}/config/s3.yml",
    :url => "s3_domain_url",
    :path => ":attachment/:id/:updated_at.:extension"
  validates_attachment_content_type :avatar, :content_type => /\Aimage\/.*\Z/
```

```users_controlloer.rb

  current_user.avatar = user_params

  def user_params
    params.require(:user).permit(:avatar)
  end

```

これだけでs3へ保存が出来ました！簡単！

## ドハマりポイント

保存自体はすぐに出来たんだけど、s3に置いたファイルのURLが取れなくて右往左往してました。。。
DBに保存してあるファイル名とURLが別ってちょっと詐欺チックだと思う。
ちなみに、DBに保存されるファイル名は、元ファイルのファイル名。

```ruby
# avatar.path はpathで設定した内容が返ってくる→相対パス
avatar.path
=>/avatar/1111/123456789.png
# avatar.path は実際にs3に置いたパスが返ってくる→絶対パス
avatar.url
=>http://s3-ap-northeast-1.amazonaws.com/hogehoge/avatars/1111/123456789.png?123456789
```

んで、urlを取れるようになったはいいけど、クエリに更新時間(ファイル名)がついてる。。なんでやー。
クエリなしにしたかったけど、よくわからなかったので、クエリ部分をsplitして端末に返すという荒業をしましたｗ
画像のキャッシュ対策なんだろうか。。
にしても、urlってどこで持ってるんだろう。。メモリかな？
未だになれないRailsのよろしく感。
git config のオプション

## --global, --system のちがい

`git config`の設定には、`--global`や`--system`のオプションによって、その設定が影響する範囲が違ってくる

|オプション|設定が影響する範囲|設定ファイルの保存場所|
|:--|:--|:--|
|なし|各リポジトリの中だけ|各リポジトリの`.git/config`|
|`--global`|ログインユーザー環境|`~/.gitconfig`|
|`--system`|OS環境全体| Gitの環境による<sub>[1](#1)</sub>|

設定が競合する場合、

**オプションなし > `--global` > `--system`**

の順で優先される

---
<a name="1">1.</a>
- `etc/gitconfig`  
- `/opt/local/gitconfig`  
- `usr/local/git/etc/gitconfig`
SSReflectによる鳩の巣原理の証明

SSReflectによる鳩の巣原理の証明
======
@suharahiromichi

プログラミング Coq 自然数を扱う
http://www.iij-ii.co.jp/lab/techdoc/coqt/coqt4.html

で解説されている鳩の巣原理の証明をSSReflectに移してみました。証明の内容はまったく同じなので、比べるとおもしろいとおもいます。


```

Require Import ssreflect ssrbool ssrnat seq.

Lemma lt_S_n : forall (n m : nat), S n < S m -> n < m.
Proof.
  by [].
Qed.

Lemma lt_Snm_nm : forall (n m : nat), S n < m -> n < m.
Proof.
  move=> n m.
  by apply (@ltn_trans n.+1 n m).
Qed.

Inductive InList (A : Type)(a : A) : list A -> Prop :=
| headIL : forall xs, InList A a (a::xs)                     (* 1 *)
| consIL : forall x xs, InList A a xs -> InList A a (x::xs). (* 2 *)

Theorem pigeonhole : forall (xs : list nat),
                       size xs < foldr plus 0 xs ->
                       exists x : nat, InList nat x.+2 xs.
Proof.
  elim.
  (* xs = [] の場合 *)
    by [].
  (* xs = x :: xs' の場合 *)
  elim.
    (* a = 0 の場合 *)
    move=> xs IHxs H; apply lt_Snm_nm, IHxs in H.
    by elim: H => x; exists x; constructor.

  elim.
    (* a = 1 の場合 *)
    move=> _ xs IHxs H; apply lt_S_n, IHxs in H.
    by elim: H => x; exists x; constructor.

  (* a >= 2 の場合 *)
  move=> a.
  by exists a; constructor.
Qed.


```
注意：「ソフトウェアの基礎」の練習問題とは、異なるので注意してください。

http://proofcafe.org/sf/Logic_J.


```

(* $Id: ssr_pigeonhole.v,v 1.21 2014/04/30 04:25:03 suhara Exp suhara $ *)
```
git-svn メモ


## 中央のSVNリポジトリの更新をローカルのGitリポジトリに反映

```
git svn rebase
```

## ローカルのGitリポジトリの変更を中央のSVNリポジトリに反映

```
git svn dcomit
```

## ブランチの確認

```
git branch -r
```


# 参考

* [Subversionリポジトリと連携できるgit-svn | SourceForge.JP Magazine](http://sourceforge.jp/magazine/09/03/26/0834222)
SublimeText 2 で SidebarEnhancements を使用する

# SublimeText 2 で SidebarEnhancements を使用する

- 参考: https://github.com/titoBouzout/SideBarEnhancements/issues/172
- ctrl+` でコンソールから以下を実行

```py
import os; path=sublime.packages_path(); (os.makedirs(path) if not os.path.exists(path) else None); window.run_command('exec', {'cmd': ['git', 'clone', 'https://github.com/titoBouzout/SideBarEnhancements', 'SideBarEnhancements'], 'working_dir': path})

import os; path=sublime.packages_path(); window.run_command('exec', {'cmd': ['git', 'checkout', '37429739a0452a2dc36343fb7875ba7fcbeb88a9'], 'working_dir': os.path.join(path, 'SideBarEnhancements')})
```
Bootstrap3のpopoverで外側のどこをクリックしても閉じるようにする


以下を追加するだけ。

```
$('body').on('click', function(e) {
    $('.pointer').each(function() {
        if (!$(this).is(e.target) && $(this).has(e.target).length === 0 && $('.popover').has(e.target).length === 0) {
            $(this).popover('hide');
        }
    });
});
```

引用：http://jsfiddle.net/mattdlockyer/C5GBU/2/
pkgbuildでpreinstall/postinstallスクリプトを指定した場合にはちゃんとシェルスクリプト書かないとだめ

`pkgbuild`でインストーラを作成する際に、`preinstall`, `postinstall`という名前でシェルを書いておくと、インストール前/後 に実行されるわけですが（ファイル名を指定することももちろんできるけど）、

```shell-session
touch preinstall
touch postinstall
```

だと「インストールできませんでした」と言われ失敗する様子

```bash
#!/bin/bash
```

と書いておくとOK。少しハマった…orz

ちなみに、

```bash
#!/bin/bas
```


と書くと「インストールできませんでした」
Conoha VPS CentOS6.5(標準6.4からupdate)で起動時にエラーが出るときの対処


　Conoha VPSへ[標準OS]Cent OS 6.4 (64bit)を選択しインストールした後に、yum updateを実行しアップデートすると起動処理に+4分かかるようになります。
この現象は、インストール済みパッケージに含まれる「Cloud-init」の設定が、初期状態で機能しないために警告を出します。

```log
2014-04-28 22:30:19,146 - url_helper.py[WARNING]: Calling 'http://169.254.169.2542009-04-04/meta-data/instance-id' failed [50/120s]:request error HTTPConnectionPool(host='169.254.169.254', port=80): Request 
timed out. (timeout=50.0)]
2014-04-28 22:31:10,202 - url_helper.py[WARNING]: Calling 'http://169.254.169.254/2009-04-04/meta-data/instance-id' failed [101/120s]: request error [HTTPConnectionPool(host='169.254.169.254', port=80): Reques t timed out. (timeout=50.0)]
以下省略
```

Cloud-initパッケージは、Conoha VPSでは使用しないため、削除しても問題はありません。
よって次のコマンドで削除すれば解決します。
rpm -e cloud-init 
または
yum remove cloud-init
/etc/resolv.conf が勝手に書き換えられて悲しいときの対処法

DHCPクライアントな環境で、開発していると /etc/resolv.conf を直接書き換えてDNSサーバを追加しても、マシンを再起動したりすると元に戻ってしまって悲しい思いをすることがあると思います。

そんなとき、この方法を使うと悲しい思いをせずに済みます。

CentOS6.5, Ubuntu12.04, Debian など手元にあった環境では一通り使えたので割と汎用的に使えます。

/etc/dhcp/dhclient.conf に prepend domain-name-servers 192.168.30.1; を追記してネットワークを再起動すれば /etc/resolv.conf に反映されます。

詳しくは dhclient.conf(3) を読んでください。
Backbone.Routerが動かないよー (つд⊂) ってときの確認事項

## newしてない

```diff
  var MyRouter = Backbone.Router.extend({
  });
+ router = new MyRouter();
```

してください。

## history.start()してない

```diff
  var router = new MyRouter();
+ Backbone.history.start();
```

してください。

## pushStateの指定がない

```diff
- Backbone.history.start();
+ Backbone.history.start({ pushState:true });
```

この指定をしないと、ハッシュ"#"を使ったURLとして解釈されます。普通の静的っぽいURLで動かすならこの指定が必要。

## routing冒頭の"/"を取り除いていない

```diff
  routes: {
-   '/': 'home',
-   '/users/:id': 'showUser'
+   '': 'home',
+   'users/:id': 'showUser'
  },
```

"/"あると駄目。なんでだろね。

## 404用のroutingで上書きされてる

`routes`で`'*path':'notFound'`設定したりするんだけど、登録順序を考慮してやらんと全部`notFound`になっちゃう。全部`routes`に書くんじゃなくて、`notFound`だけ書いておいて、他は初期処理で[`route`を使って登録](http://backbonejs.org/#Router-route)すると良い。

（気が向いたらもっと詳しく書く）

## その他

コメントで教えてください。追加します。
rbenvでruby2.0.0-p0をインストールする時にハマった場合の対処方法

## ruby-buildをアップグレードする

以下、URLを参考にruby-buildをアップグレードします。
http://ka-zoo.net/2013/04/ruby-2-0-0-with-rbenv/

まずruby-buildにインストールしたいバージョンが含まれているか

```
ruby-build --definitions
```

無ければ更新します。

```
brew update 
brew upgrade ruby-build
```

ここでインストール

```
rbenv install ruby-2.0.0-p0
```

まだ下記のエラーが出る場合の対処

```
Inspect or clean up the working tree at /var/folders/7t/cpg9bzfj7jb4d8q1fgwq_sqm0000gn/T/ruby-build.20140430110655.78417
Results logged to /var/folders/7t/cpg9bzfj7jb4d8q1fgwq_sqm0000gn/T/ruby-build.20140430110655.78417.log

Last 10 log lines:
compiling ossl_x509crl.c
compiling ossl_x509ext.c
compiling ossl_x509name.c
compiling ossl_x509req.c
1 warning generated.
compiling ossl_x509revoked.c
compiling ossl_x509store.c
installing default openssl libraries
linking shared-object openssl.bundle
```

下記URLを参考に対処。4/14にreadlineのバージョンが6.2.4から6.3.3にバージョンアップしたのが原因で6.3.3ではまだ動かないとか何とからしく、
6.2.4にダウングレードすればうまく動くようです
http://qiita.com/manuluu/items/85c42e2ddd03c4832c28

## readline6.2.4へ切り替え

```
brew switch readline 6.2.4
```
SciPy で正規分布を生成する

確率分布の重要性については[以前に強調してきた](http://qiita.com/ynakayama/items/e41f592ad7fe02f23c1c)通りですが、その中でも特に正規分布は最も重要な分布と考えられます。

## 正規分布とは

観測する点の分布を増やしていくと期待値と分散が以下の値に近づくとき、正規曲線が描かれます。

```math
E(X) → \mu \\
V(X) → \sigma^2
```

この正規曲線を密度関数とするような分布を **正規分布 (Normal distribution)** と言います。

いままでよく出てきた N(μ, σ^2) という正規分布の表現は、期待値が μ 、分散が σ^2 (標準偏差の二乗) に一致することを指します。

## 正規分布の重要性

前述した通り、正規分布はそれを仮定する場面が最も多いと言える分布です。

まず自然現象や社会現象には正規分布に従うと考えられるものがきわめて多数存在します。

また、[漸近理論でも説明しました](http://qiita.com/ynakayama/items/2ffe29a943c266cae425)が、大きな数を扱うときはその分布は正規分布に限りなく近似していきます。忘れた方はもう一度、中心極限定理を思い出しましょう。

母集団が正規分布に従うときは、標本の関数はよく知られたメジャーな分布になります。

## 標準正規分布表とは

これも以前に紹介しましたが、平均 0 分散 1 の正規分布 N(0,1) を標準正規分布と言い、その数表を正規分布表と言います。正規分布表は検索すればいくらでも出てきますが、筆者は以下の表をいつも参照しています。

標準正規分布表
http://www.koka.ac.jp/morigiwa/sjs/standard_normal_distribution.htm

標準正規分布表
https://staff.aist.go.jp/t.ihara/normsdist.html

正規曲線の方程式 (= 正規分布の確率密度関数) は以下のように記述できます。

```math
y = \frac {1} {\sqrt{2\pi}\sigma}e^{-\frac {(x-\mu)^2} {2\sigma^2} }
```

この式から N(0,1) に従う Z を導くことを標準化と言います。

X は N(μ, σ^2) に従い、 Z は N(0,1) に従うというわけです。

## SciPy で正規分布を発生させる

これも今まで登場してきましたがあらためて紹介します。

```py3
from scipy.stats import norm

print( norm.mean(), norm.std(), norm.var() )
#=> (0.0, 1.0, 1.0)
# 正規分布の平均は 0 、標準偏差と分散は 1 となる

# 正規分布に従う 10 個の変数を乱数生成する
r = norm.rvs(size=10)
print( r )
# => [-0.14257586  1.4193167  -1.74553227 -0.1446086  -0.84588791  0.6521945  0.38792576  1.12649729 -1.04827952  1.26594555]

# ランダムなので 平均 0 分散 1 に近似した値が観測される
print( r.mean(), r.std(), r.var() )
# => (0.092499564763084963, 1.0138488700256538, 1.0278895312522951)
```

## 参考

Statistics (scipy.stats)
http://docs.scipy.org/doc/scipy/reference/tutorial/stats.html
【書評】Xcodeの「全機能」を網羅した全752ページの解説書

（2016.9.1 追記）本書は今では絶版になっていますが、Kindle版はまだ購入可能です。多くの機能は現行バージョンでも使えますので、今でも有用だと思います。

---

<b><span class="deco" style="color:#FF0000;">752ページ</span></b>（!!!!） という超特大ボリュームの Xcode 5 解説本が発売されました。世の中に「徹底解説」を謳う解説本は数あれど、 <b>本当に「全機能」を網羅している本</b> は初めてみたかもしれません。


<a href="http://www.amazon.co.jp/exec/obidos/ASIN/4798041114/22301-22/ref=nosim/"><img src="http://f.st-hatena.com/images/fotolife/s/shu223/20140430/20140430084512.jpg" width="400"></a>


（iPhone5sとの比較。分厚さが伝わりますでしょうか）

<img src="http://f.st-hatena.com/images/fotolife/s/shu223/20140430/20140430102540.jpg">


##対象読者：入門者から上級者まで！

目次を見てみると、「Xcode とは」「Xcode をインストールする」から始まるので、 **Xcodeを未ダウンロードな入門者** から読めますし、「xcodebuild コマンドを使ってビルドする」「ユニットテストを実現する XCTest」「Xcode サーバーと Bot でテストを自動化する」といった  **中級者向け** の内容もがっつり解説されています。


また、Xcode を使いこなしている上級者といえど、なかなかこの 752 ページの内容を全て把握してる人はいないんじゃないかなと。そういう意味では、それこそ入門者から上級者まで、iOSアプリ開発に携わる人全員に何かしらのお役立ち情報があるのでは、と思います。


<div class="amazlet-box" style="margin-bottom:0px;"><div class="amazlet-image" style="float:left;margin:0px 12px 1px 0px;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4798041114/22301-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/51KcaY%2Bdj3L._SL160_.jpg" alt="Xcode5徹底解説 for iOS/OSX" style="border: none;" /></a></div><div class="amazlet-info" style="line-height:120%; margin-bottom: 10px"><div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4798041114/22301-22/ref=nosim/" name="amazletlink" target="_blank">Xcode5徹底解説 for iOS/OSX</a><div class="amazlet-powered-date" style="font-size:80%;margin-top:5px;line-height:120%">posted with <a href="http://www.amazlet.com/" title="amazlet" target="_blank">amazlet</a> at 14.04.29</div></div><div class="amazlet-detail">熊谷 友宏 <br />秀和システム <br />売り上げランキング: 31,269<br /></div><div class="amazlet-sub-info" style="float: left;"><div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4798041114/22301-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jpで詳細を見る</a></div></div></div><div class="amazlet-footer" style="clear: left"></div></div>


全ページを通して読んでみた感想としては、全項目の冒頭に「◯◯とは」「この機能はどんなときに役立つのか」という説明があるので、 <b>目次だけではなく、各項の冒頭だけでも一通り目を通す</b> という読み方をするといいんじゃないかなと思いました。


##詳しい内容

下記記事に、実際に読んでみて勉強になったことなどをまとめましたので、ピンと来た方はぜひご参照ください！

[『Xcode 5 徹底解説』書評](http://d.hatena.ne.jp/shu223/20140430/1398815420)
Basic Usage of React.JS with Gridster


(今回のタイトルはどうですか？)

I've been wondering about how to apply jQuery plugins like Gridster while keeping elements inside those compounds as React components. One example I found was a demo using [jQuery-sortable](https://gist.github.com/petehunt/7882164), done by Pete Hunt. I decided to try to steal his design while trying to fit it to better fit usage in Gridster.

I don't know if there's a whole lot to say, other than that I prevent render() from doing much and rely on gridster to handle DOM manipulation and mount the components myself.

I think there are some obvious enhancements that could be made here though, like adding event handler methods to make the grid alert changes back to the application in order to update the application of different items' positions on the grid and their sizes (with resizing enabled).

Demo is here: http://jsfiddle.net/kimagure/Hg74E/2/

Repo is here: https://github.com/kimagure/gridster-component

If you have any suggestions or questions, please leave a comment. Thanks!
Xcode5.0＋ARC環境で非NSObject型のプロパティのsetアクセサのセマンティクス指定子を省略した場合のデフォルト値


Xcode5.0＋ARC環境でプロパティのsetアクセサのセマンティクス指定子を省略した場合のデフォルト値は`strong`のようですが、int等の非NSObject型の場合も`strong`というのはおかしかということで調べてみました。

```objc:Hoe.h
@interface Hoe : NSObject

@property (nonatmic) int intValue;

+ (void)showPropertyAttribute;

@end
```

```objc:Hoe.m
#import "objc/runtime.h"

@implementation Hoe

+ (void)showPropertyAttribute {
    unsigned int outCount;
    objc_property_t *properties = class_copyPropertyList([self class], &amp;outCount);

    for (int i = 0; i &lt; outCount; i++) {
        objc_property_t property = properties[i];
        fprintf(stdout, &quot;%s\n&quot;, property_getAttributes(property));
    }
}

@end
```

**結果**

```
Ti,N,V_intValue
```

というわけで、非NSObject型の場合はデフォルトは`strong`ではなく`assign`であることが分かりました。
zshの履歴削除


既に履歴として付いてしまったものは

```
vim $HISTFILE (=~/.zsh_history)
```
などと履歴ファイルを直接編集し、普通にエントリを削除するだけでOK。

なお、パスワードを直接コマンドラインで渡すなど事前に予見出来る場合は

```
setopt HIST_IGNORE_SPACE
```
と設定した前提で、先頭スペースを付けておけばログには記録されないので安心。

### 参考
[How to remove an entry from the history in ZSH - Stack Overflow](http://stackoverflow.com/questions/7243983/how-to-remove-an-entry-from-the-history-in-zsh)


### おまけ

oh-my-zshの履歴の部分検索の設定例

```.zshrc
source $ZSH/plugins/history-substring-search/history-substring-search.zsh

# bind k and j for VI mode
bindkey -M vicmd 'k' history-substring-search-up
bindkey -M vicmd 'j' history-substring-search-down
```

詳細はこの辺が参考になりました。
[zsh-users/zsh-history-substring-search](https://github.com/zsh-users/zsh-history-substring-search)
ClipMenu設定


ClipMenu設定は以下のキャプチャの通りに。

##一般
![kobito.1398819676.855302.png](https://qiita-image-store.s3.amazonaws.com/0/34439/25c96587-9bf4-d141-b379-0a8982cdeb8c.png "kobito.1398819676.855302.png")


##メニュー
![kobito.1398819700.646959.png](https://qiita-image-store.s3.amazonaws.com/0/34439/67f74d45-3c5d-a2c6-b0be-e39554ee5dfc.png "kobito.1398819700.646959.png")


##ショートカット
![kobito.1398819716.534672.png](https://qiita-image-store.s3.amazonaws.com/0/34439/dd747a6d-5672-1612-56f4-aa99a6c24685.png "kobito.1398819716.534672.png")


##その他の項目
- 対話形式
- アクション
- スニペット
- アップデート

上記の内容はデフォルトのまま。
Kobitoメトリクス


Kobitoが保存しているSQLiteデータベース ``~/Library/Kobito/Kobito.db`` を直接参照して調べる。

コードを書くのが面倒な場合は、[SQLite Professional](https://www.sqlitepro.com/)やIDEのデータベース参照機能などのツールを使ってクエリを実行するのが吉。

念の為、Kobitoアプリは終了しておきSQLiteデータベース参照中はノートを更新しないか、別にファイルコピーしたSQLiteデータベースを参照したりすること。

## ノートの数

ゴミ箱以外にあるノートの数。

```sql
SELECT COUNT(*) FROM ZITEM WHERE ZIN_TRASH IS NULL;
```

## 毎月のノート作成数

毎月どれくらいノートを作成しているか。

```sql
SELECT strftime('%Y-%m', ZCREATED_AT, 'unixepoch', 'localtime', '+31 years') AS m, count(*) AS c
 FROM ZITEM WHERE 1 GROUP BY strftime('%Y-%m', ZCREATED_AT, 'unixepoch', 'localtime', '+31 years');
```
Ubuntu14にnodebrewでサクッとnode.jsを入れたい

Vagrantで動かしてるUbuntu14.04にそろそろnode.jsを入れてやろうとnodeのバージョン管理ツールどれがいいかな～とか模索した結果[nodebrew](http://jxck.hatenablog.com/entry/20120224/1330035058)を選んだ。http://jxck.hatenablog.com/entry/20120224/1330035058 辺りとか。

## 導入
READMEに沿ってDL→インストールしていくわけだが。

```sh
$ wget git.io/nodebrew
$ perl nodebrew setup
```

別に`curl -L git.io/nodebrew | perl - setup`でも構わないんだが503エラー吐かれててもわからなかった過去が()

.bashrcや.zshrc等に次を追加

```sh
export PATH=$HOME/.nodebrew/current/bin:$PATH
```

.bashrcをリロード

```sh
$ source ~/.bashrc
```

## node.jsをインストール

とりあえず`nodebrew install latest`ってしてやるとnode.jsの最新版をDLしてコンパイルし始める。

しかし、v8辺りでエラー起こすんですね…何度もループするから`Ctrl`+`C`でとりあえず止めてやる。

<div class="alert alert-info"><ins><b>追記</b>　最近のバージョンのnode（v4 LTSとか）だったら問題ないはずだしむしろ古いのだとダメだからな？というかインストールに時間かけるの無駄だし素直に<code>install-binary</code>しような？</ins>
<br><br>
（以下古い話）</div>

[どうやらg++4.8が原因らしい。](http://stackoverflow.com/questions/21542983/cant-make-node-js-ubuntu-13-10)

g++4.7ならいけるらしいんでapt-getしてやる。

```sh
$ sudo apt-get install g++-4.7
```

g++のバージョンを渡してやってやり直す。

```sh
$ CXX=g++-4.7 nodebrew install latest
```

気長に待てば多分出来上がる。

セットしてやる

```sh
$ nodebrew use latest
```

チェック

```sh
$ node -v
v0.11.12
```

npmも試しておく

```sh
$ npm -v
1.4.3
```

LESSでもインストールしてみる

```sh
$ npm install -g less

...
/home/vagrant/.nodebrew/node/v0.11.12/bin/lessc -> /home/vagrant/.nodebrew/node/v0.11.12/lib/node_modules/less/bin/lessc
less@1.7.0 /home/vagrant/.nodebrew/node/v0.11.12/lib/node_modules/less
├── mime@1.2.11
├── mkdirp@0.3.5
├── clean-css@2.1.8 (commander@2.1.0)
├── source-map@0.1.33 (amdefine@0.1.0)
└── request@2.34.0 (json-stringify-safe@5.0.0, forever-agent@0.5.2, aws-sign2@0.5.0, qs@0.6.6, tunnel-agent@0.3.0, oauth-sign@0.3.0, node-uuid@1.4.1, tough-cookie@0.12.1, form-data@0.1.2, http-signature@0.10.0, hawk@1.0.0)

$ lessc -v
lessc 1.7.0 (LESS Compiler) [JavaScript]

```

お疲れ様です。

<div class="alert alert-info">このときはすっかり忘れてたけどbinary-installならバイナリからインストールできる訳だしこの問題はとりあえず飛ばせる。でもnode-gypのコンパイルでg++47が必要なことがあるらしい。(コメント参照)<br />
自分はしばらくDebian系でnode使ってないから確認してないけど。</div>
クラウド・VMで使えるネットワークアプリケーション


## vyatta

仮想マシンとして動作するソフトウェアルータ。
NATや、ダイナミックルーティング（RIP、OSPF、BGP）、Firewall、VPNなどの機能を持っている。
クラウドでは端末やサーバ間、ルータとのVPN接続例が多い。

## SoftEther VPN
http://ja.softether.org/

SoftEther VPN のオープンソース版。
端末・拠点間VPNが可能で、L2TP・IPSec・SSTPに加えてSSL-VPNに対応している。
OpenVPNに対して多くの機能、パフォーマンスの高さを売りにしている。
クラウドを管理できるサービス・ソフトウェア


## Prime Cloud Controller
http://www.primecloud-controller.org/

対応クラウド
* AWS（Amazon Web Services）
* NIFTY Cloud
* VMWare
* CloudStack
* IDCフロンティアクラウドサービス
* NTTCom Cloud n
* SCSK USiZE

連携ツール
* Zabbix

## SCALR
http://www.scalr.jp/

対応クラウド
* AWS（Amazon Web Services）
* IDCフロンティアクラウドサービス
* Rackspace
* Google Compute Engine
* OpenStack
* CloudStack
* Eucalyptus

## RightScale
http://www.rightscale.com/

対応クラウド
* AWS（Amazon Web Services）
* Microsoft Windows Azure
* Datapipe
* Google Cloud Platform
* HP Cloud
* Rackspace
* IBM SoftLayer
* CloudStack
* OpenStack
* VMware vSphere

## Hinemos
http://www.hinemos.info/

対応クラウド
* AWS（Amazon Web Services）
* [NTTコミュニケーションズ Cloudn](http://www.nttdata.com/jp/ja/news/release/2014/042300.html)
* [NTTコミュニケーションズ Bizホスティング Enterprise Cloud](http://www.nttdata.com/jp/ja/news/release/2014/042300.html)
C#で競技プログラミング用コードの メモ(標準入出力)

　お仕事でC#がメインとなるので、練習がてら競技プログラミングもC#メインで使ってみようという話。
そこで自分用メモとして標準出力・入力や文字列操作などに必要な最低限のメソッドをまとめてみました。
Qiita練習も兼ねてまずは標準入出力から

項目の部分は
Atcoderの練習ページを元にしました。

```csharp:IOtest.cs
using System;
class Program
 {
        static void Main(string[] args)
        {
	　　int a,b,c;
            a = int.Parse(Console.ReadLine()); //標準入力
            string[] str = Console.ReadLine().Split(' ');//2つ以上のスペース区切り入力の取得
            b = int.Parse(str[0]);  //数値で受け取りたい場合は変換する
            c = int.Parse(str[1]);
　　　　　　　Console.Write("改行なし a = {0} b = {1} c = {2}", a, b, c)//改行なし出力
            Console.WriteLine("改行あり a = {0} b = {1} c = {2}", a, b, c);//改行付き出力
        }
 }
```

今のところはここまでで文字列操作、ファイル入力など必要なものが出てきたら追記する。
Rails(v4)チュートリアル5章メモ


## BootstrapとカスタムCSS

```custom.css.scss
@import "bootstrap";
```

custom.css.scssにbootstrap-sassをimport使用としたら起きたエラーは
下記URLを参考に解決。(sprocketのバージョンの相性が問題みたい？)

http://fuzz-jpn.com/blog/bootstrap-sass_nomethoderror/


## パーシャル (partial)

- レイアウトのパーツはpartialで切り分けてrenerで表示
- 「layout/_〇〇.html.erb」のような形でファイル名の先頭に「_」(アンダースコア)入れる
- 使うときは「<%= render 'layouts/header' %>」のようにアンダースコアを外したファイル名で指定する

## SassとAsset Pipeline

### Asset Pipeline

- アセットディレクトリ
  - app/assets: 現在のアプリケーション固有のアセット
  - lib/assets: あなたの開発チームによって作成されたライブラリ用のアセット
  - vendor/assets: サードパーティのアセット
- マニフェストファイル
  - アセットディレクトリのファイルを1つのファイルにまとめる
  - 実際にまとめるのはSprockets gemが行う
  - マニフェストファイルはCSSとJavaScriptには適用されますが、画像ファイルには適用されません
  - 以下にもう少し詳細を記述
- プリプロセッサエンジン
  - マニフェストファイルを用いてアセットファイルを結合
  - どのプリプロセッサを使用するかを、ファイル名の拡張子を使用して判断します(最も一般的な拡張子は、Sass用の.scss、CoffeeScript用の.coffee、埋め込みRuby (ERb) 用の.erbです。)
  - プリプロセッサエンジンはつなげて実行する (chain) ことができます。
    - foobar.js.erb.coffee
      - 上の拡張子の場合は、CoffeeScriptとERbの両方で実行されます (コードは右から左へと実行されますので、この例ではCoffeeScriptが最初に実行されます)。

#### アプリ固有のCSS用マニフェストファイル

```app/assets/stylesheets/application.css
/*
 * This is a manifest file that'll automatically include all the stylesheets
 * available in this directory and any sub-directories. You're free to add
 * application-wide styles to this file and they'll appear at the top of the
 * compiled file, but it's generally better to create a new file per style
 * scope.
 *= require_self
 *= require_tree .
 */
```

上の行で重要な部分は実はCSSコメントの中にあります。以下の行は、適切なファイルをインクルードするためにSprocketsによって使用されます。

```
/*
 .
 .
 .
 *= require_self
 *= require_tree . 
 */
```

- *= require_tree . 
  - app/assets/stylesheetsディレクトリ (サブディレクトリを含む) のすべてのCSSファイルをアプリケーションCSSにインクルードするようにします (このドットも必要です)。  
- *= require_self
  - CSSの読み込みシーケンスの中で、application.css自身もインクルードすることを指定しています。

## Railsのルート

```
get 'static_pages/help'

↓

match '/help', to: 'static_pages#help', via: 'get'

# 以下のようにデータにアクセスできるようになる(link_toなどのヘルパーから)
# help_path -> '/help'
# help_url  -> 'http://localhost:3000/help'

```
Codeaを使ってiPadでアプリ開発(概要)

iPadでiPadアプリが作れるiPadアプリ「Codea」を使ってみた。
[Codea](http://twolivesleft.com/Codea/)

iPadでコーディングなんて、どうせまともにコーディングできないんでしょ？と思ってしまうが、
これが意外と本格的に開発ができる。作成したアプリのリリースも可能。
特徴をまとめると、

1. 言語はLua、Processing風のフレームワーク
1. 予測変換や便利ボタンで、少ないタイピングでコーディングが可能
1. 画像、音の素材はDropBoxから取得
1. WiFi経由でPC/Macでコーディングもできる
1. XCodeのプロジェクトでエクスポートできる
1. Objective-Cでadd-onを作れる

という感じ。

***

###1. 言語はLua、Processing風のフレームワーク
Lua言語でコーディングする。ちょっと特殊なのは

* class()で疑似クラスを作成
* 作成したファイルはrequire不要で勝手にロードされる
* local c = ClassName() とすると、ClassName:init()が呼ばれる

といったところ。
Processing風のフレームワークになっていて、
init, draw, touch メソッドをそれぞれ実装していく。
Web版のリファレンスは[こちら](http://twolivesleft.com/Codea/Reference/)。リファレンスはCodeaのアプリ内に入っているので、開発しながら参照可能。

###2. 予測変換や便利ボタンで、少ないタイピングでコーディングが可能
これは[公式ページ](http://twolivesleft.com/Codea/)の動画を是非見てほしい。

* 色はカラーピッカー、素材はダイアログで選択可能
* 予測変換機能があり、例えば"image"と入力したい場合は"i"を入力した時点で"image"が表示されるので、これをタップすれば良い
* コーディングでよく使用する、括弧や演算子、インデント等は、ソフトキーボードに専用のボタンが用意されている

###3. 画像、音の素材はDropBoxから取得
DropBoxと連携し、DropBoxから画像や音素材を取得できる。
画像はカメラロールからも取得可能。
用意されているサンプルアプリの素材が他のアプリでも選択可能となっていて、これも使用可能。

###4. WiFi経由でPC/Macでコーディングもできる
"エアコード"という機能。
PC/MacのブラウザからCodea上のアプリのコーディングを行うことができ、
Codea上のアプリには入力したコードが即時反映される。

###5. XCodeのプロジェクトでエクスポートできる
Codeaで作成したアプリは、エクスポートすることが可能。
XCodeのiOSプロジェクトとして出力されるので、作成したアプリをリリースすることもできる。

###6. add-onを作れる
最後の手段、add-on。
Objective-Cでadd-onを作成し、それをLuaから呼び出すことができる。
add-onはXCode上で作成するしかないので、Codeaで一通り作成し、エクスポートしたアプリに、
広告等を付けたい場合に使える。


***


だいたいこんな感じ。
簡単なカジュアルゲームであれば、十分開発できると思う。
非常に残念なのが、Android用にエクスポートできないところ。
[Moai SDK](http://getmoai.com/moai-sdk.html)で実行するための[RunTimeを作ってくれている人がいる](https://github.com/tnlogy/codea-samples/tree/master/Codea%20Moai%20Runtime)のだが、試してみたところうまく行かなかった。
Codeaで作ったLuaのソースを、結構修正しないとダメっぽい。

ちなみにCodeaと同様に、iPad上でアプリ開発が可能なアプリとして、[ScriptKit](http://scriptk.it/)というものがある。
Codeaと比較すると、ユーティリティ系のアプリに向いているとか。


とりあえずここまで。
macでvagrantとansible入れてping-pongまで

軽い気持ちでAnsible試そうとしたらスタート地点で壮大にハマりました。
以下メモ

環境はMac OSX 10.9

[Ansibleチュートリアル日本語](http://yteraoka.github.io/ansible-tutorial/)を
見て試していたのですがpingで躓いたです。

####sshのconfigはいつもの場所のを使いましょう
チュートリアルではsshのconfigファイルをssh_configという名前でVagrantfileの場所に作成していましたが、これが良くなかった主犯ぽいです。
vagrant ssh-config node >> ~/.ssh/config とかやるとちゃんとvagrant ssh じゃなくてもssh出来るようになります。

####hostsファイルの記述内容に気をつけましょう
カレントにhostsファイルを作成し、ansibleコマンドの時に -i hosts って追加しろと
記載がある。そうすることでhostsファイルに書いてあるサーバーにアクセスする。

hostsファイルにipを記述した場合、その名前に対してansible -m ping を実行するようだ。
チュートリアルのここで躓いた。具体的にはsshの接続情報が正しく扱えないと失敗する。
※192.168.33.12とかいう名前(Host)、sshのconfigになくね？って感じで失敗する模様

なので、hostsファイルにはipを記述するんじゃなくてsshのconfigに設定したHostの名前を、遡るとvagrant ssh-config で指定した名前を書いておくべき。
ついでにansible xxx -i hosts -m ping ってnode名じゃなくてグループ名でもいけますね。
最新のプログラミング知識へのアップデート

自分が現役でプログラミングをやっていた時期はPHP4全盛期で、クラスも使わず、データベースもmysql_関数を直接使うような時代でした。もちろんテンプレートエンジンやフレームワークも使わず、HTMLにPHPのロジックを直書きです。JavaScriptもほとんど使っていなかったと思います。

それから数年プログラミングの世界から離れていて、つい最近舞い戻ってきたのですが、あまりにも技術が進歩していて、加齢プログラマにはついてゆくのが大変です。

新しい技術は、前提として知っていなければならない知識が多いのですね。

そんなわけで、カムバックしてから学んだことをまとめました。

## PHP系

他の言語、具体的にはRuby on Railsも何度か挑戦したのですが、PHPで出来ることばかりなので、なんとなくモチベーションが上がらなくて最近はやってません。でもRuby界隈は楽しそうで羨ましい。

### PDO

http://php.net/manual/ja/book.pdo.php

データベースを抽象化して扱えるクラスです。DBを扱うときはほぼ必須です。接続先がMySQLであるとかPostgreSQLであるとかあんまり考えなくてもいいので楽です。

### Symfony

http://symfony.jp/

PHP用のウェブアプリケーションフレームワークです。いろんな定形処理を簡単にやってくれます。PHP用のフレームワークは星の数ほどありますが、Symfonyはとてもしっかりした作りで安心感がありオススメです。

### Slim

http://www.slimframework.com/

PHP用のマイクロフレームワークです。軽量です。Symfonyほどの機能は要らないけどルーティングを自前で書くのが面倒だなーと思ったときのベストチョイスでした。同じようなものにSilexとかいうのもありますが、こっちのほうがなんとなく好き。

## JavaScript系

### TypeScript

http://www.typescriptlang.org/

JavaScriptのフワフワしたところをカッチリ固めてくれる上位互換言語です。JavaScriptにコンパイルできます。実はまだ導入していません。もう少し大規模なプロジェクトになったら導入したいです。

### jQuery

http://jquery.com/

これはメジャーすぎると思うので詳しい解説は省きますが、JavaScriptのブラウザ間におけるややこしい差異を吸収したりして簡単に記述できるライブラリです。実は自分はJavaScript自体は詳しくなくて、jQueryにべったり依存しています。

### AngularJS

https://angularjs.org/

jQueryを規模が大きくなった業務システムに適用・保守するのはかなり難しいです。餅は餅屋、ということで最近はAngularJSを使っています。jQueryが苦手としているデータバインディングを強力にサポートしてくれます。信頼のGoogle製です。

## ツール

AngularJSを使おうと思ったらYeomanというツールを使うのが良いと聞いて

```
npm install -g yo
```

で簡単にインストールできるyo! とか書いてあるけど失敗しまくるし、謎の知らないツールを大量に導入されるので情緒不安定になりました。なのでYeomanで使っているツールを全部理解したらリベンジしたいです。

### Composer

https://getcomposer.org/

PHPのライブラリを管理してくれるツールです。最近はPearよりこっちを使うのがナウいらしいです。上で紹介したSlimはComposerで導入しました。あとはオートロードという優れた機能がありまして、自作のクラスをPSR-0とかPSR-4という規約に準拠して作成しておけば、requireしなくてもクラスを使うことができます。便利。規約は以下のようにとてもシンプルです。

http://www.infiniteloop.co.jp/docs/psr/psr-0.html

### npm

https://www.npmjs.org/

サーバサイドJavaScriptであるNode.jsのライブラリ管理ツールです。なぜかNode.js関係以外でもいろいろと使われているようです。YeomanやBowerやGruntをインストールするのに必要だったので導入しました。

### Bower

http://bower.io/

JavaScriptのライブラリその他を管理するやつです。JavaScriptライブラリくらい手作業でダウンロードすればいいじゃん！と思っていたのですが、ライブラリが増えてくると管理もバージョンアップも大変になるので、Bowerを使うと超便利です。

### Grunt

http://gruntjs.com/

Makeみたいなものでしょうか？TypeScriptをコンパイルしてJavaScriptを生成したり、SassをコンパイルしてCSSを作成したり、複数のJavaScriptファイルをひとつにまとめてMinifyしてくれたりするらしいお役立ちツールですが、まだあまり活用していないです。

### Bootstrap

http://getbootstrap.com/

デフォルトで綺麗なボタンやテーブルが作れるCSSのフレームワークです。段組がとっても楽です。あと勝手にモバイル対応してくれます。

## まとめ

今業務で作成しているアプリはフロントエンドがAngularJS+Bootstrap、バックエンドがPHP+Slim+MySQLで、フロントとバックの通信はRESTに準拠したものにしています。

最初は覚えることが多すぎて面倒だったのですが、ライブラリやツールや規約の登場した理由を知ると納得できて、とても効率的に開発することができるようになりました。
リフレクションを使って集合の問題を解いてみる

リフレクションを使って集合の問題を解いてみる
=========
2014/04/29 @suharahiromichi

# はじめに
リフレクションというと、論理式とbool式の関係が重要だが、それ以外にも集合演算と論理演算の関係も馴染み深い。もちろん、SSReflectはその機能を持っている。そのリフレクションを使って問題を解いてみる。

# 定理：B ⊆ A のとき、A - (A - B) = B を証明する。


```

Require Import ssreflect ssrbool ssrnat.
Require Import fintype finset.

Variable T : finType.

Theorem a_a_b__b (A B : {set T}) : B \subset A -> (A :\: (A :\: B)) = B.
Proof.
  (** (B ⊆ A) -> (A - (A - B)) = B *)
  move/setIidPr/setP => H. apply/setP; move: H.
  rewrite /eq_mem.

  (** (x ∈ (A ∩ B)) = (x ∈ B) -> (x ∈ A - (A - B)) = (x ∈ B) *)
  move=> H x; rewrite -(H x) {H}; apply/setDP/idP.

    (** ((x ∈ A) /\ ~(x ∈ (A - B)) -> (x ∈ A ∩ B) *)
    rewrite -in_setC setDE setCI => [[H]].
    move/setUP => H_ab; apply/setIP.
    by split; [ |
                case: H_ab => [H_a | H_b];
                [move/setCP in H_a | rewrite setCK in H_b]].

  (** (x ∈ A ∩ B) -> ((x ∈ A) /\ ~(x ∈ (A - B)) *)
  rewrite -in_setC => /setIP [Ha Hb].
  by split; [ |
              apply/setCP; rewrite /not => /setDP; elim => [_ H_b]; 
              move: H_b; rewrite -in_setC => /setCP].
Qed.


```

# finset内の補題を使って証明する。
実は、finsetの中の補題を使用すると、reflectionを使わずに解けてしまう。もちろん、これらの定理はreflectionで証明されているのだけれど。

```

Theorem a_a_b__b' (A B : {set T}) : B \subset A -> (A :\: (A :\: B)) = B.
Proof.
  move=> H.
  rewrite setDDr setDv set0U.
  by apply/setIidPr.
Qed.


```
注意：このふたつの証明の間に相互の対応はない。


```

(* $Id:$ *)
```
[SystemVerilog]Sublime Text 3で簡単なSyntaxチェック

試しにやってみたらうまくいったのでメモ。

##必要なもの
ModelSim ASE

##Sublime Textでビルドって？
Sublime Textにはビルドシステムを備えていて、Windowsだと、`Ctrl`+`b`で書かれた言語をビルドすることができる。

Sublime Text 3ではPythonやRubyのビルドシステムが入っている。

ビルドの設定はJSONで記述する。詳しいところはこちらに書かれている。
http://sublime-text-unofficial-documentation.readthedocs.org/en/latest/reference/build_systems.html

JavaScriptとかは探すと出てくる。
SystemVerilog？ありませんよ。

というわけで作ってみました。環境はWindows 7です。

##作成
`Tools`->`Build System`->`New Build System...`を選択すると、以下のような雛型が生成される。

```json:untiltled.sublime-build
{
	"shell_cmd": "make"
}
```

ModelSim ASEを前提なので、下記のようなファイルを作ってみた。

```json:SystemVerilog.sublime-build
{
	"cmd": ["vlib", "work"],
	"variants": [
		{
			"cmd": ["vlog", "-sv", "${file}" ],
			"name": "Run"
		}
	]
}
```

うまく保存できていれば、下記のようにビルドシステムにSystemVerilogが現れる。
![tool.png](https://qiita-image-store.s3.amazonaws.com/0/32925/edec8feb-06a3-ebbd-abc7-f92757b1219d.png)


##実行
サンプルコード

```sv:tb.sv
module tb();

  initial begin

     $write("Hello, World\n");

  end

endmodule
```

###`Ctrl`+`b`実行直後
![build.png](https://qiita-image-store.s3.amazonaws.com/0/32925/75d945c4-de83-c98e-c9bb-db89376e869a.png)

###その後、`Ctrl`+`Shift`+`b`
うまくいくとこんな感じ
![run.png](https://qiita-image-store.s3.amazonaws.com/0/32925/a2f262f6-9e32-1c7d-5daa-29fd31890d63.png)

Typoがあるとこうなる。
![error.png](https://qiita-image-store.s3.amazonaws.com/0/32925/96832db0-3ce1-c4c9-8aa4-8e485484a8ed.png)


##おわりに
自分のようにTypoが結構ある場合は、先に `vlib work`させて、`"cmd": ["vlog", "-sv", "${file}" ]`のみだけ記述し、`Ctrl`+`b`だけSyntaxチェックさせた方が良いのかもしれない。

あくまでSyntaxチェックだけなので、本格的にやる場合はツールをつかうということで。いや、エラボレーションまでできるかなぁ？