OmniAICreator/Qiita-1.07M huggingface dataset:
arduinoでパルスジェネレータ

#概要
arduino nanoでパルスジェネレータをやってみた。
#写真
![MVC-021S.JPG](https://qiita-image-store.s3.amazonaws.com/0/18104/9d05dccb-2e27-59f9-cda0-14990759c929.jpeg)

#ログ
![pulse.JPG](https://qiita-image-store.s3.amazonaws.com/0/18104/7d688470-e4f4-27f8-7a14-cafb0a70b1b1.jpeg)

#サンプルコード
```
#include <MsTimer2.h>

void timer2()
{
	digitalWrite(13, HIGH);
	delay(1);
	digitalWrite(13, LOW);
}
void setrev(int rpm)
{
	unsigned long ms = 60000 / rpm;
	MsTimer2::set(ms, timer2);
	MsTimer2::start();
}
void setup()
{
	pinMode(13, OUTPUT);
	Serial.begin(115200);
	digitalWrite(13, HIGH);
	setrev(1000);
	Serial.println("setrev 1000rpm");
}
void loop()
{
	String line = Serial.readStringUntil('\n');
	int rpm = line.toInt();
	if (line != "")
	{
		if (rpm == 0)
		{
			Serial.println("error");
		}
		else
		{
			Serial.print("rpm : ");
			Serial.println(rpm);
			setrev(rpm);
		}
	}
}
```
GASでスプレッドシートをjsonに変換してダウンロード

リソースファイルの管理・運用に共同作業が可能で、操作もエクセルライクで扱い易いGoogleDriveのスプレッドシート。  
このスプレッドシートを実際のリソースとして扱う際はJsonに変換するという方も少なくないはず。
そのような時は、ファイルをcsv書き出し -> jsonに変換するスクリプトを別途用意して、処理するという手順をとるかと思います。  
しかし、できれば直接スプレッドシートの編集画面上からjsonをダウンロードできないものかと思い、 GASで作ってみました。

サンプルはこちらの[Gist](https://gist.github.com/kei-p/b9517b901c32bbc622ed)に書いてありますので、重要な箇所だけを解説していきます。

## JSONファイルをGoogle Drive上に作成 
直接ファイルをダウンロードさせる方法が見つからなかったので、一度Json形式のテキストをGoogle Drive上にファイルとして作成します。

```download_json.js
  var folder = DriveApp.getFolderById(folderId);
  
  body = renderToJson(data);
  
  var blob = Utilities.newBlob("", contentType, fileName).setDataFromString(body, charSet);
```

## ダウンロードダイアログを表示
作成したファイルの`url`、およびプレビュー用の`body`をグローバル変数として用意しておきます。

そして、"donwload.html"という名前でテンプレートファイルを作成して


```download_json.js
  body = renderToJson(data); // プレビュー用

  var blob = Utilities.newBlob("", contentType, fileName).setDataFromString(body, charSet);

  var fileId = DriveApp.getFolderById(folderId).createFile(blob).getId();
  url = "https://drive.google.com/uc?export=download&id=" + fileId; //ダウンロード用URL
  
  var output = HtmlService.createTemplateFromFile('download');
  var html = output.evaluate().setHeight(420).setWidth(600);
  var ui = SpreadsheetApp.getUi();

  ui.showModalDialog(html, fileName);
```


```download.html

<style type="text/css">

#json {
  height: 320px;
  overflow: scroll;
  border:1px solid #ddd;
  padding:10px;
}

</style>

<pre align="left" id="json">
<?
output.append(body);
?>
</pre>

<div align="center">
<?
output.append("<a href='" +  url + "' target='_blank'>ダウンロード</a>");
?>
</div>

```

## スプレッドシートに書き出しメニューの追加
スプレッドシートにメニューを追加する方法は、以下のようになってます。
`functionName`に呼び出す関数名を指定することで、ボタンを押した時に指定された関数が呼び出されます。

```download_json.js
function onOpen() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var entries = [{
    name : "シートをJSONで出力",
    functionName : "showDialogDowloadJson"
  }];
  spreadsheet.addMenu("書き出し", entries);
};
```
WordPressと外部サービスのAPIを連携させるプラグインのユニットテストの方法

# 概要
WordPressで外部サービスと連携する際のユニットテストのやり方の紹介です。

https://github.com/megumiteam/woocommerce-elasticsearch
↑
今回WooCommerceの商品検索や関連商品をElasticseachで代替する機能を作るためのcomposerライブラリを作ったのですが、そこでElasticseachのエンドポイントと接続してユニットテストを行っていますので、これを元に紹介していきたいと思います。

# PHPUnitのコード
ElasticsearchのエンドポイントをPHPUnit実行時に外部から引き渡すようにしてあげます。
なので外部からの引数をテストコード内で受け取るようにして上げる必要があります。
`ES_HOST=‘example.com’ ES_PORT=‘9200’ phpunit`

プラグインは`wp scaffold plugin`で作成します。
そしてユニットテストの初期化処理を行っているtests/bootstrap.phpに以下の用に手を加えます。

```php
function _manually_load_plugin() {
	
	$host = getenv( 'ES_HOST' );
	$host = preg_replace( '/(^https:\/\/|^http:\/\/)/is', '', $host );
	$port = getenv( 'ES_PORT' );
	if ( empty( $host ) ) {
		$host = 'localhost';
	}
	if ( empty( $port ) ) {
		$port = 9200;
	}
	define( 'ES_HOST', $host );
	define( 'ES_PORT', $port );
```
https://github.com/megumiteam/woocommerce-elasticsearch/blob/master/tests/bootstrap.php

これで上の例では`ES_HOST`と`ES_PORT`が定数としてユニットテスト内で使えます。
あとはユニットテストの中で引数を元にテストを書いてあげればOKです。

# Travisで実行
Travisでテストする時はさすがに外部から値を渡す方法が思いつかなかったので、TravisにElasticsearchをインストールしてhttp://localhost:9200 をエンドポイントとしてテストを実施します。

https://docs.travis-ci.com/user/database-setup/
TravisではElasticsearchが予め使えるようにインストール済みです。

.travis.ymlに以下を記述するだけでElasticsearchを立ち上げてくれます。

```yaml
services:
  - elasticsearch
```

特にPHPUnitの実行時に引数を与えなければ、http://localhost:9200 に接続してテストを回すようにtests/bootstrap.phpでコードを記述します。

https://travis-ci.org/megumiteam/woocommerce-elasticsearch
↑
するとこんな感じでTravisでテストもできちゃいます。

ただこれだとTravisのローカルにインストールできるものでしかテストが出来ません。AWSリソースと接続してテストを行う場合のテストはどうしようかなって感じです。
Debian8でgnome-screenshotが見当たらない場合

## 参考

* [コンピュータ作業＆調査＆学習の記録: スクリーンショットをとりたい!【gnome-screenshot】](http://enjoy-skill-upper.blogspot.jp/2014/12/gnome-screenshot.html)

## エラー

> gnome-screenshot が動作中にエラーがありました。
> gnome-screenshot を子プロセスとして起動できませんでした：そのようなファイルやディレクトリはありません。

![img.png](https://qiita-image-store.s3.amazonaws.com/0/25728/5bfd3c48-54ae-60cb-b8b0-818b80a42ec4.png)

Ubuntu + LXDEだとこれで動作したが、
Debian8 + LXDEだと上記エラーになる。

## 対処

```bash:
sudo apt-get install -y gnome-screenshot
```
[小ネタ]apachのアクセスログ集計用ワンライナー

Apacheのアクセスログから100日以内のリクエストURIごとの集計を行う必要があったのでメモ

# コマンド

```bash
$find . -mtime -100 -type f | grep -v "error_log" | xargs cat |cut -d" " -f7 | sort | uniq -c
      3 /
      2 /cuga.cgi
      1 /favicon.ico
      2 /hoge.cgi
      1 /icons/apache_pb2.gif

```

ざっと概要

+ findのmtimeオプションで最後に更新されたのが100日以内のファイルをピックアップ
+ grepでerror_log除外
+ catで全て表示
+ cutでURI部分のみ取得
+ sortでソート
+ uniqで重複をなくし、-cオプションでそれぞれが何回現れたかを表示する
技術英語 > and you'll have to learn to [live with] them. / She's expecting.

@ Start Trek Voyager > TATOO

赤ん坊をみごもったワイルドマンに対してドクターが

> and you'll have to learn to <font color=red>live with</font> them.

痛みとともに生活しないといけないという厳しいお言葉。

<hr>
関連して思い出したのは

She's expecting.

http://eow.alc.co.jp/search?q=expecting&ref=sa
> 《be ～》妊娠している、お産が近い、妊娠中である、出産を控えている

expectは「予期する」「期待する」とよく使うが、上記の意味もあると知ったのはどのソースだったか失念。フルハウスかERか？

http://eow.alc.co.jp/search?q=expect

<hr>

技術英語から外れた。

Let's get back to the normal Technological English next time.
...
Technical English?
Engineering English?
PWMの出力をAMラジオに聞かせる方法。

# PCラジオに触発されて

ardionoできれいな音を出そうとするとPWMを使うことになります。
これをそのまま利用してAMラジオの電波を飛ばすことができます。

## やりかた
ardiunoに適当にプログラムを書き込んで、PWMで音が出るようにしましょう。
音が出たら、スピーカーの近くに同線をつないで、反対の端はラジオに巻き付けます。
これだけで聞けます。

## しくみ

音声信号に単純なPWMを行って1ビットオーディオにするとします。結果は音の大きさに応じてデューティー比が増減した矩形波の列になります。この波形にローパスフィルターをかけると元の音声信号に戻ります。これが本来の使用法です。ローパスフィルターでのぞかれた部分にも情報は残っています。PWMの周波数近くでバンドパスフィルターを通すと、これはちょうど元の音声信号を少し歪めてAM変調したものになります。

## まとめ

DACのないおもちゃで波形を出力するには、途中でパルスの列に変換する必要があり、PWMもそのひとつである。単純なPWM方式はノイズを拡散する仕組みがないので、AMラジオに激しく混信する。

このテクニックを使えば、PCラジオの音質がかなりよくなりそうなんですが、
誰か暇な人がPCラジオやってくれないかなあ
あと図をいれたい
How to use Ansible on CentOS 6.7

# Overview
 AnsibleがCisco機器に対応した他、WindowsServerも操作できるようなので、一元管理と怠けるために使いこなしてみる。

# How to Install
　最新版を使うのが先駆者の鉄則だが、私の場合は運用をメインで考えるので安定性と、保守のしやすさを最優先で考える。従って yum でインストールする。
　幸いにして、執筆当時のansibleのVerは1.9.4。十分な新しさである。
追記）2016.6現在、2.0系まで上がっていた。どうやらCentといえどAnsibleはメジャーバージョンアップについて行ってくれるらしい。

```
# yum install epel-release
# yum install ansible
```

## Install Windows Plug-in
　yumでWindowsを扱うためのpywinrmは入手できないぽい
pywinrmのインストールはpipで入れる手もあるが、せっかくansibleをRPMで入れているのに
ここだけpip管理なのは情けないのでRPM化する。

```
# yum install python-pip
```

```
# pip install pywinrm -d .
# tar zxvf pywinrm-0.1.1.tar.gz
# cd pywinrm-0.1.1
# python setup.py  bdist_rpm --spec-only
```
ここでパッケージ名を気にしないのであればspecファイルとsourceをrpmbuild環境に移動
rpmbuildすればできあがる。ただし、pywinrmという名称が嫌ならば、変更する。

```
# yum install python-isodate python-xmltodict
# rpm -ivh python-pywinrm-0.1.1-1.noarch.rpm 
# yum install krb5-workstation python-devel python-kerberos
```

# How to setup
* ansible レシピを作成する
    * 以下に従ってレシピを配置する
        *  http://docs.ansible.com/ansible/playbooks_best_practices.html
* ログイン先ホストのsshを空けておく
    * アカウントがない場合はアカウントを作成しておく

# How to Run

```
 $ ansible-playbook -i hosts -vv site.yml --syntax-check 
 $ ansible-playbook -i hosts -vv site.yml --check 
 $ ansible-playbook -i hosts -vv site.yml 
```
 * その他、便利オプション
  * --ask-pass
  * --ask-sudo-pass

# How to deploy
* とりあえず
    *  http://docs.ansible.com/ansible/intro_patterns.html



# Tips
* http://yteraoka.github.io/ansible-tutorial/#simple-playbook
* http://www.torutk.com/projects/swe/wiki/Ansible%E3%82%92CentOS%E3%81%AB%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB
React疲れに陥る前に (react-makes-you-sad の日本語訳)

# React makes you sad.

[Dan氏](https://twitter.com/dan_abramov)による [React](https://facebook.github.io/react/) で幸せに開発をするためのフローチャート [react-makes-you-sad](https://github.com/gaearon/react-makes-you-sad) を翻訳してみました。React をこれから勉強してみようと思っている方、ちょっとだけ試したことはあるけどまだ実戦投入していない方、すでに実際のプロダクトで使っている方、つまりほとんどの方にとって有用なアドバイスを含んでいます。

#### 日本語リポジトリ: [kuy/react-makes-you-sad](https://github.com/kuy/react-makes-you-sad)

#### [フローチャートを見る](https://cdn.rawgit.com/kuy/react-makes-you-sad/39238dcc16f80abfa092df181591d261e44623e2/fatigue.svg)

# [WIP] 抜粋

## ひな形（ボイラープレート）は使わない
## Flux ライブラリを使うかどうかについて
## webpack や Browserify の設定に振り回されない
## JavaScriptの新しい言語機能をすべて使おうとしない
## 依存パッケージの更新頻度について
## React 以外も検討しよう
Angular2(typescript)でめっちゃ簡易な Loggerをつくってみた

Angularjs2 開発にてconsole.logを書いては消しがストレスだったので、
もっと気軽にdebugログを出力するため Loggerを作ってみた

後でエラーログをサーバに投げるとかちゃんと実装したい

```ts
import {Injectable} from 'angular2/core';
@Injectable()
export class LogService {
  public authenticated: boolean = false;
  //
  // Loglevel
  //  1: error
  //  2: warn
  //  3: notice
  //  4: info
  //  5: debug
  private _logLevel: number = 5;

  public debug(arg: any) {
    if(this._logLevel >= 5) {
      this._log(arg);
    }
  }

  public info(arg: any) {
    if(this._logLevel >= 4) {
      this._log(arg);
    }
  }

  public notice(arg: any) {
    if(this._logLevel >= 3) {
      this._log(arg);
    }
  }

  public warn(arg: any) {
    if(this._logLevel >= 2) {
      this._log(arg);
    }
  }

  public error(arg: any) {
    if(this._logLevel >= 1) {
      this._log(arg);
    }
  }

  private _log(arg: any) {
    console.log(arg);
  }
}

```


。。。こんだけ
【Groongaで学ぶ全文検索 2016-02-26】GroongaでSelectした時の出力方法いろいろ


# はじめに

* [Groongaで学ぶ全文検索 2016-02-26](http://eventdots.jp/event/581155)に参加しました。
* 参加したといっても、本編の勉強会は間に合わず、参加者の発表タイムにやっと顔を出せた感じなので、この記事は以下の発表がベースとなっています。
	* [Groongaでできる検索方法あれこれ](http://kitaitimakoto.github.io/apehuci/2016/02/26.html)
	* [Groongaで学ぶ全文検索 2016-02-26](http://qiita.com/yamamaijp/items/6efcc6b36f003de9212d)
	* [Groongaで学ぶ全文検索 2016-02-26](http://qiita.com/ote/items/f3fcd147ab9352635cdb)


# GroongaでSelectした時の出力方法いろいろ

## Selectについて

* Groongaは全文検索エンジンです。なのでSelectは最も重要な機能といえます。
* Groongaでは以下のような特徴的な出力方法を有しているので、その内容をいくつかピックアップして説明します。
	* スニペット
	* オフセット
	* ソート
	* 集計
		* カウント
		* 合計
		* 平均
		* 最大値
		* 最小値
	* クエリー展開
	* カラムの重みづけ
	* 重みの底上げ

## スニペット([snippet_html](http://groonga.org/ja/docs/reference/functions/snippet_html.html))

* [snippet_html](http://groonga.org/ja/docs/reference/functions/snippet_html.html)関数の指定で、検索キーワード周辺の文字列を抽出されます。
* 抽出された文字列のうち、検索キーワードは以下のようなタグで囲まれます。<br>
`<span class="keyword">[検索キーワード]</span>`
* スニペットはMroongaでやったことがあって、Mroongaの場合は[mroonga_snippet](http://mroonga.org/ja/docs/reference/udf/mroonga_snippet.html)という関数でやってました。
* 以下で少し触れています<br>
[MroongaとownCloudの良い関係 Groonga Meetup 2015](http://www.slideshare.net/ukitiyan/mroongaowncloud-groonga-meetup-2015)

## オフセット([offset](http://groonga.org/ja/docs/reference/commands/select.html))

* offsetを指定することで途中から結果を出せます。
* 勿論limitも指定可能です。
* 因みにlimitのデフォルトは10なので、純粋にselectすると10件しかレコードが抽出されないので、ご注意を。
* オフセットはページング処理に使われることが多いのです。

## ソート([sortby](http://groonga.org/ja/docs/reference/commands/select.html))

* 勿論ソートできます。
* twitterとかでも使われている概念らしいのですが、一貫性のあるページングを実現する場合は、offsetに0を指定して、id等順序性のあるカラムでソートした上で、そのカラムで範囲検索するのが常套手段とのことです。
* で、Groongaはその範囲検索出来ることがスゴイんです。

## 集計
* おなじみの集計できます。
* 集計という括りにすると少し違いますがドリルダウン[drilldown](http://groonga.org/ja/docs/reference/commands/select.html#select-drilldown)は抑えておきたい機能のひとつです。

## クエリー展開
* キーワード展開という呼び方でも良いみたいです。
* 画面入力に親和性の高い記載内容がクエリ言語で解析されます。
* つまり、入力からクエリに変換する実装をGroonga側でサポートしてくれることになります。
* 例えば、以下のようなパターンです。
	* 「A B」と入力すると「A AND B」で検索される。
	* 「A or B」と入力すると「A OR B」で検索される。
* 因みにANDとORをSQLでイメージすると、ANDはINTERSECTで、ORはUNIONとのことです。<br>
![INTERSECT](http://www.techscore.com/page_attachments/0000/0231/sql821.gif)
![UNION](http://www.techscore.com/page_attachments/0000/0229/sql811.gif)


## カラムの重みづけ([match_columns](http://groonga.org/ja/docs/reference/commands/select.html#select-match-columns))
* カラム毎に重み付けして、出力順変えることが出来ます。
* 検索結果を上位に出力する場合、この手の手段を使ってスコアを上げます。
* 例えば、Eコマースの商品テーブルで、タイトルカラムと商品説明カラムを「セール」という文字列で全文検索して、商品一覧表示する時に、タイトルに「セール」って文字が付いてる方が、お客さんの目を引くわけなので、タイトルカラムの重みを付けて、タイトルに「セール」という文字が入ってる商品のスコアを高くして、なるべく上に表示させることが出来ます。

## 重みの底上げ([filter](http://qiita.com/groonga/items/a964be5d754a52f00512))
* 重み付けはカラムに対してですが、重みの底上げはレコードに対してスコアを上げる仕掛けです。
* 例えば、先程のカラムの重み付けでセールが含まれるレコードの内、「春のセール」という文字列を含むレコードを上位に出力したい場合、このfilterを使って「春のセール」という文字列が入ってたらスコアを+10とかできるので、セール商品の中でも、春のセール商品を更に上に表示させるということ出来るのです。

# さいごに
* selectはGroongaの根幹なので、今回の勉強会は良いネタだったと思われます！こんな便利なやり方があるのかと、勉強になりました。
* また、複数テーブルを跨いだ検索がスゴイとかMroongaはGroogaのエンジンに直結してるとか、目から鱗な情報が飛び交っており、この勉強会は開始から参加しなきゃいけないと再認識しました。
* 引き続き、ここで得た情報をアウトプットしていきたいですね。
CSVを1行ずつフィールドの型変換をしながら読み込んで（プログレスバーも表示しながら）処理したい

プログレスバーを表示しながら、CSVを1行ずつフィールドの型変換をしながら読んで何か処理をする例。
プログレスバーは[click](http://click.pocoo.org/)のやつを。

とりあえずコード貼っときます
（with なんとか... で使えるiteratorの書き方の自分用コピペ例でもある）

field_converter.py はこちら：https://gist.github.com/naoyat/3db8cd96c8dcecb5caea
前の記事「[Pythonで "文字列".split() した結果を一括変換したい](http://qiita.com/naoya_t/items/7a660ea65830da9f55d3)」のやつです

```csv_iterator.py
import sys
import csv
import click
from field_converter import FieldConverter

class CSV_Iterator:
    def __init__(self, path, skip_header=False, with_progress_bar=False,
                 field_converter=None):
        self.path = path
        self.with_progress_bar = with_progress_bar
        self.field_converter = field_converter

        self.f = open(path, 'r')
        self.line_count = sum(1 for line in self.f)

        self.f.seek(0)  # rewind
        self.r = csv.reader(self.f, dialect='excel')
        if skip_header:
            self.r.next()
            self.line_count -= 1

        print '(%d lines)' % (self.line_count,)

        if self.with_progress_bar:
            self.bar = click.progressbar(self.r, self.line_count)

    def __iter__(self):
        return self

    def next(self):
        try:
            if self.with_progress_bar:
                fields = self.bar.next()
            else:
                fields = self.r.next()
            if self.field_converter:
                try:
                    fields = self.field_converter.convert(fields)
                except:
                    print sys.exc_info()
            return fields
        except:
            raise StopIteration

    def __enter__(self):
        return self

    def __exit__(self, exc_type, exc_value, traceback):
        if exc_type:
            return False
        if self.with_progress_bar:
            print
        self.f.close()
        return True
```
gistに貼っておきます。
https://gist.github.com/naoyat/b1290d917638c412e140

使用例。

```example.py
from csv_iterator import CSV_Iterator

def foobar(csv_path):
    with CSV_Iterator(csv_path,
                  skip_header=True,
                  with_progress_bar=True,
                  field_converter=FieldConverter(int, int, 'iso-8859-1', 'iso-8859-1', float)) as line:
        for id, uid, title, query, target in line:
            ...
```
dumpbin.exeで吐かれる逆アセンブルの結果を解析する

# はじめに
皆様ご存知のとおり、Visual Studioには逆アセンブラーがついてきます。
開発者コマンド プロンプトを立ち上げ、

```
dumpbin /DISASM /rawdata aaa.exe > aaa.asm
```

とするとアセンブリが吐かれます。

で、今回はCPU演算命令(instruction)をリストアップ&カウントアップしたいと思います。

最初は適当なテキストエディタでinstructionだけのリストを作ってからカウントアップしようかと思っていました。しかし今回解析するのが
https://github.com/TakeObara/DoNotPushGame
をx64 ``/arch=AVX2 /Ox /fp:fast``でPGOビルドしたものだったので、dumpbin.exeの出力が87.1MBとかなっており、適当なテキストエディタ(Sublime Text 3)には流石に荷が重かったのでdumpbin.exeの出力をそのまま放り込めるようにしました。

# ソースコード
https://gist.github.com/yumetodo/b7d55812a719f8bc81cc
です。ファイル名とかをソースコードに埋め込んでしまったので適当に手直しして使ってください。

# 結果
超長いので
http://pastebin.com/utRZ6gKU
見てください。どんだけ命令あるんですかね。
抜粋すると

```
mov           : 285897
add           : 60998
cmp           : 37286
movzx         : 36338
lea           : 36104
imul          : 31387
call          : 27917
sub           : 25906
je            : 22029
test          : 20655
jne           : 20402
and           : 18440
jmp           : 18348
xor           : 15204
sar           : 10689
pop           : 9882
shr           : 9359
inc           : 8687
push          : 8384
or            : 8215
shl           : 7077
movss         : 6874
movsxd        : 6146
nop           : 5602
movaps        : 4996
int           : 4214
jle           : 4030
dec           : 3725
jl            : 3069
jge           : 3049
movups        : 2950
mulss         : 2444
movsd         : 2359
addss         : 1938
jae           : 1776
jb            : 1689
ja            : 1608
mulsd         : 1571
jg            : 1547
movd          : 1411
```

本当はここから、AVXとかの命令がどれくらい使われているのかを調べたかったんだけど、さくっと使えそうな命令一覧表がなかったので諦めましたが、チラホラとFMAやらAVXやらSSEやらの命令が見つかって満足したのでこれでいいものとします。コンパイルオプションのSIMD化なめちゃだめだなと。

更に解析したい人は
- http://softwaretechnique.jp/OS_Development/Tips/IA32_instructions.html
- http://www.officedaytime.com/tips/simd.html
- http://sky.geocities.jp/krypton_pl/x86/x86ext.htm
- [http://wiki.onakasuita.org/pukiwiki/?よく使うASM命令ベスト100位に説明つけてみた](http://wiki.onakasuita.org/pukiwiki/?%E3%82%88%E3%81%8F%E4%BD%BF%E3%81%86ASM%E5%91%BD%E4%BB%A4%E3%83%99%E3%82%B9%E3%83%88100%E4%BD%8D%E3%81%AB%E8%AA%AC%E6%98%8E%E3%81%A4%E3%81%91%E3%81%A6%E3%81%BF%E3%81%9F)
- Intel のあの馬鹿でかいPDF

とかで頑張ればいいんじゃないかな(諦め)
Swift, closure 和 capture list

晚上，吃了幾顆金平糖，來寫一下最近看到的東西。

> Closure Capture List

在 Cocoa framework 中的 ARC 不全然是會完完全全的幫開發者釋放掉不會用的物件。

在 Objective-C 的環境中，我們會宣告 weak self 來使用：

```objc
__weak SomeObject *weakSelf = self;
```

但是在 Swift 中，多了個叫做「Closure Capture List」的語法, 可以幫你產生這個東西，可以直接寫在 closure 的大括號裡面，看起來更簡潔了。

## 緣起

當一個物件的 **成員變數** 或是 **成員函數** 有在 closure 裡面被呼叫到，這個物件就會被 closure capture 起來。即使當這個物件的 retain count 達到 0 ，這個物件還是不會被釋放。

這種事情發生了之後就會造成 memory leak 。

當不再使用這個物件之後，也無法去將它釋放掉、他也會就像僵屍般的無主地遊走在那邊。

## 範例

來從範例開始，我現在有個叫 MyObject 的 class

```swift
class MYObject: NSObject {
    
    var text = "my text"
    
    deinit {
        // 為了可以清楚有被釋放，所以在釋放時印出字串
        debugPrint("deinit")
    }
    
    func myMethod() {
        debugPrint("myMethod")
    }
    
    // 主角就是這個叫 capture 的 closure ，為了可以存取到 self ，所以加上 lazy 這個前綴
    lazy var capture: ()->() = {
        print(self.text)
        self.myMethod()
    }
}
```

接著再另外一個範圍內先執行以下的程式碼：

```
var myObject = MYObject()
myObject = nil
```

這時候因為沒有執行到有關 closure 的程式碼，所以當走完第二行的之後，因為沒有參照就被釋放了，這時候可以在 Xcode 的 console 看到這段字：

```text
"deinit"
```

### 執行 closure

```swift
var myObject: MYObject? = MYObject()
myObject?.capture()
myObject = nil
```

這時候執行完就會發現 console 裡面會印出

```text
my text
"myMethod"
```

而不會有 `"deinit"` 跑出來。這樣就代表在執行完 capture 這個 closure 之後，原先 `myObject` 中指向的那個 object **並不會** 真正的被 ARC 收收走。

### 加入 closure capture list

這時候只要在 `MYObject` 的 `capture` 這個 closure 裡面加入一個 closure capture list ，並在裡面放入 `owned self` 即可：

```swift
lazy var capture: ()->() = { [unowned self] in
    print(self.text)
    self.myMethod()
}
```

這時候在執行前段的程式碼

```swift
var myObject: MYObject? = MYObject()
myObject?.capture()
myObject = nil
```

這時候就會得到如下的 output ：

```text
my text
"myMethod"
"deinit"
```

就會發現這個 object 有好好的被釋放掉了

## weak 和 unowned 的差別

在 capture list 裡面可以放兩種變數，一種是 weak ，另外一種則是 unowned ，這樣成對的存在。使用實機則如下：

- weak 是用於 Optional type (`?`) 變數
- unowned 則是用在隱性開箱（implicitly unwrapped）或是被宣告為一定會有值的變數 (`!`)

實際的使用方式則要依據 class 的設計來變化，例如：

- delegate 變數通常是 Optional type ，就會這樣寫： `[weak delegate = self.delegate]`

## 應用

以上，這個會在網路存取的 closure 大量會被使用到，不妨檢查一下自己的 code 有沒有少了這些東西吧 :sushi: 

## 參考資料

- [Swift, Automatic Reference Counting - Apple](https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/AutomaticReferenceCounting.html)
Pythonで "文字列".split() した結果を一括変換したい

こういうの

```
a, b, c = "hello 3.14 0".split()
b = float(b)
c = int(c)
```

面倒くさいから、一発で出来る方法が欲しいんだけど…
多分みんな再発明してるよね？

twitterで@odashi_tさんが

> Pythonで行を読み込んでスペース区切り、各変数に値を読み込むまでの処理、いつも
a,b,c,d,e,... = line.split()
> してからそれぞれ変換してるんだけど、なんか簡単に書く方法ないか

> 別に正規表現ほど高機能なものはいらないので、
> a,b,c,d,e = split_and_convert(line, (int, float, str, str, int))
> みたいな感じで書けると嬉しい。

ってツイートしてるのを見て、僕も皆さんの賢い方法が知りたくなったので、自分が使ってるやつを貼ってみることにします

```
def map_apply(proc, args):
    # return [f(x) for f, x in zip(proc, args)]
    return map(lambda f,x:f(x), proc, args)  # map(apply, proc, args) doesn't work like this

class FieldConverter:
    def __init__(self, *args):
        self._converters = args
        def conv_proc(f):
            def _wrap(conv_proc_to_num):
                def proc(x):
                    try:
                        return conv_proc_to_num(x)
                    except ValueError:
                        return 0
                return proc
            if f is None:
                return lambda s:s  # identity
            elif isinstance(f, str):
                return lambda s:s.decode(f)  # -> unicode
            elif f in (int, float):
                return _wrap(f)
            else:
                return f
        if len(args) > 0:
            self.converters = [conv_proc(f) for f in self._converters]
        else:
            self.converters = None

    def convert(self, fields):
        if self.converters:
            return map_apply(self.converters, fields)
        else:
            return fields


def test_map_apply():
    assert [0, -1, 3.14, 5.0] == map_apply([int,int,float,float], ['0','-1','3.14','5'])
    assert [0,u'日本語','日本語'] == map_apply([int,lambda s:s.decode('utf-8'),lambda s:s], ['0','日本語','日本語'])

def test_field_converter():
    assert [0, -1, 3.14, 5.0] == FieldConverter(int,int,float,float).convert(['0','-1','3.14','5'])
    assert [0,u'日本語','日本語'] == FieldConverter(int,'utf-8',None).convert(['0','日本語','日本語'])
```

int, float は説明要らないかな。
'utf-8'とかやるとUTF-8でデコードしてunicodeに。
Noneは無変換で
1変数関数なら何でも（lambdaでも）渡せます。

@odashi_tさんの split_and_convert() は、

```
def split_and_convert(line, types, delim=' '):
    field_converter = FieldConverter(*types)
    return field_converter.convert(line.split(delim))

def test_split_and_convert():
    assert [0, -1, 3.14, 5.0] == split_and_convert('0\t-1\t3.14\t5', (int,int,float,float), '\t')
    assert [0, u'日本語', '日本語'] == split_and_convert('0,日本語,日本語', (int,'utf-8',None), ',')

```

こんな感じで実装できるかな。field_converterはキャッシュしておきたいけど。

変換がintとかfloatとかだけなら単に

```
def split_and_convert(line, types, delim=' '):
    return [f(x) for f,x in zip(types, line.split(delim))]
```

で済むけど。

これなら

```
a, b, c, d = split_and_convert('0\t-1\t3.14\t5', (int,int,float,float), '\t')
```

みたいに使える。（a=0, b=-1, t=3.14, d=5.0）


とりあえずコードはgistに貼っておきます
https://gist.github.com/naoyat/3db8cd96c8dcecb5caea
[SQL][DB一般]制約とその制約に紐づくカラム、参照制約の親を取得するSQL

以下のような、カラムの制約を取得するＳＱＬ
1. どのカラムにどんな制約があるか
2. 参照制約がある場合は、どのテーブルのどのカラムが親か

```
with cons_cols as(
  select
     dc.owner
    ,dc.table_name
    ,dc.constraint_name
    ,dc.constraint_type
    ,dc.SEARCH_CONDITION
    -- ,dc.SEARCH_CONDITION_VC
    ,dcc.column_name
    ,dc.r_owner
    ,dc.r_constraint_name
  from 
     dba_constraints  dc
    ,dba_cons_columns dcc
  where 1=1
    and dc.owner=dcc.owner
    and dc.constraint_name=dcc.constraint_name
    and dc.table_name=dcc.table_name) 
select
     to_char(sysdate,'YYYY/MM/DD HH24:MI:SS') as "SYSDATE" 
    ,vi.instance_name
    ,vi.host_name
    ,cons_cols.owner
    ,cons_cols.table_name
    ,cons_cols.constraint_name
    ,cons_cols.constraint_type
    ,cons_cols.SEARCH_CONDITION
    ,cons_cols.column_name
    ,cons_cols.r_owner
    ,cons_cols.r_constraint_name
    ,r_cons_cols.table_name as r_table_name
    ,r_cons_cols.column_name as r_tab_col_name
from
   cons_cols cons_cols
  ,cons_cols r_cons_cols
  ,v$instance vi
where 1=1
  and cons_cols.r_owner=r_cons_cols.owner(+)
  and cons_cols.r_constraint_name=r_cons_cols.constraint_name(+)
-- 以下、抽出条件
   and cons_cols.owner='APPS' -- 所有者
--   and cons_cols.table_name='' -- 制約が張られたテーブル名
--   and cons_cols.constraint_name='' -- 制約名
--   and cons_cols.constraint_type='' -- 制約のタイプ
--   and cons_cols.SEARCH_CONDITION='' -- チェック制約に対する検索条件のテキスト
--   and cons_cols.column_name='' -- 制約の張られたカラム名
--   and cons_cols.r_owner='' -- 参照制約の参照先制約の所有者
--   and cons_cols.r_constraint_name='' -- 参照制約の参照先制約
--   and r_cons_cols.table_name='' -- 参照制約の参照先テーブル名
--   and r_cons_cols.column_name'' -- 参照制約の参照先カラム名
;

```

SYSDASTEとインスタンス名、ホスト名を入れるのは趣味。
記録するだけして、あとで情報を整理しやすいように。

制約の親子関係は、開発の際、結合条件を作る参考になる。
画面の向きを固定 2016 swift2 iOS9.2 時点


iPhoneの向きに対する制御はiOSのバージョンや言語のバージョンによって制御方法が結構変わっていて混乱したのでこれを書いてる時点での方法をメモ

画面の向きを固定する

```
    //サポートするデバイスの向きを指定する
    override func supportedInterfaceOrientations()  -> UIInterfaceOrientationMask {
        return UIInterfaceOrientationMask.Landscape
    }
    
```

AVPlayerViewControllerでは使えません。欲しいのに・・・
上記で固定した場合、TARGETで指定した向きと不一致の場合、エラーで落ちます。
ただし、AppDelegate.swiftで以下を追加した場合はその限りではないです。

```
    func application(application: UIApplication, supportedInterfaceOrientationsForWindow window: UIWindow?) -> UIInterfaceOrientationMask {
        return UIInterfaceOrientationMask.AllButUpsideDown
    }
```


画面の向きが変わった事を検知する

```
 NSNotificationCenter.defaultCenter().addObserver(self, selector: "onOrientationChange:", name: UIDeviceOrientationDidChangeNotification, object: nil)
```

```
    // 端末の向きがかわったら呼び出される.
    func onOrientationChange(notification: NSNotification){

     // 向き毎に制御
  	 if(UIDeviceOrientationIsLandscape(UIDevice.currentDevice().orientation)){
        }
   }
```

もう一つの方法として

```
    override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {
        if size.width > size.height {
            
            
        } else {
            
        }
        
    }
```

ただし、上記メソッドは向きが固定されていた場合、呼び出されません。

以上です。またバージョンが変わればここに書いてあるのも使えなくなるかも。

参考サイト


[iPhone6Plusと初回起動時の画面向きについて](http://qiita.com/kenmaz/items/1704152ef38c35bfe9fe)


[iOS8以降で、どうデバイスの回転を取り扱うかまとめてみる](http://qiita.com/nomadmonad/items/e09639e0b31812e28d6d)

より詳しくは上記２サイトを見てもらうのがいいと思う。
【ASP.NET MVC】View のビルドチェックを行う方法

# プロジェクトファイルを編集

プロジェクトのビルド時に View のビルドチェックを行うには、プロジェクトファイル `*.csproj` をエディタで開き、下記タグを埋め込めば OK 。

```xml:*.csproj
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
...
  <PropertyGroup>
...
    <!-- これを埋め込む -->
    <MvcBuildViews>true</MvcBuildViews>
...
  </PropertyGroup>
...
  <!-- これも埋め込む -->
  <Target Name="MvcBuildViews" AfterTargets="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
    <AspNetCompiler VirtualPath="temp" PhysicalPath="$(WebProjectOutputDir)" />
  </Target>
</Project>
```

当然ビルドが遅くなるので、必要な時のみ `MvcBuildViews` を `true` とすると良い。

# EF 使用時のエラーへの対処

プロジェクト内で Entity Framework を使用していると
> 型 'System.Data.Entity.Design.AspNet.EntityDesignerBuildProvider' を読み込めませんでした。	C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\web.config	132

や

> Could not load type 'System.Data.Entity.Design.AspNet.EntityDesignerBuildProvider'. C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\web.config 129

等と出力されるので、その際には `web.config` に

```xml:web.config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
...
  <system.web>
...
    <compilation debug="true" targetFramework="4.5.2">
...
      <!-- edmx ファイルを事前ビルド（MvcBuildViews）する際に必要 -->
      <!--<assemblies>
        <add assembly="System.Data.Entity.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
      </assemblies>-->

      <!-- edmx ファイルを事前ビルド（MvcBuildViews）から除外する際に必要 -->
      <buildProviders>
        <remove extension=".edmx"/>
      </buildProviders>
...
    </compilation>
...
  <system.web>
...
</configuration>
```
のいずれかを記載すれば、ビルドチェックを行える。

# 参照
- [visual studio - VS2013 does not compile ASP.NET MVC5 views - Stack Overflow](http://stackoverflow.com/questions/28289107/vs2013-does-not-compile-asp-net-mvc5-views)

- [MvcBuildViews true with Entity Framework in ASP.NET MVC 2 - Stack Overflow](http://stackoverflow.com/a/2812707)
IntelliJ IDEA Rubyの開発環境を作成する

## 概要
IntelliJ IDEAのRubyPluginを使って開発環境を整える手順。

## 実行環境
OS X El Capitan‎ 10.11.3
IntelliJ IDEA 15.0.4

※前提条件として、[IntelliJ IDEAのインストールと日本語化](http://qiita.com/keita-nishimoto/items/31e8af9ccb4b3bdd74d0)でインストールと日本語化を行っている事。

## RubyPluginのインストール
IntelliJ IDEAを起動後、Configureをクリックする。

<img width="779" alt="plugin1.png" src="https://qiita-image-store.s3.amazonaws.com/0/71899/5508d1b4-2925-af35-28f4-f548d4ddcd61.png">

検索フォームに"Ruby"と入力する。

<img width="798" alt="plugin2.png" src="https://qiita-image-store.s3.amazonaws.com/0/71899/9c736e9c-5f0f-b567-2fa6-1f858c9cf550.png">

「Install」をクリックする。
※インストール完了後に再起動を求められるので再起動を行う。

<img width="821" alt="plugin3.png" src="https://qiita-image-store.s3.amazonaws.com/0/71899/4ba1c46e-0821-a144-57f6-a23907f49709.png">

## RubySDKの設定
「ファイル(F)」→「プロジェクト構造」を開く。

<img width="1016" alt="RubySDK1.png" src="https://qiita-image-store.s3.amazonaws.com/0/71899/c18ab318-2b67-11a1-7ba4-1510d446e150.png">

「New...」を選択しRubyがインストールされているパスを設定する。
私の場合はrbenvを使ってインストールを行っていたので下記の写真のように設定した。

※ちなみに、rbenvを使ってインストールした場合rubyコマンドで位置を調べると、shims/rubyが表示されるが、一見するとここを指定すれば良いように思えるが、rbenv/versions/2.2.4/bin/rubyを指定してあげないと上手く動作しなかった。

```bash
$ which ruby
/Users/nishimotokeita/.rbenv/shims/ruby
```

<img width="866" alt="RubySDK2.png" src="https://qiita-image-store.s3.amazonaws.com/0/71899/6a9aeca7-b28e-ed3e-e1e3-c704df968c18.png">

## Bundlerのパスを追加（rbenvを使っている場合）

IntelliJ IDEA と rbenv の組み合わせでだとBundlerが無効になってしまうので、パスの追加を行っておく必要がある。

手順は[IntelliJ と rbenv の組み合わせで Bundler が使えない時](http://qiita.com/sunny4381/items/b9317d73b98eb1470140)を参考にさせて頂いた。

## IDE上でbundle installを実行
プロジェクト固有のGemをGemfileによって管理している場合（というかほとんどのプロジェクトがそうしていると思うが。。）IDE上からbundle installを実行してあげる必要がある。
そうしないとIDE上でvendor以下にインストールしたGemをIDEが認識してくれなかった。

<img width="551" alt="bundle_install.png" src="https://qiita-image-store.s3.amazonaws.com/0/71899/342e24ed-c48e-54ba-87ab-f5bf71105dcd.png">

私のプロジェクトの場合はrbenvでvendor/bundle以下にインストール、実行ファイルをbundle_bin以下に配置していたので以下のオプションを付けて実行した。
--path=vendor/bundle --binstubs=bundle_bin

<img width="930" alt="bundle_install2.png" src="https://qiita-image-store.s3.amazonaws.com/0/71899/573a9cc9-5ea3-7ccd-aa8c-439c9028eb5b.png">

## 補足
ちなみにこの記事を書いている 2016-03-03時点ではRubyのバージョンを2.3.0に上げてSDKの設定を行っても一部コード補完等が上手く出来なかった。
IntelliJ IDEAがRuby2.3.0に対応していない模様。
おそらくRubyPluginのアップグレードが行われれば対応されるとは思うが。

## 2016-03-22 追記
IntelliJ IDEAのバージョンを最新の2016.1にアップグレードしたところRuby2.3のサポートも追加された。
psshをすきなディレクトリにインストール

# 概要
sshを並列実行できるpsshを、ユーザのホームディレクトリ配下などにインストールする方法です。極力システムをよござないようにしたいとかの、備忘録的なもの。

# 準備
https://code.google.com/archive/p/parallel-ssh/downloads
からpssh-2.3.1.tar.gzをダウンロード。

# インストール
setup.pyでのインストール時に、インストール先のディレクトリを--home=\<dir\>で指定します。\<dir\>はインストール先ディレクトリ。例えば、/home/piyo/psshなど。

```
# tar xvzf pssh-2.3.1.tar.gz
# cd pssh-2.3.1
# python setup.py install --home=<dir>
```

# 実行
インストール先を指定した場合、pssh実行前にPYTHONPATHの指定が必要です。

```
# export PYTHONPATH=<dir>/lib/python/
# <dir>/bin/pssh --version
2.3.1
```

# オフラインインストール

ちなみに、tarをインターネットに繋がるPCでダウンロードしておいて、インストールしたいサーバにtarを置ければオフラインでもインストールできます。ただし、最低限Pythonが入っている必要あります。
HipChatで独自Integrationを作ってみる

# 概要
HipChatでは、Integrationsを使って色々なサービスと連携できます。
既にいろんなサービスと連携できますが、自分で独自にWebサーバーを立ててIntegrationを独自で作ることもできます。

ここではその仕組みと簡単な例を紹介します。


- 使用例
![totsuzen_screenshot 2.png](https://qiita-image-store.s3.amazonaws.com/0/57610/e74c6c80-256e-9eba-6b60-aac28db19d98.png)


# 仕組み
HipChatでは特定のスラッシュコマンドをチャットした場合に、指定のWebサーバーに決まったフォーマットをPOSTするように設定することができます。
WebサーバーはそのPOSTされた値を受け取り、決まったjsonフォーマットのレスポンスを返してあげれば、HipChatがBOTぽい感じで投稿してくれます。

## やり方
ルームのIntegration設定画面から、Build your own integrationより設定できます。

![HipChat_-_Integrations.png](https://qiita-image-store.s3.amazonaws.com/0/57610/5f36b687-44f7-1ec7-1799-29b091e0a93a.png)

設定項目は以下の3つ

- Integrationの名前
- 対応させるスラッシュコマンド
- スラッシュコマンドを検知したらPOSTするURL

簡単ですね！

HipChatは指定したスラッシュコマンドを検知すると、指定したURLに以下をPOSTします。

```json
{
  "oauth_client_id": "example_id",
  "item": {
    "message": {
      "from": {
        "mention_name": "hoge_name",
        "version": "00000000",
        "id": 1,
        "links": {
          "self": "https://api.hipchat.com/v2/user/hoge"
        },
        "name": "hoge"
      }, 
      "date": "2016-03-02T14:51:19.525602+00:00",
      "mentions": [],
      "message": "/hogehoge test", 
      "type": "message", 
      "id": "1"
    }, 
    "room": {
      "name": "hoge-room",
      "links": {
        "webhooks": "https://api.hipchat.com/v2/room/hoge/webhook",
        "participants": "https://api.hipchat.com/v2/room/hoge/participant",
        "self": "https://api.hipchat.com/v2/room/hoge"
      }, 
      "privacy": "public",
      "is_archived": False,
      "version": "00000000",
      "id": 1
    }
  }, 
  "event": "room_message",
  "webhook_id": 1
}
```

スラッシュコマンド後の特定の文字列で何か操作をしたい場合はmessageの部分を取り出して解析する感じになります。
そこ以外は基本的に使わないはずなので、見なくても大丈夫だと思います。

このjsonを受け取ってサーバー側で以下の形式のjsonのresponse返してあげると、
HipChatにmessageの文言をチャットしてくれます。

```json
{
    "color": "green",
    "message": "It's going to be sunny tomorrow! (yey)",
    "notify": false,
    "message_format": "text"
}
```

message_formatはtextとhtmlが使えるみたいです。
textの場合改行とかがうまくできない（？）ぽいので、ちょっと返り値を凝りたい場合はhtml推奨。

# まとめ
デフォルトで用意されているIntegrationが充実しているので、あまり使うことはないと思いますが、割りと簡単に実装できるのでちょっとした作業の簡略化に便利です。

Build your own integration!

## サンプルコード
PHPフレームワークLumenで実装したサンプル
https://github.com/wrbss/hipchat-totsuzen


## 参考
https://blog.hipchat.com/2015/02/11/build-your-own-integration-with-hipchat/
ls -lで表示される@（アットマーク）

環境：Mac OS X Lion 10.7.5

とあるファイルを編集し、パーミッションの設定がどうなっているか確認するために、

```
% ls -l
```
でファイルを確認したところ、

```
-rw-rw-r--@   1 root     admin    857 11 23 21:53 themes.php
```
のように@（アットマーク）が付いている。

調べてみると「拡張ファイル属性（EA）」というものらしい。
（参考：[拡張ファイル属性 - Wikipedia](https://ja.wikipedia.org/wiki/%E6%8B%A1%E5%BC%B5%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%B1%9E%E6%80%A7)）

アットマークはそのファイルにメタデータが付加されていることを示していたようだ。
MacOSXではTiger以降に実装されている。
ssh でログイン先でも今いるディレクトリにすぐに移動


nfs とかで同じディレクトリ構成の複数のホスト間を行き来することが多い。
ログイン先でも $HOME じゃなくて、今いるディレクトリに移動したいのでメモ。

コマンドとしては ``ssh -t `` を使って、 PWD_TMP という変数に PWD をセットして、ログインシェルを実行する。


```sh
ssh -t HOST "export PWD_TMP=$PWD ; /bin/zsh"
```

ログインシェルの rc ファイルとかに PWD_TMP が設定されて、ディレクトリが存在するならば、cd する。

```sh:.zshrc
if [ -d $PWD_TMP ] ; then
	cd $PWD_TMP ;
fi
```

毎回入力しなくてもいいように、適当にホスト名とかで alias を設定しておく。

```sh:.zshrc
alias xxxx='ssh -t HOST "export PWD_TMP=$PWD ; /bin/zsh"'
```

注意すべきは zsh の ``.zprofile `` は呼ばれないので、ここに色々書いている人は注意が必要。
Avahiをインストールしてローカルからでもドメインでアクセスする

CentOSでローカル環境からアクセスする際にIPなのはちょっと面倒というかかっこわるく見えてしまうし、不便でもあるからということでAvahi-daemonを入れてみる。

１）
まずはインストール。
`yum install avahi`
ものの1分くらいでインストール終了。
一応、*.localという名前になるので
`hostname`
で名前を調べておく。

２）
色々調べてみたけど、色々設定があるみたい。
けど、どうせローカルだしそのまま起動しちゃえー
`/etc/init.d/avahi-daemon start`
`Avahi デーモンを起動中...　　[ OK ]`
詳しい設定とかは後から調べる……。

３）
Windows(クライアント側)からpingを飛ばして確認する
`ping *(ここは各々のhostnameを入力する).local`
`192.168.0.* からの応答: バイト数 =32 時間 <1ms TTL=64`
最初は若干時間かかるかもだけど、pingが飛んでIPとかが出てれば多分おｋ

とりあえず導入はこんなもんで良いのかしら。
っていうか本当にこれこういう使い方であってるのか分からんので要勉強だな。
underscoreコードリーディング（propertyOf）


underscoreに詳しくないので、勉強半分でソースコードを読む。



##利用するバージョン
[underscore.js(v1.8.3)](https://github.com/jashkenas/underscore/tree/1.8.3)


##propertyOfとは


###[underscorejs.orgのpropertyOf](http://underscorejs.org/#propertyOf)

こんな説明。
>####_.propertyOf(object) 
>Inverse of _.property. 
>Takes an object and returns a function which will return the value of a provided property.


```javascript
var stooge = {name: 'moe'};
_.propertyOf(stooge)('name');
=> 'moe'
```

------------- 
_.propertyの逆。
objectを渡すと、propertyを渡すとそのvalueを返す関数を返す。

###[underscore.propertyOf](https://github.com/jashkenas/underscore/blob/1.8.3/underscore.js#L1297)
コード的にはこのあたり。

```javascript
// Generates a function for a given object that returns a given property.
  _.propertyOf = function(obj) {
    return obj == null ? function(){} : function(key) {
      return obj[key];
    };
  };

```

objがnullの場合は空の関数を、nullではない場合はkeyを引数にobj.keyを返す関数を返す。
Minecraft 1.8.9 Forge API を使った Mod開発「武器追加 サンプルソース」

# 環境

* Mac OS X Yosemite
* Java 1.8.0_25
* Eclipse Mars.1 Release (4.5.1)

# ソース

```java

package in.webya.Chrowa3Sample;


import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.ItemStack;
import net.minecraft.item.ItemSword;
import net.minecraftforge.common.util.EnumHelper;


public class Chrowa3Item extends ItemSword
{

	public static ToolMaterial CHROWA3 = EnumHelper.addToolMaterial("CHROWA3", 3, 3000, 20.0F, 20.0F, 30);
	
	public Chrowa3Item(){
		super(CHROWA3);
		setCreativeTab(CreativeTabs.tabMaterials);
		setUnlocalizedName("Chrowa3Item");
		setFull3D();
		setMaxStackSize(1);
	}
	
	@Override
	public String getItemStackDisplayName(ItemStack itemstack)
	{
		return "Excalibur";
	}
}

```

武器のパラメーター、例えば攻撃力などをカスタムしたい場合は、ToolMaterial という構造体に上記の様なフォーマットで追加し、コンストラクタ内の super() に渡します。


Item クラス に定義されている構造体のコンストラクタは以下のとおり

```java

private ToolMaterial(int harvestLevel, int maxUses, float efficiency, float damageVsEntity, int enchantability)
{
	this.harvestLevel = harvestLevel;
	this.maxUses = maxUses;
	this.efficiencyOnProperMaterial = efficiency;
	this.damageVsEntity = damageVsEntity;
	this.enchantability = enchantability;
}

```
CSSをHTMLに組み込む方法

HTMLにCSSを組み込むには3つの方法があります。
1.link要素を使って読み込ませる。
2.style要素を使ってHTMLの中に直接CSSを書き込む。
3.style属性を使用して属性値としてCSSを書き込む。

メンテナンス性が落ちるので2と3の方法はあまり使われないそうですが、
練習のためやってみます。

#1.link要素を使ってCSSファイルを読み込ませる

```sample1.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>サンプル1</title>
<link rel="stylesheet" href="style.css">

</head>
<body>
</body>
</html>

```




#2.style要素を使ってHTMLの中に直接CSSを書き込む

```sample2.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>サンプル2</title>
<link rel="stylesheet" href="style.css">
<style>
</style>
</head>
<body>
<h1>サンプル2
</h1>
</body>
</html>
```


![image](https://qiita-image-store.s3.amazonaws.com/0/114697/e0eb19e6-2a5c-0c47-55cf-3cb0f60e5502.png)

すごい文字化けしました。
meta要素で文字コード指定してるのになあなんでだろうなあと思ってたら
HTMLファイル自体をSJISで保存してたからでした。
エディタでコードをUTF-8に直し保存。

![image](https://qiita-image-store.s3.amazonaws.com/0/114697/edeb5d47-c822-96a6-ba96-127493c9d8e0.png)

やったぜ！


#3.style属性を使用して属性値としてCSSを書き込む

```sample3.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>サンプル3</title>
</head>
<body style="background : orange;">
<h1 style="color : white;">サンプル3</h1>
</body>
</html>

```


で問題なく表示されました。
Cucumberで例外のテストをする


DB接続が切れた時にエラーページを表示するなど、システムエラー発生時のテストをCucumberで書く際の覚書です。

# TL; DR

* シナリオに`@allow-rescue`タグをつける
* `feature/support/env.rb`で`require 'cucumber/rspec/double'`する
* Stepで`Hoge.stub(:huga).to_raise('piyo piyo')`を設定する
  * Cucumberは結合試験・受け入れ確認試験レベルのテストなので、Stub/Mockを使うべきケースは少ない。多用してはダメ。

# kwsk

## Stub/Mockを使って、例外発生の仕込みを作る

Rspecのように、stub/mockを利用して例外を発生するようにします。

```features/support/env.rb
require 'cucumber/rspec/double'
```

```features/step_definitions/your_app_steps.rb
Given '検索した時にDB接続エラーとなる' do
  ActiveRecord::Base.stub(:postgresql_connection).to_raise(PG::ConnectionBad)
end
```

参考 : [Mocking and Stubbing with Cucumber - cucumber | GitHub](https://github.com/cucumber/cucumber/wiki/Mocking-and-Stubbing-with-Cucumber)

そもそもこういうテストはRspecなりMiniTestのコントローラーテストやリクエストテストですべきなのでは？　という考えもあり。

## システムエラーしてもテストが止まらないようにする

通常、Cucumberテスト中に例外が発生した際は、問答無用でテストが失敗します。
例外発生を無視し、各ステップが通ればテスト成功とみなすように設定するのが`@allow-rescue`です。
シナリオごとにつけてもよい。

```cucumber
# language: ja
@allow-rescue
フィーチャ: DB接続ができていない時は、エラーページを表示する
  ユーザーにアナウンスを行う

  背景:
    前提 ユーザー検索した時にDB接続エラーとなる

  シナリオ: なんか適当なシナリオ
```

参考 : [Tags - cucumber | GitHub](https://github.com/cucumber/cucumber/wiki/Tags#special-tags)
ぼくのかんがえたさいきょうのGoogle Analyticsマルチトラッキング用読み込みコード


マルチトラッキングして欲しいという依頼があったので、自分的に使いやすい形を考えてみた。

- トラッキングIDを一元管理できるようにしたいの
- 各IDごとにイベント送信を個別で行うのも面倒なのでイベント送信処理を一発して行う関数も欲しい

というわけで以下のようなものを作ってみた。試してみた感じ普通に使えてる。

```html
<script>
    var sites = [['UA-XXXXXXXX-X'],['UA-XXXXXXXX-X','trackB'],['UA-XXXXXXXX-X','trackC']];
    window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date;
    !function(a){var n=[];a.forEach(function(a){var t=a[1],o=t?{name:t}:{};ga("create",a[0],"auto",o),n.push((t?t+".":"")+"send")}),window.gall=function(){var a,t,o=n,r=arguments;o.forEach(function(n){var o=[n];for(a=0,t=r.length;t>a;a++)o.push(r[a]);ga.apply(this,o)})}}(sites);

    gall('pageview');
</script>
<script async src='//www.google-analytics.com/analytics.js'></script>
```

sitesに渡している2次元配列は、2項目目がcreateコマンドのnameキーの値として扱われる。

ここで自動的にcreateされたものに一括してsendする関数が`gall()`。

これで、`ga("foo.send",baz);ga("bar.send",baz)`みたいな書き方をしなくても良くなる。send専用なので第1引数はなく、そのまま`gall(baz,.....)`で良い。

gaでsendするのは大体XHR時のページ遷移ぐらいなので大体これで事足りる。ちょっと便利だと思うので面倒だなーと思ったら是非。
Cocoa アプリキーボードショートカット（command + c など）

こんにちは。
Cocoa アプリケーション開発で、キーボードショートカットの command + c などの実装は、普通は標準的装備なので意識する必要はないです。

しかし、Edit（編集）メニュー無しのアプリケーションでは、responder chain が切れている(?)ので、モーダルウィンドウのテキスト入力欄で command + c などが効きません。（matplotlib でファイル保存ダイアログのファイル名入力欄がこの例です）

下記に解決策が議論されていました。
[Cocoa Keyboard Shortcuts in Dialog without an Edit Menu](http://stackoverflow.com/questions/970707/cocoa-keyboard-shortcuts-in-dialog-without-an-edit-menu) (Stackoverflow)
RealsenseSDKで音声認識した結果をUnityで使う

# はじめに
- Unityでも高品質な音声認識を利用したい
- RealsenseSDKで音声認識ができる
- Unityでも使いたい
RealsenseSDKの音声認識を用いてUnityで結果を受け取ります．

# 準備
- Unity 5.3.1
- Visual Studio2015
- Intel Realsense SDK R4

注意 : RealsenseSDKのランタイムだけでは日本語の音声認識モジュールはインストールされないようです．

# Visual Studioによるプラグイン化
RealsenseSDKの音声認識はC#，C++があります．
今回はC++に慣れているのでC++でプラグインを作成します．
音声認識によって得られた文字列を出力します．

[GitHub](https://github.com/akihiro0105/RealsenseSDK_SpeechRecognition)

# Unityでの利用方法
作成したdllをUnityの/Plugins/x86 or x86_64フォルダにそれぞれ移動し，dllの情報を取得するコードを作成します．
プラグインとサンプルのコードを同梱したファイルを以下に置いておきます．

[unitypackage](https://www.dropbox.com/s/pnl4a9t8mb5o9o3/RealsenseSDK_SpeechRecognition.unitypackage?dl=1)

# 動作デモ
ダウンロードしたunitypackageをUnityにインポートするとSpeechRecognitionにsampleがあります．
実行前にMainCameraに配置されているSpeech.csのAudioDeviceNumの番号を確認してください．
![unity_speech_demo.png](https://qiita-image-store.s3.amazonaws.com/0/86283/ca6d4d8a-01ec-a2b5-a3d1-81d690da7c13.png)

正常に実行できた後マイクに話しかけると，音声認識の結果がゲーム画面の左上に表示されます．

![unity_speech_demo_start.png](https://qiita-image-store.s3.amazonaws.com/0/86283/3e8029c7-44b2-ae89-5536-b804a1cb0b41.png)
PeeringしたVPC間でのSecurityGroupの参照

Peering接続したVPC間の通信制御ではSecurityGroupの送信元/送信先にIPアドレスまたはネットワークアドレスを記述する必要がありましたが、Peering先VPCに作成したSecurityGroupを指定することが可能になったようです。（[ソース](http://docs.aws.amazon.com/AmazonVPC/latest/PeeringGuide/working-with-vpc-peering.html#vpc-peering-security-groups)）

検証
----

実際に試してみました。
まずはVPC1とVPC2をピアリング。
VPC1のSG-VPC1と、VPC2のSG-VPC2を作成し、SG-VPC1のインバウンドルールで送信元にSG-VPC2が設定できました。

![cap1.png](https://qiita-image-store.s3.amazonaws.com/0/111300/8b910b88-b0a1-2f39-09a3-1184b9902c72.png)

VPC内の通信制御にはSGの送信元・送信先にSGを指定するのが過不足なく設定できてよいと思います。
IPアドレス単位では動的アドレスの場合に面倒になりますし、サブネット単位では意図しない通信まで許可してしまうためです。

地味なアップデートかもしれませんが、ピアリング環境でもSG参照ができるようになったことでSGの整理がかなりやりやすくなると思います。

追記
----
追加で確認したところ、PeeringしたVPCであれば異なるアカウントのSGでも参照可能でした。
異なるアカウントのSGを指定した場合、送信元/送信先には{アカウントID}/{グループID}と表示されます。
werckerでプライベートなGoライブラリを使う方法 (How to use private Go libraries on wercker)

# 概要 (Abstract)
[wercker](http://wercker.com/)はプライベートレポジトリでも無料でCIできます．
On [wercker](http://wercker.com/), you can construct CI environments at no charge even for private repositories.

この記事ではwerckerで``bitbucket.org``のプライベートなGoライブラリを使う方法を述べます．
This post explains how to use private Go libraries on ``bitbucket.org`` on wercker.

# 問題 (Problem)
以下はあるGoプログラムの``wercker.yml``の例です．
This is a sample of ``wercker.yml`` of a Go program.

```wercker.yml
box: golang:1.5

build:
    steps:
        - setup-go-workspace
        - script:
            name: go build
            code: |
                go get -t ./...
                go build ./...
```

そのGoレポジトリで，プライベートレポジトリのライブラリ``bitbucket.org/yourname/a-private-go-library``を使っていると次のエラーが出てしまいます．
You will have the following error, if you use the library on private repository ``bitbucket.org/yourname/a-private-go-library`` in the Go program.


## :x: go build
```
Command cancelled due to error
package bitbucket.org/yourname/a-go-program: https://api.bitbucket.org/1.0/repositories/yourname/a-private-go-library: 403 FORBIDDEN
```

# 対策 (Solution)

1. werckerの管理画面でSSH鍵を作ります (Create a SSH key on wercker setting page)
    - 鍵の名前は何でも良いです　(Any key name is OK.)
    - 以下では``FOO_KEY``と名前をつけました (Sample: ``FOO_KEY``)
![0.png](https://qiita-image-store.s3.amazonaws.com/0/50725/69d7fa5f-06fc-9f8a-2c66-0d6defc2a8d6.png)

2. Public keyをコピーします (Copy the public key)
![0-2.png](https://qiita-image-store.s3.amazonaws.com/0/50725/cba49e1e-2185-658e-9771-f294d52aa10c.png)

3. ``bitbucket.org/yourname/a-private-go-library``の設定画面を開いて鍵を追加します (Add the key on the setting page for ``bitbucket.org/yourname/a-private-go-library``)
![1.png](https://qiita-image-store.s3.amazonaws.com/0/50725/4629ec9e-efb2-3ef9-5e24-8d43f166eb3b.png)
    - ラベルの名前は何でも良いです　(Any label name is OK.)

4. ``wercker.yml``を次のように修正します (Fix ``wercker.yml`` in the following way)

```wercker.yml
box: golang:1.5

build:
    steps:
        - add-ssh-key:
            keyname: FOO_KEY
            host: bitbucket.org
        - add-to-known_hosts:
            hostname: bitbucket.org
            fingerprint: 35:ee:d7:b8:ef:d7:79:e2:c6:43:9e:ab:40:6f:50:74
        - setup-go-workspace
        - script:
            name: Clone private packages
            code: |-
              git clone git@bbitbucket.org/yourname/a-private-go-library.git $GOPATH/src/bitbucket.org/yourname/a-private-go-library
        - script:
            name: go build
            code: |
                go get -t ./...
                go build ./...
```

これで終わりです
That's all !
[Laravel5]SendGridでメール送信する方法

#SendgridのSMTPサーバ経由で送信する場合
LaravelでSendGridのSMTPサーバを使用してメールを送ることはとても簡単にできて、
ユーザ登録が完了していれば、[公式HP](https://sendgrid.com/docs/Integrate/Frameworks/laravel.html)にも乗っている通り以下のように設定するだけです。

```php:config/mail.php
return array(
  'driver' => 'smtp',
  'host' => 'smtp.sendgrid.net',
  'port' => 587,
  'from' => array('address' => 'from@example.com', 'name' => 'John Smith'),
  'encryption' => 'tls',
  'username' => 'sendgrid_username',
  'password' => 'sendgrid_password',
);
```

ユーザIDとパスワードでも可能ですが、API KEYを使用する場合以下のようにすればOKです。

```php
    'username' => 'apikey',
    'password' => 'YOUR_API_KEY',
```
非常に簡単です。
ちょっと使ってみる分にはこれで事足りるかと思います。

#WebAPI経由で送信する場合

WebAPI経由での送信は以下の様な場合SMTPより有利と言われており、
Sendgridではメール送信時WebAPIを使用する事を推奨しています。

```
・ISPが全てのアウトバンドのメールポートをブロックしてHTTPのみ利用可能な場合
・Web APIはクライアント～サーバ間で多数のメッセージを必要としないため、アプリケーションサイトとSendGridの間で高いレイテンシーが確保できる場合、より高速になります。
・アプリケーションの動作環境を変更できず、SMTPライブラリのインストールおよび設定ができない場合
・メールを送信するライブラリを開発している場合。Web APIを利用した方が開発期間を短縮することができます。
```

また、エンコードはUTF-8固定のようです

SendGridでは公式ライブラリを始め、様々なWebAPIライブラリが公開されています。
https://sendgrid.kke.co.jp/docs/Integrate/libraries.html

例えば[公式のやつ](https://github.com/sendgrid/sendgrid-php)はこんな感じになります。

```php
$sendgrid = new SendGrid('YOUR_SENDGRID_APIKEY');
$email = new SendGrid\Email();
$email
    ->addTo('foo@bar.com')
    ->setFrom('me@bar.com')
    ->setSubject('Subject goes here')
    ->setText('Hello World!')
    ->setHtml('<strong>Hello World!</strong>');

$sendgrid->send($email);
```

やはりもう書いてある部分はそのままに、MailgunやMandrillのように、configでdriver変えて、API KEYとか設定するだけで使いたかったのですがどうにもうまい方法が見つかりませんでした。

#laravel-sendgrid-driverを使う方法

というわけでdriverにSendgridを指定できるようにするPackageを作ってみました。
https://packagist.org/packages/s-ichikawa/laravel-sendgrid-driver

ReadMeにも書いた通り使い方はインストールして、いくつか設定を追加するだけです。

```.env
MAIL_DRIVER=sendgrid
SENDGRID_API_KEY='YOUR_SENDGRID_API_KEY'
```

```php:config/services.php
'sendgrid' => [
    'api_key' => env('SENDGRID_API_KEY')
]
```

後はLaravelのドキュメントに書いてある通り使えます。
既存のLaravelのクラス郡を継承しているのでMAIL_DRIVERの値をsmtpやlogにすればもちろんそのまま動きます。
「ファイル名を指定して実行」から任意のアプリを実行

#環境
Windows 10

Windowsキー＋Rで表示される「ファイル名を指定して実行」から任意のアプリを実行する方法です。

![shortcat_001.png](https://qiita-image-store.s3.amazonaws.com/0/115341/6b175d44-7a47-072b-0157-2db81132e7aa.png)

「ファイル名を指定して実行」は、キーボードだけで操作できるので非常に便利です。
（電卓を起動したい場合は「calc」と入力してEnter）

今回は任意のアプリを起動する方法を記載します。

１．ショートカットを配置するディレクトを作成する。

場所はどこでも構いません。
ここではCドライブ直下（C:\shortcat）に作成します。

２．作成したディレクトリ（C:\shortcat）にPathを通す。

左下のWindowsボタンを右クリックし、システムを選択。
左枠のシステム詳細設定を選択。
環境変数ボタンを選択。
システム環境変数の変数:Pathを選択し、編集。
新規を押し、１で作成したディレクトリのパス（C:\shortcat）を入力してOK。

３．「ファイル名を指定して実行」から実行したいアプリ等のショートカットを作成し、１で作成したディレクトリに配置。

ショートカットキーのファイル名は「ファイル名を指定して実行」で入力する名前にしてください。

ここではNetBeansのショートカットをファイル名をnetbにして配置しました。

![shortcat_002.png](https://qiita-image-store.s3.amazonaws.com/0/115341/d9bdef84-4517-ac83-e228-1d6d86dec847.png)

４．Windowsキー＋Rで「ファイル名を指定して実行」を表示し、３で配置したファイル名（netb）を入力してEnter！

これでショートカットキーが実行されます。



よく使うファイルをここに配置すると作業効率がよくなると思います！