OmniAICreator/Qiita-1.07M huggingface dataset:
LabVIEW Tips: デバッグログ

はじめに
  LabVIEWで開発するプログラムは計測器等と通信するものが多いのですが、実行中に通信で何が起きているのかをデバッグするために、ログファイルにデバッグメッセージを保存することがよくあります。
　この方法だと、プログラム中にファイル保存の処理を入れたりすると結構煩雑になってしまいます。
Win32APIのOutputDebugStringとMicrosoftからフリーで公開されている DebugView というソフトを使うと、メッセージ表示側を作る手間も省くことができます。

DebugView
http://technet.microsoft.com/ja-jp/sysinternals/bb896647.aspx


LabVIEW側は以下のように CallLibraryFunctionNodeを使って、Win32APIの
OutputDebugString()を呼び出す。

ライブラリ: KERNEL32.DLL
関数名: OutputDebugStringA
呼び出し規約: stdcall(WINAPI)
関数プロトタイプ: void  OutputDebugStringA(const CStr OutputString);

LabVIEW 2012で作成したVIスニペット
LabVIEW 2012以降の環境なら、ダウンロードしたPNGファイルをダイアグラムにドラッグするとそのまま利用できます。
![_W32_OutputDebugString.png](https://qiita-image-store.s3.amazonaws.com/0/43526/e5a9633e-2ec1-8573-4732-e92948aa5156.png)
vagrantのboxのダウンロードに失敗する


下のように何回やってもvagrant upでboxのダウンロードに失敗する状態になったときは、~/.vagrant.d/tmpの中身を全削除すると多分うまくいく。


```
$ vagrant up
Bringing machine 'vccw.dev' up with 'virtualbox' provider...
==> vccw.dev: Box 'miya0001/vccw' could not be found. Attempting to find and install...
    vccw.dev: Box Provider: virtualbox
    vccw.dev: Box Version: >= 0
==> vccw.dev: Loading metadata for box 'miya0001/vccw'
    vccw.dev: URL: https://atlas.hashicorp.com/miya0001/vccw
==> vccw.dev: Adding box 'miya0001/vccw' (v2.14.0) for provider: virtualbox
    vccw.dev: Downloading: https://atlas.hashicorp.com/miya0001/boxes/vccw/versions/2.14.0/providers/virtualbox.box
An error occurred while downloading the remote file. The error
message, if any, is reproduced below. Please fix this error and try
again.

SSL read: error:00000000:lib(0):func(0):reason(0), errno 60

$ vagrant up
Bringing machine 'vccw.dev' up with 'virtualbox' provider...
==> vccw.dev: Box 'miya0001/vccw' could not be found. Attempting to find and install...
    vccw.dev: Box Provider: virtualbox
    vccw.dev: Box Version: >= 0
==> vccw.dev: Loading metadata for box 'miya0001/vccw'
    vccw.dev: URL: https://atlas.hashicorp.com/miya0001/vccw
==> vccw.dev: Adding box 'miya0001/vccw' (v2.14.0) for provider: virtualbox
    vccw.dev: Downloading: https://atlas.hashicorp.com/miya0001/boxes/vccw/versions/2.14.0/providers/virtualbox.box
==> vccw.dev: Box download is resuming from prior download progress
An error occurred while downloading the remote file. The error
message, if any, is reproduced below. Please fix this error and try
again.

HTTP server doesn't seem to support byte ranges. Cannot resume.

$ vagrant up
# 以降、何度やっても同じ結果
```
c++ builder XE4, 10.2 Tokyo > String > 暗号化

**(追記 2017/08/30): 「復号化」から「復号」に訂正しました。**

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

文字列の暗号化（と復号）を行いたい。

参考 http://kenkou-engineer.seesaa.net/category/530724-1.html

上記では`SHA1`による暗号化をしているようだ。

上記のページから取得できるファイルのコードをXE4向けかつ関数化したのが以下。

```cpp

#define	KEY_LENGTH_128	0x00800000	//128 bit

static AnsiString Encrypt(AnsiString srcStr, AnsiString password)
{
	char buf[100];
	unsigned long len;

	strcpy(buf, AnsiString(srcStr).c_str());
	len = strlen(buf);

	//Prepare CSP
	HCRYPTPROV hProv;
	if (CryptAcquireContext(&hProv, NULL,
		MS_ENHANCED_PROV, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT) == false)
	{
//		ShowMessage("Error: CryptAcquireContext()");
		return L"";
	}

	//Create hash
	HCRYPTHASH hHash;
	if (CryptCreateHash(hProv, CALG_SHA1, 0, 0, &hHash) == false)
	{
//		ShowMessage("Error: CryptCreateHash()");
		return L"";
	}

	//Create hash data
//	AnsiString password = L"myPassword";
	if (CryptHashData(hHash, password.c_str(), password.Length(), 0) == false)
	{
//		ShowMessage("Error: CryptHashData()");
		return L"";
	}

	//Create derive key
	HCRYPTKEY hKey;
	if (CryptDeriveKey(hProv, CALG_RC4, hHash, KEY_LENGTH_128, &hKey) == false)

	{
//		ShowMessage("Error: CryptDeriveKey()");
		return L"";
	}

	//Encode
	if (CryptEncrypt(hKey, 0, true, 0, buf, &len, len) == false)
	{
//		ShowMessage("Error: CryptEncrypt()");
		return L"";
	}

	CryptDestroyHash(hHash);
	CryptDestroyKey(hKey);
	CryptReleaseContext(hProv, 0);

	return AnsiString(buf);
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
	AnsiString sample = L"1234567";

	AnsiString res = Encrypt(sample, "password1");

	int nop=1;

}
```

resには暗号化された文字列が入っている。

パスワード("password1")を隠しておくことで、復号されることを防げるのだろう。
2015-10-11 c++ builder XE4, 10.2 Tokyo > エクスプローラを開いてファイル選択状態にする > ShellExecute(NULL, NULL, L"explorer.exe", L"/select,C:\\WINDOWS\\explorer.exe", NULL, SW_SHOWNORMAL);

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

フォルダをエクスプローラで開くコードを探していて、タイトルのコードを偶然見つけた。
[SO](http://stackoverflow.com/questions/15300999/open-windows-explorer-directory-select-a-specific-file-in-delphi)

`/select,`とファイル名でいいとのこと。

```cpp
	ShellExecute(NULL, NULL, L"explorer.exe", L"/select,C:\\WINDOWS\\explorer.exe", NULL, SW_SHOWNORMAL);
```


![explorer.png](https://qiita-image-store.s3.amazonaws.com/0/32870/8f534cd2-6933-1e18-20f7-1c18a72ed02f.png)

### .cppファイル指定時の動作
(2019-05-30追記)

上記はexplorer.exeを対象としたが、.cppファイルを対象とした場合は、エディタが.cppファイルを開くようになった。

Windows 10 v1809上。秀丸エディタを使用。
UEFIで起動するUSB3メモリが作れました

普段Windowsを使っているデスクトップPCですが、Ubuntuで仮想マシンを使った実験がしたくてUSB起動ディスクを作成しようとしたのですが、単にUSB3メモリへUbuntuをインストールしただけだと起動ディスクとして認識しない場合があるようです。

私の場合は、MBRブートなPCで作ったUSB3メモリだったためUEFIブートなUSBになっていなかったようでした。

以下のページを参考にしてEFIブートローダをUSB3メモリに置くと、USB3メモリであっても期待通りの起動するディスクになりました。

以下、まんまパクリですが、その手順をおさらいしておきます。

## 私の環境

* ASUS P8Z68-M Pro（使用するPC）UEFIブート、通常Windowsで使用
* Intel DH57JG（実験用Ubuntu Live USBを作るPC）MBRブート、通常Windowsで使用
* Ubuntu 14.04 LTS（実験用Ubuntu／インストーラUbuntu）
* USBメモリを２つ（インストーラ用USB2メモリ、インストール先用USB3メモリ）


## 参考

* [bellbind「USB HDDにMBR/EFI両ブート可能なUbuntuイメージを作る方法」](http://bellbind.tumblr.com/post/45757405213/usb-hdd%E3%81%ABmbrefi%E4%B8%A1%E3%83%96%E3%83%BC%E3%83%88%E5%8F%AF%E8%83%BD%E3%81%AAubuntu%E3%82%A4%E3%83%A1%E3%83%BC%E3%82%B8%E3%82%92%E4%BD%9C%E3%82%8B%E6%96%B9%E6%B3%95)

## 私の手順

### インストーラ用USBメモリにUbuntuを焼く

インストーラ用USBメモリにUbuntuを焼きこみます。私はホストOSであるWindowsで`unetbootin-windows-608.exe`を使い`Ubuntu 14.04 LTS`を焼きました。

以下、Intel DH57JGにおける作業になります。

### インストーラ用USBメモリで起動し、インストール先用USBメモリのパーティションを再構築します

GPartedを使って、インストール先用USBメモリのパーティションをマニュアル構成します。

* /dev/sd?1: fat32 128MiB
* /dev/sd?2: ext4 残り

私の場合は、Intel DH57JGにHDDが2台搭載してあるのでsddになっていました。

### インストール先用USBメモリにUbuntuをインストールする

このステップで特に説明することはないと思います。

以降、Intel DH57JGで起動したインストール先用メモリの話です。ここまでは準備であり、ここからが肝要だと思います。

### 1.linux-image更新時などで内蔵HDD内OSのブートメニューをgrubに登録しないよう抑制します

```
$ sudo chmod -x /etc/grub.d/30_os-prober
```

### 2.EFI版grubブートローダーファイルに必要なパッケージをインストールします

```
$ sudo apt-get install grub-efi-amd64-bin
```

### 3.EFIブートローダーファイルを作成します

EFIブートローダーファイルを`BOOTx64.EFIというファイル名で作成します。

```
$ grub-mkimage -d /usr/lib/grub/x86_64-efi/ \
  -o BOOTx64.EFI \
  -O x86_64-efi \
  -p "" \
  part_gpt part_msdos ntfs ntfscomp hfsplus fat ext2 \
  normal chain boot configfile linux multiboot
```

### 4.作成したEFIブートローダファイルをFAT32領域にコピーします

```
$ mkdir efi
$ sudo mount /dev/sdb1 efi
$ mkdir -p efi/EFI/BOOT
$ cp BOOTx64.EFI efi/EFI/BOOT/
$ cp -r /usr/lib/grub/x86_64-efi efi/EFI/BOOT/
```

### 5./EFI/BOOT/grub.cfgを作成します

```
configfile (hd0,msdos2)/boot/grub/grub.cfg
```

ext4にあるパッケージ管理されている/boot/grub/grub.cfgを 読み込んで利用するという設定のようです。そして、ディスクパーティションを指す(hd0,msdos2)とは、hd0はgrubをブートしたディスクであり、 msdos2はMBRでの2つ目のパーティションのことだそうです。

終了です。

### インストール先用USBメモリで起動します

めでたく？USB3メモリ(USB3ポートに挿したUSB3メモリ）でもUbuntuを起動できました。
Atomで上手にwarpを刻んでくれるwrap-styleを開発しました。


japanese-wrapは限界を感じたので、全く別の方法で新しいパッケージを作りました。

## パッケージ紹介

[wrap-style](https://atom.io/packages/wrap-style)

Atomで日本語などのソフトラップが正常に動作しない問題を解決してくれると思われるパッケージです。japanese-wrapの代替として、等幅フォント使用の日本語環境に限定せずに作成しました。

### 特徴

* CSSのスタイルに基づき、カスタマイズしたワードラップを実現！したと思う。
* プロポーショナルフォントでもCJKでも何でもオッケー。たぶん。
* ワード単位改行や禁則処理もしてくれる。
* 設定変えれば、ハードラップだって刻めちゃう。
* NFDもサロゲートペアもちゃんと考えてくれる。(激遅の厳密モードでのみ有効)
* Atom本家がワードラップをうまくしてくれる日はいつになるのだろう…って愚痴をこぼす必要は無い。

## どんなやつなの？

Atomへのハック方法はいつもの。あとはがんばって改行位置を探しているだけです。

### 改行位置を判断する方法

いちいちJavaScript上で自分で計算していたら、遅いです。ということでchromium君にレンダリングさせて、そこから取得しようってのが今回の方法です。

1. レンダリング用の砂場を作る。
2. wrap関係のスタイルシートを設定する。
3. テキストを文字単位で`span`で分けたのを入れる。
4. どの`span`で次の行になっているかを調べる。

砂場はReact.jsで作りました。

## 課題

* 遅い。遅すぎる。もっと速く！もっと高速に！光の速度を超え、時空の壁を突破し、過去に遡るぐらいまでにしたい。
* chromiumがハイフネーションに対応してない(TдT)

ということで、速くしてくれるPRを募集中です。

あ、仕組みとしてコンフリクトするので、使う前にjapanese-wrapは無効にしてね。
interesting > C# String.Empty VS ""

http://qiita.com/cashwu/items/d38b236734b649ab4dab
の記事。中国語はさっぱり分からないが、なんとなく面白そう。
(I don't study Chinese and have no idea what is written, but it seems interesting).

結論の３つについて何が書かれているのだろうか?
(What are the three conclusions???)

StyleCopというチェックツール？（静的解析ツール）で`String.Empty`に対して代替案として`""`が候補に上がっている???
(The checktool named StyleCop (static analyzer?)? recommends to use `""` instead of `String.Empty`???)

ある条件では`String.Empty`でいいが、ある他の条件では`""`がいい？??
(In some condition, `String.Empty` may be good, and `""` in other condition???)

両者の処理の重さの比較ではそれほど差が見られなかったようだ。
(Both has the similarities in the performance.)

参考リンクがいくつもあるので、そちらを見るのがいいのかもしれない。
(The article shows some links. It may also be good to see the linked information.)

<hr>
google翻訳で結論を訳してみた
(I translated the three conclusions using translate.google)

1. 2間のギャップ上記の有効性は最小限であると言うことができます（の有効性を比較します後で記事を綿密）
2. 一般的に、ほとんどの人は、`String.Empty`を意見をより直感的になると思います（一部の人は思うものの、`""`比較直感）
3. `""`はうまくプレーし、空白文字が（個人的には少し低い確率を感じるだけでなく、発生する可能性がある）が現れることがあり

1,2についてはある程度分かったが、3については意味が捉えにくい。
(I could understand about Items 1 and 2, but have some difficulty in understanding the Item 3).
GitHubのリポジトリのLanguageが正しくない？


自分のリポジトリを検索した際に横に実装言語がでるのだが，それが思っていた言語ではないときの対処法．

自分はscalaで実装したのにxsltになっていた．

## 原因
eclipseとかintellijとかの設定ファイルとかpushする必要する必要ないものまでpushしていた．

## .gitignore
一番いいのは一番最初に計画的にこの.gitignoreファイルにpush時に無視するファイルやディレクトリのパスを書いておくこと．

ただ，自分みたいに一度pushしてしまった場合は，この```.gitignore``` を記述したのちに，当該ファイル，ディレクトリを管理対象から外しておく必要がある．

## git rm --cached
管理対象から外すコマンドは下記．

```sh:コマンド
# ファイルを管理対象から削除
git rm --cached ファイル名

# ディレクトリを管理対象から削除
git rm --cached -r ディレクトリ名
```

```--cached``` オプションをつけないとそのまま削除されてしまうので注意

```.gitignore``` への記述も忘れずに!

## 結果
自分はこれをしたら無事scalaと表示された．
【FileMaker】タッチ＆ゴーでデータの移行

めんどくさいデータ移行を、タッチ＆ゴーの感覚でやっつけます。

同じテーブル構造でインポート＆エクスポートをします。
このとき、
・期間を決めてエクスポートする
・エクスポートしたファイルもデスクトップ上から削除する
と、定期的バックアップなどで必要なことも盛り込んでみます。

特に、デスクトップ上からファイルを削除することは、手動でやるなんてことは避けたいので、ぜひとも実装しておきたいところ。

今回は、前月分のデータを移行します。
こんな感じで。
![スクリーンショット 2015-10-10 22.55.43.png](https://qiita-image-store.s3.amazonaws.com/0/60538/6360aa7e-a80c-4df1-086a-72cef16e02e6.png)

この例では、期間が前月１ヶ月分になっています。

*Date ( Month(Get(日付))-1 ; 1 ; Year(Get(日付)) ) & "..." & Date ( Month(Get(日付)) ; 0 ; Year(Get(日付)) )*

上記↑のような期間設定は、よくある事例だと思います。

以下のサンプルの仕様です。
・バックアップするテーブル：更新履歴
・バックアップ先テーブル：更新履歴＿バックアップ用
・バックアップするフィールド：全部
・バックアップ期間：前月１ヶ月分
・バックアップタイミング：当月内
・バックアップで出力したテンポラリファイルはスクリプト内で削除

では、サンプルです。
![スクリーンショット 2015-10-09 20.22.54.png](https://qiita-image-store.s3.amazonaws.com/0/60538/fef29ff1-d41c-f80e-4f94-72b4156748cc.png)

自動運用（例えば夜中にバッチ運用するとか）する際は、ダイアログは必要ないですが、ここでは確認と有人作業を前提に表示しています。

18行目でエクスポートしたデータを対象外にして、19行目で再度エクスポート処理をしています。
これは、FileMakerでいうところの「出力ファイルの削除」方法です。
（FileMaker Pro Advanced 14 応用編 P548にあります）

「へー」
って感じですよね。
つい、「何かしらのファイル削除ステップがあるのでは、、、」と探しがちですがね。
ちょっとわかりにくいので、ぜひとも各自でカスタム実装するのではなくFileMaker本家からスクリプトステップとして提供してほしいです。

ということで、バックアップファイルに前月分のデータがバックアップできました。
![スクリーンショット 2015-10-11 6.59.34.png](https://qiita-image-store.s3.amazonaws.com/0/60538/f59a82b0-eecd-ceb4-ae17-b39c8dbf26a4.png)


ではでは。

追記です。
[改良版](http://qiita.com/tyuma/items/7e1d5faa39b3b2ea4fbe)を別記事として書いています。
そっちの方がやり方としては的確かな。
技術英語 > That was our first thought. / in the first place

@ Star Trek Voyager > FACES

Janeway艦長の「〜してはどうか」という問い合わせに対して、Tuvokの返答

> That was our first thought.

<hr>
first 関連で思い出したのが

http://ejje.weblio.jp/content/in+the+first+place
> in the first place
> ... you should never have come in the first place.

「そもそも」「初めから」の意味で使われる例を最近よく耳にする。
CoffeeScriptでgeneratorを明示的に作成する

CoffeeScriptは関数の中に`yield`キーワードがあると自動的にgeneratorであると判断してくれますが、これが邪魔になることがたまにあります。

```coffeescript
foo -> co ->
  bar -> yield baz()
```

この例では、`co`に渡す関数をgeneratorにしたいわけですが、実際には`bar`に渡る関数がgeneratorになってしまい、うまくいきません。
以下のように書けば意図した通りの挙動になります。

```coffeescript
foo -> co ->
  bar -> `yield(baz())`
  yield return
```
ブログプラットフォーム「Ghost」で、syntax highlightを導入する

このブログでコードをいろいろ書くこともあるので、syntax highlightを導入しないと見難いかなと思ったので、[Prism](http://prismjs.com/download.html)を使って導入してみました。

やり方は下記の通り。

1. [Prism](http://prismjs.com/download.html)にアクセスし、いくつか必要なオプションを選んで、`prism.js`と`prism.css`をダウンロードする
2. `prism.js`は、`ghost/content/themes/casper/assets/js`に保存
3. `prism.css`は、`ghost/content/themes/casper/assets/css`に保存
4. `default.hbs`を編集

### default.hbsの編集方法

`prism.css`は、`link`タグで上のほうに挿入しましょう。

```
<link rel="stylesheet" type="text/css" href="{{asset "css/screen.css"}}" />
<link rel="stylesheet" type="text/css" href="//fonts.googleapis.com/css?family=Droid+Serif:400,700,400italic|Open+Sans:700,400" />
<link rel="stylesheet" type="text/css" href="{{asset "css/prism.css"}}" />
```

`prism.js`は、`script`タグで下のほうに挿入します。

```
<script type="text/javascript" src="{{asset "js/index.js"}}"></script>
<script type="text/javascript" src="{{asset "js/prism.js"}}"></script>
```

### 使い方

こんな感じで使います。

```
```language-markup
  <h1>Hello World!</h1>```
``` 
 
下記のような感じで言語を選びます。デフォルトは下記の3つですが、サイトからのダウンロード時にいろいろ含めているなら、他のものも使えます。

* `language-markup`で HTML/XML
* `language-javascript`でJavaScriptとJSON
* `language-css`でCSS
babel-nodeをpm2でデーモン起動


pm2でbabe-nodeを使いたいメモ

[pm2でhubotをデーモン起動してみる](http://qiita.com/n0bisuke/items/632166f29b887f975980)を参考に

通常はこんな感じの起動なので

```
$ babel-node app
```

pm2でbabel-nodeを使うとこんな感じです。

babel.shを作っておきます。

```babel.sh
babel-node app
```

```
$ pm2 start -f ./babel.sh -x --name app
```

```
[PM2] Starting babel-node in fork_mode (1 instance)
[PM2] Done.
┌──────────┬────┬──────┬───────┬────────┬─────────┬────────┬─────────────┬──────────┐
│ App name │ id │ mode │ pid   │ status │ restart │ uptime │ memory      │ watching │
├──────────┼────┼──────┼───────┼────────┼─────────┼────────┼─────────────┼──────────┤
│ app │ 1  │ fork │ 11731 │ online │ 0       │ 3m     │ 19.426 MB   │ disabled │
└──────────┴────┴──────┴───────┴────────┴─────────┴────────┴─────────────┴──────────┘
```
gitignore に書くべきでないものは gitignore_global へ

# TL;DR
[github/gitignore](https://github.com/github/gitignore) にあるか [github/gitignore - Global](https://github.com/github/gitignore/tree/master/Global) にあるかで判断

# gitignore_global とは
自分一人の環境のみに存在するようなファイルをプロジェクト内の `.gitignore` ファイルに書き込むのは賢いとはいえないし, 気持ちが悪い

そこで自分のPC上でのみプロジェクトの特定のファイルを ignore する事ができるのが gitignore_global

`git config --global core.excludesfile ~/.gitignore_global` とか `.gitconfig` ファイルいじって有効化が必要

参考: グローバルで.gitignoreを適応する http://qiita.com/katsew/items/5cade12fa743a2f31f25

使い方は .gitinore と同様に `~/.gitignore_global` に追記した内容が反映される

# プロジェクトの .gitignore に書くべきでないもの例
## .DS_Store
これは OS X で開発している人のみが生成する可能性があるもの
故に mac ユーザが `.gitignore_global` に書いとけば済む


## .idea/ や .project
JetBrains や eclipse の IDEがプロジェクト情報を保存しているファイル
これも同様の理由で, 全ての開発者が同じ IDE を使って開発しているとは限らないし, そもそも IDE を使っているとも限らないので個々の gitignore_global を使うべき

# 本題: どちらの gitignore に書けばいいのか
基本的には前述の考え方で判断すればいいけれど判断に困るときがあるし面倒なので基本は一括でやりたい

**.gitignore に書くべきもの** はここを参考にするといいのは知っている人が多いと思う
github/gitignore
https://github.com/github/gitignore
メジャーな環境を網羅していて Github Organization の公式リポジトリで信用も高い


そしてこのリポジトリ内の Global がある
`~/.gitignore_global` に書くべきか `.gitignore` に書くべきなのかは Global 側に入っているかどうかで参考にすることが出来る
https://github.com/github/gitignore/tree/master/Global
【解決法】ChromeとSafariでフォントが太く表示されてしまう件

ブログのテーマをいじっていて気づいたのですが、なぜか太く表示されてしまう事象が発生しました。同じfont-weightなのに、他のサイトと違って一回り太くなってしまって、スッキリしない印象になってしまいました。font-weightと違う動きで、太くなるので非常に嫌な感じだった。

いろいろと調べてみると、`-webkit-font-smoothing`が原因と判明。ブラウザのレンダリング時に太くなっているみたいです。

via [-webkit-font-smoothing と Usability - メモログ](http://memolog.org/2013/08/-webkit-font-smoothing_and_usability.html)

# -webkit-font-smoothing

このプロパティを定義してあげるだけで解消できました。3種類の設定値があります。

```
-webkit-font-smoothing: none;
-webkit-font-smoothing: antialiased;
-webkit-font-smoothing: subpixel-antialiased;
```

デフォルトの状態は`subpixel-antialiased`です。`antialiased`は`subpixel-antialiased`を無効にした状態で、`none`はアンチエイリアスをしない状態になります。

わたしのブログで試したところ、`antialiased`で設定すると、問題も解決しました。

```
body {
	    -webkit-font-smoothing: antialiased;
}
```

# リスク

ただし、注意すべき点もあるようです。

>でも、Please Stop "Fixing" Font Smoothing · UsabilityPostという記事では、やたらにこの指定しない方が良いと述べられています。理由としては、解像感が落ちるので、読みにくくなるということで。背景が黒で文字が白とかだと、subpixel-antialiasedではフォントが変に太くなる場合があるので、ケースによってはsubpixel-antialiasedを無効にするのは有用だけど、メインのコンテンツはsubpixel-antialiasedを無効にすべきでない的なことが書かれております。

>[-webkit-font-smoothing と Usability - メモログ](http://memolog.org/2013/08/-webkit-font-smoothing_and_usability.html)

自分の環境（Mac）では綺麗に見えていますが、他の人の環境では見づらい感じになっているかもしれません。フォントの設定は非常に難しいので、いろいろと検証したうえで設定すべきなのかもしれません。
[翻訳] 連続非推奨魔 José Valim 再びあらわる

Augie De Blieck Jr.さんの2015年10月3日付のブログ記事[**Serial Deprecator José Valim Strikes Again**](http://variousandsundry.com/cs/blog/2015/10/03/serial-deprecator-jose-valim-strikes-again/)の翻訳です。

**ElixirConf 2015**のキーノートスピーチでElixirの作者 José Valim が発表したデータ構造に関する仕様変更について。HashSet, HashDict, Set, 及びDictがなくなるようです。全部Mapでやってくれ、ということみたい。

-----
(承前：ブログ記事をElixir Conf 2015の最新臨時ニュースのために一時的に更新停止しておりました。ご了承ください)

## **José Valim: 言語設計界で最も危険な男？**

**テキサス州オースチン発:** 連続非推奨魔José Valimがこの週末またも襲撃しさらに4人が「単純化」キャンペーンの新たな犠牲者となった。

250名を越える聴衆の面前でのこの衝撃的なスピーチにおいて、ValimはElixir言語のデータ構造のうちなんと4つもなくすと明言した。**HashSet**, **HashDict**, **Set**及び**Dict**がお亡くなりになる予定であると。

恐怖と理不尽に対するうめきが部屋中に満ちあふれ、テーブルはノートパソコンを即座に起動しGithubに入ってほうほうの体で彼らのコードを**Map**を使うように変更する関数型のお友達たちでいっぱいになった。

「**HashSet**がお前にいったい何をしたと言うんだ！」Valimの指示に対してあるコーダーは大慌てでプロジェクトを`git branch`しながら叫んだ。

ある匿名希望の証言者は言う。そこには何らかの魂胆があったのではないかと。「思い出してくれよ、AppleがGoogle Mapを削除したときのことを。何週間もの間まともなカーナビ手段がなくなったよな[^1]。奴が今度は**Map**を有料版のElixirでのみ有効にしたらどうする？巨大企業だけが**Map**を使えるようになったらどうする？」

[^1]: ぱちんこガンダム駅、懐かしいですね～

他の証言者、Elixirを全く知らないにも関わらずPhoenixには熟達していると言い切る熱狂的なユーザーは「我々は自らに問いかけねばならない。Valimが**Map**を次に殺るとしたら…もう**struct**に頼るしかないのか、と」

この報告者が[structはmapの一種であった](http://elixir-lang.org/getting-started/structs.html)ことを指摘した時、匿名のコメンターが、4人の髭もじゃの屈強なElixir支持者[^b]につまみ出される前に「Action Cable[^a]こそ来るべき未来なり…」などとわけのわからないことを口からつばを飛ばして言いつつ立ち去った。

[^a]: Rails5で実装予定の[新機能](http://qiita.com/bisque33/items/dfffb06d6c5e12e9da1f)
[^b]: [成功する言語の秘訣はヒゲ](http://www.wired.com/2012/06/beard-gallery/)かな…

これは既に古いニュースだったのか、または情報取引市場でValimがインサイダー取引に手を染めたのではないかと思った人たちもいたようである。Dave ThomasとMooseがElixirConfに土壇場で参加しなかったのは彼らが"Programming Elixir"の書き直しで忙しくなったからではないかという噂が瞬く間に広まった。

Saša Jurić と Benjamin Tan Wei Hao[^2] からはコメントがもらえなかった。彼らは既に書き直し中なのであろう。

[^2]: それぞれ"Elixir in Action"と"The Little Elixir & OTP Guidebook"の著者。

我々はErlangコアチームにもこのニュースについてどう考えるか尋ねた。予め用意されていた宣言文で彼らは「30年もの牛の尿のごとく長き年月を経てようやく我々はMapに到達した。近年の我々の最大の非推奨化はrandom関数であるが、それについても何年もの討議の結果として、である。Valimちゃんはもっとゆっくりする必要がある」

オースチンの地元警察当局からはこの新事実に関してすぐさま911番での苦情受付を開始するかどうかについては言及されていないが、まだ非推奨化が法的にはなされておらず、また[「マイノリティ・リポート」](http://movies.yahoo.co.jp/movie/%E3%83%9E%E3%82%A4%E3%83%8E%E3%83%AA%E3%83%86%E3%82%A3%E3%83%BB%E3%83%AA%E3%83%9D%E3%83%BC%E3%83%88/235792/)-犯罪予知システムが現実に存在しない以上、犯行が実行されたのかどうかには疑問の余地がある。

「あんなのは純然たるヘイトスピーチですよ」と**HashSet**ユーザーは午後遅くに言い切った。彼のチャットアプリをMapに書き換える間彼の頬には涙が流れ続けていた。

今夜のElixir界は動揺している。飛行機で帰宅する支持者の群れが「次は一体誰が殺られるんだ…」と考えている。特に**Range**の愛好家たちが[Norris Conference Center](http://norriscenters.com/)[^3]を出るやいなや後ろをきょろきょろ振り返るのが見られた。Valimが次にElixirConf 2016で何をするかわからないという恐怖がはっきりと彼らの声に現れていた。

[^3]: ElixirConf2015の会場。2016年はまだ場所未定の模様。

時が全てを明らかにするであろう、としか言えない。

実際のところ`:calendar`が全てを明らかにするわけだが…なんせElixirには未だに標準では`Time`も`Date`もライブラリがない[^4]のだから。
[^4]: [Timex](https://hex.pm/packages/timex)がおすすめ。私の記事"[[小ネタ]13日の金曜日](http://qiita.com/HirofumiTamori/items/585ac147af06731fee25)"も見てね。
heroku heroku login windows error

#heroku heroku login windows error

##Heroku　$heroku login　 Error: "\x80" on Windows-31J (Encoding::InvalidByteSequenceError)

参照
[リンク]（
http://stackoverflow.com/questions/33029991/heroku-comannd-always-fails
）　

heroku login

Heroku/bin/heroku.bat
```
@ruby.exe "%~dpn0" %*
```
を
```
@ruby.exe -Eutf-8 "%~dpn0" %*
```

に修正するとエラーが解消されます
Perl から Redis を使う


Perl から Redis に接続するための [Redis](http://search.cpan.org/~dams/Redis/lib/Redis.pm) ライブラリを試してみた。

## redis-server のインストール

Ubuntu だったので以下のようにして入れたものを使った。

```shell-session
% sudo apt-get install redis-server
% redis-server -v       
Redis server v=2.8.4 sha=00000000:0 malloc=jemalloc-3.4.1 bits=64 build=a44a05d76f06a5d9
% sudo service redis-server status
redis-server is running
```
## Redis モジュールのインストール

```shell-session
% cpanm Redis
% perl -MRedis -le 'print $Redis::VERSION'
1.981
```

## Perl から接続する

まずは普通に使ってみる。
大抵の他の言語のライブラリと同じく [Redis のコマンド](http://redis.io/commands) と同名のメソッドが実装されている。

```perl
use strict;
use warnings;
use utf8;

use Redis;

my $redis = Redis->new(server => 'localhost:6379');
$redis->set('foo', 100);
$redis->set('bar', "Str");

print $redis->get('foo'), "\n";
#=> 100
print $redis->get('bar'), "\n";
#=> Str
```

## Hash に tie して使う

[Redis::Hash](http://search.cpan.org/~dams/Redis/lib/Redis/Hash.pm) を使うことで Hash に tie する事ができる。
これにより通常の Hash にアクセスするのと同じコードで Redis 上にデータを保存できる。

```perl
use strict;
use warnings;
use utf8;

use Data::Dumper;
use Redis;
use Redis::Hash;

tie(my %hash, 'Redis::Hash', undef, (server => 'localhost:6379'));

$hash{apple}  = 100;
$hash{banana} = 150;
$hash{melon}  = 500;

print Dumper(\%hash);

# Redis に保存されていることを確認
my $redis = Redis->new(server => 'localhost:6379');
print Dumper($redis->keys('*'));
```

## 配列に tie して使う

同様にして [Redis::List](http://search.cpan.org/~dams/Redis/lib/Redis/List.pm) を使う事で配列に tie する事もできる。

```perl
use strict;
use warnings;
use utf8;

use Data::Dumper;
use Redis;
use Redis::List;

tie(my @list, 'Redis::List', 'languages', (server => 'localhost:6379'));

# 値の追加。 rpush が使われる
push(@list, 'Perl');
push(@list, 'Ruby');
push(@list, 'Scala');

print Dumper(\@list);

# 値の入れ替え。 lset が使われる
$list[2] = 'Haskell';

print Dumper(\@list);

# Redis に保存されていることを確認
my $redis = Redis->new(server => 'localhost:6379');
print Dumper($redis->lrange('languages', 0, -1));
```

## 参考

Perl の Redis ライブラリを調べた - Shogo's Blog
http://shogo82148.github.io/blog/2013/08/24/perl-redis-libraries/
javascript  配列から、任意の文字列を削除

# javascript の配列をループさせずに、任意の文字を削除する方法

* `indexOf`で任意の文字列のあるindexを確認。
* `splice`で配列からindexの要素を削除。
* 注意：配列内の任意の文字列は１つのみ存在すること。 
* ブラウザ IE8以下には対応していません。

```js
var arr = ["aaa","bbb","ccc"];
var val = "bbb"
var idx = arr.indexOf(val);
if(idx >= 0){
 arr.splice(idx, 1); 
}

// arr : ["aaa","ccc"]
```

### filterを使う方法
* 任意の文字が配列内に複数存在しても、すべて削除できます。

```js
var arr = ["aaa", "bbb", "ccc", "bbb"];
var val = "bbb"
var res = arr.filter(function(a) {
  return a !== val;
});

// res : ["aaa","ccc"]
```

### IE8 を考慮に入れる場合
* jQuery を使えるなら、`$.inArray` で対応できます。

```js
// $.inArray(検索文字列, 配列)
var arr = ["aaa","bbb","ccc"];
var idx = $.inArray("bbb", arr);
if(idx >= 0){
 arr.splice(idx, 1); 
}

// arr : ["aaa","ccc"]
```
超訳 Redux Documentation - ストア(store)

[Redux Documentation](http://rackt.github.io/redux/index.html) の [Store](http://rackt.github.io/redux/docs/basics/Store.html) の超訳です。

# ストア(store)

**ストア** は [レジューサ(reducer)](http://qiita.com/kobanyan/items/ec9ebfeadb1d28e8e489) と [アクション(action)](http://qiita.com/kobanyan/items/367850d28a838207e47d) を統合するオブジェクトです。ストアには以下の責務があります。

* アプリケーションのステートを保持する
* [`getState()`](http://rackt.github.io/redux/docs/api/Store.html#getState) を通じてステートにアクセスできるようにさせる
* [`dispatch(action)`](http://rackt.github.io/redux/docs/api/Store.html#dispatch) を通じてステートを更新できるようにさせる
* [`subscribe(listener)`](http://rackt.github.io/redux/docs/api/Store.html#subscribe) を通じてリスナーを登録させる

Redux アプリケーションにおいてはストアは一つのみです。データを処理するロジックを分割したくなったとき、ストアを色々と作るかわりに [レジューサコンポジション(reducer composition)](http://qiita.com/kobanyan/items/ec9ebfeadb1d28e8e489#%E3%83%AC%E3%82%B8%E3%83%A5%E3%83%BC%E3%82%B5%E3%81%AE%E5%88%86%E5%89%B2) を使いましょう。

[前節](http://qiita.com/kobanyan/items/ec9ebfeadb1d28e8e489)では、いくつかのレジューサを [`combineReducers()`](http://rackt.github.io/redux/docs/api/combineReducers.html) を利用して一つにまとめました。これからそれをインポートして [`createStore()`](http://rackt.github.io/redux/docs/api/createStore.html) に渡してみましょう。

```js
import { createStore } from 'redux';
import todoApp from './reducers';

let store = createStore(todoApp);
```

[`createStore()`](http://rackt.github.io/redux/docs/api/createStore.html) に二つ目の引数を指定することで初期ステートをセットすることも可能です。サーバー上で実行されている Redux アプリケーションのステートとクライアントのステートを合わせるのに有用です。

```js
let store = createStore(todoApp, window.STATE_FROM_SERVER);
```

## アクションをディスパッチする

ストアを作ったのでプログラムが正しく動作するか確認してみましょう。UIなしでも更新ロジックのテストをすることができます。

```js
import { addTodo, completeTodo, setVisibilityFilter, VisibilityFilters } from './actions';

// 初期ステートのログ
console.log(store.getState());

// ステートが変更されるたびにログ
let unsubscribe = store.subscribe(() =>
  console.log(store.getState())
);

// アクションをディスパッチする
store.dispatch(addTodo('アクションについて学ぶ'));
store.dispatch(addTodo('レジューサについて学ぶ'));
store.dispatch(addTodo('ストアについて学ぶ'));
store.dispatch(completeTodo(0));
store.dispatch(completeTodo(1));
store.dispatch(setVisibilityFilter(VisibilityFilters.SHOW_COMPLETED));

// ステートの更新のリッスンを止める
unsubscribe();
```

ストアに保持されているステートにどのような変化が起きているのか確認することができます。

<img src='http://i.imgur.com/zMMtoMz.png' width='70%'>

UIを書き始める前にアプリの動作について定義しました。しかし、これをしたかったわけではなく、レジューサとアクションクリエータのためのテストを書くことができるという点について強調したかったのです。単なる関数なのでモックを作る必要がないのです。

## ソースコード

#### `index.js`

```js
import { createStore } from 'redux';
import todoApp from './reducers';

let store = createStore(todoApp);
```

## 次の節では

TODOアプリのUIを作る前に、Redux アプリケーション内でデータがどのように流れるのか についてちょっと寄り道します。
空のディレクトリを再帰的*的*に削除する


私の認識では、空のディレクトリが入っているディレクトリも空です。

```bash
#!/bin/sh

set -eu

dirs=$(mktemp)

trap 'rm '$dirs'; exit 1' 1 2 3 15

find . -type d -empty | grep -v '/\.'> $dirs
while [ -s $dirs ]; do
    cat $dirs | xargs rmdir
    find . -type d -empty | grep -v '/\.' > $dirs
done

rm $dirs
```
AndroidのWebviewでSwipeRefreshLayoutを使用した際のスプラッシュ画面の実装方法

Webviewアプリの立ち上げ時に下記のvisibilityを切り替える方法でスプラッシュ画面を実装していたのだけど、pullTorefresh機能を追加したくてSwipeRefreshLayoutを使ったらスプラッシュの表示に苦労した。
[Splash screen while loading a url in a webview in android app](http://stackoverflow.com/questions/9589365/splash-screen-while-loading-a-url-in-a-webview-in-android-app)

- レイアウトの変更ではどうにもうまくいかず
- assetsにスプラッシュ用HTMLを用意
- 簡易Javascriptで縦のセンタリング

SwipeRefreshLayoutの使用を前提にスプラッシュの実装を試みた。レイアウトの切り替えではスプラッシュが表示されなかったり上スクロールができなくなったりとうまくいかなかった。
そこで、assetsフォルダにスプラッシュ用のHTMLを用意しまずWebviewでそれを表示してからサイトをロードさせる方法をとるとうまくいった。

***

まず、assetsフォルダにicon.pngと下記のsplash.htmlを用意する

```ruby:splash.html
<html>
<head>
    <title>スプラッシュ画面</title>
</head>
<body style="text-align:center;">
    <img src="file:///android_asset/icon.png" style="width:40px;" id="splash_title"/>
    <h4 style="color:gray; margin-top:5px">アプリタイトル</h4>
    <script type="text/javascript">
        var half_height = window.innerHeight/2-40;
        if(half_height==null || half_height<=0)
          half_height = window.parent.screen.height/2-40;
        var element = document.getElementById("splash_title");
        element.style.paddingTop = half_height;
    </script>
</body>
</html>
```
画像はおしゃれに小さく表示させる。if文の箇所は念のため。端末の画面サイズによらずタイトルと画像を中央に表示させることにこだわりHTMLにJavascriptを埋め込んで調整した。

プログラムでは用意したHTMLファイルをまずロードする。

```ruby:MainActivity
webview.loadUrl("file:///android_asset/splash.html");
```
ローカルへのアクセスなので瞬時にonPageFinishedが呼び出される。そこで本家のサイトにアクセスしに行く。

```ruby:MainActiviry
webview.setWebViewClient(new WebViewClient(){
  @Override
  public void onPageFinished(WebView view, String url) {
    mSwipe.setRefreshing(false);
    if(url.contains("splash")) webview.loadUrl("http://...");
  }
```

いい感じ。
＄_ENVの取得方法

ちょっとハマったのでメモ((φ(･д･｡)。

PHPの$_ENV変数より、環境変数PATHを取得するために
/etc/php.iniを修正する必要がある。

(変更前)variables_order = "GPCS"
(変更後)variables_order = "EGPCS"

これで$_ENV変数で、環境変数を取得できる。


【動作環境】
OS:CentOS Linux release 7.1.1503 (Core)
仮想ソフト:VMware Player
某番組の匠の二つ名みたいなやつを生成する

http://asahi.co.jp/beforeafter/takumi/ を眺めてたら自動化できそうな気がしたので。

で、https://gist.github.com/yohhoy/0cd157076085a79fd5ed ができた。毎回ページ取得する非効率実装なので連打はほどほどに。

```
$ ./takumi-nick.py 
住まいと環境のヘルストレーナー
$ ./takumi-nick.py 
開口のメンタルトレーナー
$ ./takumi-nick.py 
暮らしと動線のエコガイド
```
Crystal | MarkdownでAPIドキュメントを書く

CrystalはMarkdownでのAPIドキュメントをサポートしています。  
ドキュメントの記法の概要、生成方法、疎通確認まで行ってみます。

## <i class="fa fa-file-text" style="font-size:1em;"></i> ドキュメントの記法
CrystalはMarkdownによるAPIドキュメントの記述をサポートしています。

Classやメソッドの直前に書いたコメントが対象となり、
1行目がメソッドの要約。
2行目以降が詳細になります。

細かい記法については公式ドキュメントをご確認ください。

[Documenting code - Crystal Doc](http://crystal-lang.org/docs/conventions/documenting_code.html)

## <i class="fa fa-terminal" style="font-size:1em;"></i> ドキュメントの生成
`crystal doc`でドキュメントを生成できます。

## <i class="fa fa-flask" style="font-size:1em;"></i> サンプル1: コメント無しで生成
### <i class="fa fa-code" style="font-size:1em;"></i> sample.cr
```ruby
module SampleModule
  class SampleClass
    def sample
    end
  end
end
```

### <i class="fa fa-child" style="font-size:1em;"></i> ドキュメントを生成
```bash
$ crystal doc sample.cr
$ tree doc/
doc/
|-- SampleModule
|   `-- SampleClass.html
|-- SampleModule.html
|-- css
|   `-- style.css
|-- index.html
`-- js
    `-- doc.js

3 directories, 5 files
```

### <i class="fa fa-file-text" style="font-size:1em;"></i> ドキュメントを確認

![crystal_doc_no_comment.png](https://qiita-image-store.s3.amazonaws.com/0/43480/08cb683b-c803-ca89-396b-be0c4be5cb9a.png)

## <i class="fa fa-flask" style="font-size:1em;"></i> サンプル2: コメント付きで生成
### <i class="fa fa-code" style="font-size:1em;"></i> sample.cr
```ruby
# Module summary
#
# module detail1
# *module detail2*
module SampleModule
  # Class summary
  #
  # class detail1
  # **class detail2**
  class SampleClass
    # Method summary
    #
    # ## Detail
    # method detail1
    # *method detail2*
    #
    # ## Examples
    # ```
    # SampleModule::SampleClass.new.sample
    # ```
    def sample
    end
  end
end
```

### <i class="fa fa-child" style="font-size:1em;"></i> ドキュメントを生成
```bash
$ crystal doc sample.cr
```

### <i class="fa fa-file-text" style="font-size:1em;"></i> ドキュメントを確認
![crystal_doc_with_comment.png](https://qiita-image-store.s3.amazonaws.com/0/43480/e61e2559-9c17-c7fa-89fe-577668a59f86.png)
Paper Plane xUI で peco を使ってタブを切り替える


[開いているタブをListfileで表示してインクリメンタルサーチ - Qiita](http://qiita.com/hokorobi/items/f57e994c41b7e4e7e98c) だと下のようにイマイチだったので別案を考えてみた。

- 新しくタブを開くので、現在開いているタブのカーソル位置が再現できない
- 重複するタブがどんどん開く （[同じパスのタブを閉じる](http://d.hatena.ne.jp/hokorobi/20120725/1343214423) で対処は可能）

[peco](https://github.com/peco/peco) はパスを通して実行できるようにしておく。
以下のそれぞれのファイルを PPx の script フォルダへ保存して `*script %0script\selecttabpeco.jp`

PPb をドックに入れるとかやりたかったけど無理っぽい。
PPb での経由はせずにコマンドプロンプトで動かす。
peco の結果を PPx で受け取る方法がわからない（ない？）のでクリップボード経由で取得する。

```javascript:selecttabpeco.js
//!*script
// 開いているタブをpecoで選択して切り替え
// PPx 1.50 x64 + Script Module R14

var adTypeBinary = 1;
var adTypeText = 2;

var Fso = new ActiveXObject('Scripting.FileSystemObject');

var file = getListFile();
PPx.Execute('%Obsq *launch peco < ' + file + ' | clip');

var id_path = PPx.Clipboard;
PPx.Execute('*selectppx ' + id_path.substr(0, 3));
Fso.DeleteFile(file);

function getListFile() {
    var typeCurrentWindow = -2;
    var posFirst = 0;
    var posSkipBOM = 3;
    var adWriteLine = 1; // 行区切り文字（改行）も入力
    var adSaveCreateOverWrite = 2;

    var ado = new ActiveXObject('ADODB.Stream');

    // UTF-8 でタブ一覧を取得
    var tabs = PPx.Pane.Tab;
    if (tabs.Count < 3) PPx.Quit(-1);

    ado.Type = adTypeText;
    ado.Charset = 'UTF-8';
    ado.Open();

    var tab;
    for (var i = 0; i < tabs.Count; i++) {
        tab = tabs.Item(i);
        if (tab.Type != typeCurrentWindow) continue;
        // 表示している Liftfile の名前も表示したかったので .Name を追加
        ado.writeText(tab.IDName + ' ' + tab.Name + ' ' + tab.Extract('%D'), adWriteLine);
    }
    ado.Position = posFirst; // バイナリモードにするため先頭へ移動
    ado.Type = adTypeBinary;
    ado.Position = posSkipBOM; // BOM を飛ばす
    var list = ado.Read();
    ado.Close();

    // ファイルへ出力
    ado.Open();
    ado.Write(list);
    var file = Fso.BuildPath(PPx.Extract("%'temp'"), Fso.GetTempName());
    ado.SaveToFile(file, adSaveCreateOverWrite);
    ado.Close();
    return file;
}
```

## peco の設定

日本語のフォルダも頻繁に扱うので、標準の peco だと辛い。
migemogrep を使うように設定して日本語のフォルダも選択できるようにする。
バイナリは [Releases · peco/migemogrep](https://github.com/peco/migemogrep/releases) から取得してパスの通ったフォルダにおく。

```~/.config/peco``` へ以下の ```config.json``` を置く。
Alt-t で Migemo へ切り替え。RotateFilter の四番目なので四回実行するように設定。
（最初、BufferThreshold を書いていなかったので、絞り込みがやたら遅くて使い物にならないなぁと思っていた。）

```json:config.json
{
	"Action": {
		"my.SelectFilterMigemo": [
			"peco.RotateFilter",
			"peco.RotateFilter",
			"peco.RotateFilter",
			"peco.RotateFilter"
		]
	},
	"Keymap": {
		"M-t": "my.SelectFilterMigemo"
	},
	"CustomFilter": {
		"Migemo": {
			"Cmd": "migemogrep",
			"BufferThreshold": 10000
		}
	}
}
```
R.swiftを使ってStoryboard名や画像名のTypoを0にする

最近使っているR.swiftという便利ライブラリについてまとめてみます。
このライブラリですが、Storyboard名や画像名をプロパティーとして取得できるようになるのでTypoする事がなくなります!
おまけにコードも短くなるので非常にオススメです。

[R.swift - Github](https://github.com/mac-cain13/R.swift)

## R.swiftでできること
### Storyboard
下のようにプロパティーを使って取得できるようになります。
`MyViewController`へのキャストも自動で行ってくれます。

```swift
let viewController = UIStoryboard(name: "Main", bundle: nil).instantiateInitialViewController() as? MyViewController
// ↓ のように書ける
let viewController = R.storyboard.main.initialViewController
```

### Nib
Nibも同様です。

```swift
let view = UINib(nibName: "MyNib", bundle: nil).instantiateWithOwner(nil, options: nil).first as? MyView
// ↓ のように書ける
let view = R.nib.myNib.firstView(nil, options: nil)
```

### Reuse Identifier
TableViewCellのReuseIdentifierもプロパティー化してくれます。
`MyCell`へのキャストも勝手に行ってくれます。

```swift
let cell = UITableView().dequeueReusableCellWithIdentifier("CellIdentifier") as? MyCell
// ↓ のように書ける
let cell = tableView.dequeueReusableCellWithIdentifier(R.reuseIdentifier.cellIdentifier)
```

### UIImage
UIImageも同様です。
`Assets.xcassets`に入っている画像もそれ以外の画像も全てプロパティー化します。

```swift
let image = UIImage(named: "MyImage")
// ↓ のように書ける
let image = R.image.myImage
```

### Segue
```swift
performSegueWithIdentifier("OpenSettings")
// ↓ のように書ける
performSegueWithIdentifier(R.segue.viewController.openSettings.identifier)
```

Segueは`prepareForSegue`で参照する機会が多いのでありがたいです。

```swift
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == R.segue.viewController.openSettings.identifier {
    }
}
```

### その他
試していないのですが、カスタムフォントやリソースファイル(JSONファイル等)もプロパティーとして取得できるようです。

## Rという構造体
Rという構造体はR.generated.swiftファイルに入っていて、中身は下のようになっています。

![スクリーンショット 2015-10-10 22.20.12.png](https://qiita-image-store.s3.amazonaws.com/0/61598/a5078e8c-acec-3701-62bb-7485d5cf3dde.png)

R.generated.swiftは下記のようなRun Scriptを使ってコンパイル時に生成しています。

![スクリーンショット 2015-10-10 22.19.49.png](https://qiita-image-store.s3.amazonaws.com/0/61598/b8833935-25e4-09c4-4599-74c4deb8f5dc.png)

## インストール方法
1. CocoaPodsでR.swiftを追加
2. Run Scriptを追加して"\$PODS_ROOT/R.swift/rswift" "$SRCROOT"と記述
    * R.swift4以降を使っている場合は、「"\$PODS_ROOT/R.swift/rswift" generate "$SRCROOT" 」のようにgenerateコマンドを追加して下さい。
3. コンパイルするとR.generated.swiftというファイルが生成されるので、それをプロジェクトに追加

こちらのビデオが非常に分かりやすいので宜しければご参考にして下さい。

[R.swift demo](https://vimeo.com/122888912)
オムロンの透明リレー G2R-1


店頭で見て、か、かわいい…。ということで購入。

![20151010-DSC04497.jpg](https://qiita-image-store.s3.amazonaws.com/0/5330/ccae01ad-fc97-baca-55df-b803055fd2d8.jpeg "20151010-DSC04497.jpg")


リレーがどういう挙動をするか、[Make: Electronics ―作ってわかる電気と電子回路の基礎 ](http://www.amazon.co.jp/Make-Electronics-%E2%80%95%E4%BD%9C%E3%81%A3%E3%81%A6%E3%82%8F%E3%81%8B%E3%82%8B%E9%9B%BB%E6%B0%97%E3%81%A8%E9%9B%BB%E5%AD%90%E5%9B%9E%E8%B7%AF%E3%81%AE%E5%9F%BA%E7%A4%8E-PROJECTS/dp/4873114772) でもリレーをカッターで削って中身を取り出してみてみる、ということをしてるけど、これならカッターで取り出さなくても見れる！！！

- https://youtu.be/4faJ8TN9QpY

リレーの「カチッ」という音が良い。またどれぐらいまで高速に操作できるのか試してみたら、10msぐらいなら高速にスイッチできるみたい、通常の使い方じゃ使わないだろうけど…。また 5V のコイル電圧もどれぐらいの電圧(PWM)で動くんだろうと試してみたけど、Arduino UNO の analogWrite で 230 までは動いたので、1割ぐらい低くとも動くっぽい。

↑の動画デモコード。easing 関数は [AHEasing](https://github.com/warrenm/AHEasing) より。何かと便利な easing 関数だけど、素のままだと使い勝手悪いので、もうちょい Arduino から手軽に使いたいな(あとで書くかも)。

```ino

#include "easing.h" // AHEasing
#define OUT_PIN 3

void setup() {
  pinMode(OUT_PIN, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  Serial.println("loop");
  float s = 1000, e = 100, p;
  unsigned long t = millis(), duration = 10000;
  unsigned long dt;
  while((dt = millis() - t) < duration) {
    p = QuinticEaseOut((float)(dt) / duration);
    toggle((uint16_t)((p*(e-s))+s));
  }
  delay(3000);
}

void toggle(uint16_t wait) {
  uint16_t wait_half = wait / 2;
  Serial.println(wait);
  digitalWrite(OUT_PIN, HIGH);
  delay(wait_half);
  digitalWrite(OUT_PIN, LOW);
  delay(wait_half);
}
```
vagrantを使ったLAMP環境をローカルに作る手順② 〜インストールの準備を整えよう〜


[vagrantを使ったLAMP環境をローカルに作る手順①](http://qiita.com/Dicrotect/items/e3aa6fdd074e3aeeffbc)
に引き続きvagrantでLAMP環境をつくるために必要な
__*Apach mysql php*__のインストールをターミナルで進めていきましょう。

なお以降の作業は権限の高いrootにユーザを変更しなくてはなりません。

```ターミナル
su
password vagrant  ←passwordを聞かれるのでvagrantと入力します。（ターミナル上では表示されませんが入力はできています！）
```
この手順でrootにユーザを変更することを忘れないようにしましょう。


```ターミナル
[root@vagrant-centos65 vagrant]#
#これは入力するコードではありません。
```


ターミナルにこのように表示されれば正しくrootユーザへの切り替えができています！

#OSのアップデートと開発に必要なファイルのインストール
#OSのアップデート
まずは最新版を正しくインストールするためにcentosをアップデートします。

````ターミナル
 yum update -y  #OSのパッケージを全て最新にアップデート
````
アップデートするファイルが173個もありました！
とっても時間がかかるので通信速度の速い場所でのインストールを
推奨します。
![アップデート完了.png](https://qiita-image-store.s3.amazonaws.com/0/80553/643abd3c-4158-638c-ed44-3c576d5d9fd4.png "アップデート完了.png")


__Complete!がでると気持ちがいいですね！__




##ファイルのインストール
次に開発に必要なファイルをインストールしていきます。


````ターミナル
 yum groupinstall -y "Development Tools" --skip-broken 
 ↑　開発基本ツール群をインストール


 yum install -y openssl-devel readline-devel zlib-devel curl-devel ImageMagick ImageMagick-devel glib2-devel gd-devel libxml2-devel libxslt-devel pcre-devel perl-devel perl-ExtUtils-Embed w3m wget vim bind-utils    
 
 ↑ 開発で多くの場合必要とされるパッケージ群をインストール(ある程度の一般性は担保できているとは思います)
````

こちらもとっても時間がかかります。
通信速度でエラーが出る場合がありますが一度停止してしまった場合は
もう一度同じコマンドを打ちましょう！
![アップデート完了.png](https://qiita-image-store.s3.amazonaws.com/0/80553/c655027b-6cb2-a95d-757b-8987b4b7c4de.png "アップデート完了.png")
これでいいですね！

#各種設定の変更
##日本語対応の準備

こちらはvimでの編集が必要です。
まずはこのコマンドを入力しましょう。

```ターミナル
vim /etc/sysconfig/i18n

```
するとvimエディタがひらき、
以下の文字が表示されてるはずです。

![i18編集前.png](https://qiita-image-store.s3.amazonaws.com/0/80553/7d5831e1-513c-24e1-3ffc-75ab363d4071.png "i18編集前.png")


このままでは日本語を入力した際に不具合を起こす可能性があります。
そこでvimエディタを使って以下の手順で編集します。

```vim
キーボードのiを押してインサートモードへ


  LANG="ja_JP.UTF-8"

に変更
 
＊vimでiを使ってインサートモードに入ると
 カーソルの手前の文字を認識するので入力に注意。
 


```
![i18n編集後.png](https://qiita-image-store.s3.amazonaws.com/0/80553/5c2639b3-7662-04dc-61fc-7eeedcc4a3d2.png "i18n編集後.png")

このように変更できたら
escキーでノーマルモードに戻り、
`:wq`

で保存しましょう！



##ファイヤーウォールの無効化
次に開発用にセットアップするために必要な処理を行います。

```ターミナル
 service iptables stop     # ファイアウォールを停止
 
 chkconfig iptables off        # ファイアウォールの自動起動を停止
```

ターミナルは何も反応してくれませんがこれで問題ないはずです。




ここまで完了したらいよいよ
__*Apach mysql php*__のダウンロードに移ります。
しかし、安全に次のダウンロードをするために
いったんvagrantを再起動しましょう。

```ターミナル
exit　　　　　　　　←root権限からvagrant権限に変更
exit　　　　　　　　←vagrantから離脱
vagrant reload   ←vagrantを再起動
```

ではダウンロードは次の記事にまとめておきます！
[vagrantを使ったLAMP環境をローカルに作る手順③](http://qiita.com/Dicrotect/items/162ff83fec0c868d7030)



なお参考記事は
[【CentOS, LAMP】仮想マシンを立てたら最初にやっておきたい設定]
(http://nexseed.net/tech-blog/basic-settings-after-virtualmachine-installation/)
[【CentOS, PHP】CentOSへのPHP5.5, MySQL5.6環境の構築](http://nexseed.net/tech-blog/create-lamp-environment-with-latest-php/)
です。
Swiftを始めてみる以前

何をどのように作るか関係なく、とりあえず以下の、hello world以前の準備をやっておくと良いかも。

- AppleIDをまだもってなければ作成。
- App StoreからXcodeをインストールする。（かなり時間かかる）
- Xcodeを起動
- Preference->AccountでAppleIDを使ってログインしておく。
- AppleIDで、https://developer.apple.com/ にログインしてResourceとかドキュメントなどいろいろ見られることを確認する。
- iBookを開く。
- IBook Storeで”swift"と検索すると、Apple Inc. 出版しているswiftの本がいくつかあるのでインストールする。これらが唯一の公式言語ドキュメントです。
- ドキュメントとか、言語ドキュメントとかサンプルアプリとかを見てみる。
- 行けそうかどうか、考えてみる。

この辺りをまずやってみたらどうでしょうかね？
[RaspberryPi]printf()が使えない？？

RaspberryPi(に限らずかもしれませんが)にてprintf()を使うときは、改行が入るまではコンソールに文字が出力されません。
[Raspberry Pi: printf() doesn't work with wiringPi](http://stackoverflow.com/questions/30711701/raspberry-pi-printf-doesnt-work-with-wiringpi)

日本語キーボードでは￥／バックスラッシュが入れられないので、横着して\nを省略していると出力されない、という間抜けな話です。
これにはまってしまい、Stackoverflowで質問した次第です。恥ずかしっ

stdoutが標準でline-bufferedであることに起因しており、
改行のほか、fflush()を使うことでも出力できるそうです。

> 
stdout by default is line-buffered, meaning it tries to put off writing stdout by default is line-buffered, meaning it tries to put off writing data to the underlying file until a newline. But since you never print a newline, stdout will just buffer your text until it runs out of space.
You can fix this by either adding a newline in the format string (i.e. "%d\n"), or calling fflush on stdout after printing.

質問の投稿からしばらく経ちますが、ふと思い出したので記事にしてみました。
Node学園 18時限目 Node.js v4.0の話 に行ってきた


今回はいつも通り渋谷ヒカリエの:DeNAさんでの開催です。

# Node学園祭2015

http://nodefest.jp/2015/

スピーカーが確定しました！
申し込みは10/13から開始予定

# 「Node.js v4.0 + io.js 総復習」 by @yosuke_furukawa

https://speakerdeck.com/yosuke_furukawa/node-dot-js-v4-falsehua-number-tng18

→ 何でv4.0に飛んだかというと、io.jsの1.0と被って混乱を防ぐためとのこと。

## Javascript言語関連
 
- ES2015(ES6)の対応強化
classやarrow function、template string literal などにより、すっきり書けるようになった。

→Babeらなくても結構行けそう！

- でも、これらはまだ未対応です

default params
rest/spread
tail call opts
proxy
reflect
modules

### Strong Script（まだExperimentalだけど）

- user strictの更に強力版。"use strong"と書く
- --strong_mode オプション付きでnodeを呼ぶとStrong modeで起動する
- ES6にも対応しているので、let, constではなくvarを使うとエラーにしてくれる

→ EsLintとかもあるけど、処理系がサポートしてくれるのは良いですね！

## EsIntl

- ECMAScript 国際化API（ECMA-402）が使える
- nodeのbuildオプション(--with-intl=full-icu-download-all)を指定する必要がある
- 言語に依存した文字列の比較（カタカナとひらがなを同一視して比較など）、数値フォーマット（金額の頭に¥マークを出したり）、日付フォーマット（和暦にフォーマットしたり）が使える  

→実は主要なブラウザでは以前から使えたようですが、知りませんでした。でも平成24/12/20とか出力したり少し微妙かも。

## API

- BufferがリファクタリングされてindexOfやfor/ofが使えるようになった
- Buffer#indexOfはパフォーマンス面で嬉しい機能
 
## Streadm

- Simplle Stream Constructor。through2の書き方でシンプルに書ける

## REPL

- historyをセーブしてくれるようになったのが地味にうれしい

## OS
- os.homeDir()でホームディレクトリが取れるようになった  

→えっつ！今までなかったの！

## パフォーマンス
- requireが50x高速化
- httpが8%高速化  
  http-parserがアップグレード

## Deprecatedになったもの

- domains
- fs.exist/existsync
- util.isXXX

# 「Building Hosted Fields」 by Jeff Carpenter

https://github.com/jeffcarp/building-hosted-fields/

- PCI DSS というセキュリティ基準がある
- iFlameで組み込んだカードの入力フォームを自分のサイトのスタイルを適用する話
- stylesheet.insertRule
- braintree/card-validator　クレジットカード番号のValidator
- braintree/framebus　iFrame間のメッセージング
- 4人でペアプロ100%やってる。数日でパートナーを入れ替えながら

→ 英語勉強しないといかんな

# 「NeoAsync」 by suguru

http://suguru03.github.io/slide/20151008_neo-async/#1
https://github.com/suguru03/neo-async

- Asyncと互換性のあるものを自分で作った話

→Async自体使ったことないけど、こんど使ってみたい。GitHubにStarつけました！


# 「チーム開発においてNode未経験者の学習コストを下げるための工夫」 by qsona

https://speakerdeck.com/qsona/node-dot-js-number-tng18-lt

-  事例を俯瞰して得た学習コストダウンのための4つの極意

1. lodashを利用する
1. (Neo)asyncを使う
1. コーディングスタイル（広義）を統一する
1. 書き方オタクを養成する
macOSへのVagrant導入方法

# [概要]
macOSへのVagrant導入方法をまとめます。

## Vagrantとは
Vagrantとは、`Vagrantfile `を言われるファイルに構成情報を記述することによって、仮想環境の構築から設定まで自動化するツール

🔽 自分が書いたVagrantのメモ
[Vagrantまとめ](http://qiita.com/sabakan7/items/0a8bfb18be82c251aebc)

# [事前準備]
## Vagrantのインストーラ入手
* Vagrant公式ページからMAC OS用のインストーラを入手します
 - [Vagrantのインストーラ](https://www.vagrantup.com/downloads.html)

## VirtualBoxのインストーラ入手
* VirtualBox公式ページからOS X用のインストーラをを入手します
 - [VirtualBoxのインストーラ](https://www.virtualbox.org/wiki/Downloads)
 
# [作業内容]
## Vagrantのインストール
1. 「vagrant_1.8.x.dmg」をダブルクリック
2. 「Vagrant.pkg」をダブルクリック
3. 「続ける」
4. 「インストール」
5. パスワードが求められるので、入力し「ソフトウェアをインストール」
6. 「閉じる」

__※基本的に指示通りに進めば問題ないです。__

### VirtualBoxのインストール
1. 「VirtualBox-5.x.xx-xxxxxx-OSX」をダブルクリック
2. 「VirtualBox.pkg」をダブルクリック
3. 「続ける」
4. 「続ける」
5. 「インストール」
6. パスワードが求められるので、入力し「ソフトウェアをインストール」
7. 「閉じる」

__※基本的に指示通りに進めば問題ないです。__

## plugin追加
vagrant-vbguestというpluginを追加します。
これは、仮装マシンを起動する時に、`VirtualBox Guest Additions`と言われるVirtual Boxを便利にしてくれるツールを自動的にインストールしてくれます。

```bash
$ vagrant plugin install vagrant-vbguest
Installing the 'vagrant-vbguest' plugin. This can take a few minutes...
Installed the plugin 'vagrant-vbguest (0.13.0)'!
```

## VagrantのBox追加
```bash
### 作業ディレクトリを作成
$ mkdir centos7

### 作業ディレクトリに移動
$ cd centos7

### Vagrantfile生成
$ vagrant init ghfdjk/centos7

### 仮想マシン起動
$ vagrant up

### 仮想マシンにssh接続
$ vagrant ssh
```
__自分が作ったboxなので、変なところがあったら、教えていただけると助かります！m(_ _)m__

## Vagrantの簡単な操作方法
🔽 詳しくは下記
[Vagrantコマンド](http://qiita.com/sabakan7/items/69c2378600bf8adaac5c)

```bash
### 仮想マシン起動
$ vagrant up

# 仮想マシンシャットダウン
$ vagrant halt

### 仮想マシン再起動
$ vagrant reload

### 仮想マシンを元に戻す
$ vagrant destroy
# 仮装マシンをまっさらにして、一番最初に導入した状態に戻す
```

## [事後確認・作業]
特に無し

## 最後に

__もし間違いや、おかしな所があれば指摘していただけると助かります！__
__もしくは、「編集リクエスト」とかも大歓迎です！__
ApacheでCGI(perl）を有効にする


## ApacheのPerlが動かん。

vagrantで仮想OS(CentOS6.6)を立ち上げ、Webサーバーを立てたが、perlのCGIが動かなかったので、以下に備忘録を。

### Apacheのコンフィグ設定

まず
> httpd.confを開いてください。
httpd.confの最終行に
AddHandler cgi-script .cgi .pl
と書き加えます。

自分は.cgiが動けばOKだったので

```httpd.conf
AddHandler cgi-script .cgi
```

のみ設定。


次に
>使用するディレクトリの指定
更に必要なディレクトリ内のオプションにExecCGIを書き込みます。
例えばすべてのディレクトリでCGIを許可したい場合はドキュメントルート
&lt;Directory /&gt;
Options FollowSymLinks
AllowOverride None
&lt;/Directory&gt;
にExecCGIを書き加えます。
&lt;Directory /&gt;
Options FollowSymLinks ExecCGI
AllowOverride None
&lt;/Directory&gt;

自分の環境では

```httpd.conf
Options Indexes FollowSymLinks
```

があったので、

```httpd.conf
Options Indexes FollowSymLinks ExecCGI
```

としました。


>最後にApacheの再起動を行い、httpd.confを再読込させます。

これは仰せの通りに再起動させました。

## 引用元
ここより引用しました。
[ApacheにPerlを設定しよう](http://mizushima.ne.jp/Windows/HTTP/Apache/Apache-perl.php "ApacheにPerlを設定しよう")
Visual Studioでメンバ変数の色を変える

#はじめに
数回にわたってVisual Studioのカスタマイズについての記事を書きたいと思います。
きっかけは職場でVisual Studioのカスタマイズをされている方が少なく、需要があるのではと考えたからです。
また、調べてみたところ、Visual Studioのカスタマイズをまとめているサイトがありませんでした。
自分が行っているカスタマイズを広める事で作業の効率化につながればと考えています。

#カスタマイズ前とカスタマイズ後
これが今回見た目のカスタマイズを行う元になるソースコードです。
![q01_01.png](https://qiita-image-store.s3.amazonaws.com/0/59088/562e79a0-fb87-b631-070d-6314dfde5baf.png)
これがカスタマイズ後です
![q01_06.png](https://qiita-image-store.s3.amazonaws.com/0/59088/3d7ce11a-d065-4acc-8869-db7635f3edb6.png)
メンバ変数m_idの色が変わっています。

プログラム自体は
[一週間で身につくC++言語の基本 第5日目：静的メンバ](http://cpp-lang.sevendays-study.com/day5.html)
を参考にさせていただきました。

#方法
1. ツール→オプションをクリック
![q01_03.png](https://qiita-image-store.s3.amazonaws.com/0/59088/323c817d-e4f8-fa22-c9e3-0e2f99e3a809.png)

2. 環境→フォントおよび色をクリック
![q01_04.png](https://qiita-image-store.s3.amazonaws.com/0/59088/28a69b0a-6f38-bcd5-f9d9-4aac4bd09f61.png)

3. C++ フィールドを選択し、前景色を変更する
![q01_05.png](https://qiita-image-store.s3.amazonaws.com/0/59088/6416b413-dcfd-8364-0a57-82f7f3573bca.png)

#追伸
他にも色々と色を変えることができる項目がありますので、お好みで変更すると良いと思います。
今回はわかりやすくするためフィールドを赤に変更しましたが、
普段はC++フィールドを青、キーワードを太字にカスタマイズして使用しています。
![q01_07.png](https://qiita-image-store.s3.amazonaws.com/0/59088/ec235646-7c6d-2b85-c272-146c36ac7950.png)
Allocate unassigned elasticsearch shards

Unassigned shards can be allocated manually, ElasticSearch provide `reroute` API.

```json

curl -X POST 'localhost:9200/_cluster/reroute' -d '
{
  "commands" : [
        {  
          "allocate" : {
              "index" : "transaction",
              "shard" : 1,
              "node" : "node1",
              "allow_primary": true
          }
        }
    ]
}
'
```

If **`shard 1`** is a primary shard, must use the `allow_primary` options.
ssh-keygenでファイル名を指定して鍵を生成する

```
$ ssh-keygen -t rsa -f file_name
```

ファイル名指定無しで生成した物と別途に生成したい時は`-f file_name`で生成される鍵ファイル名を指定できる。カレントディレクトリに生成されるので`cd ~/.ssh/`しておくこと。

## 例

```
$ ssh-keygen -t rsa -f id_rsa_hoge
$ ls
config  id_rsa  id_rsa.pub  id_rsa_hoge  id_rsa_hoge.pub  known_hosts
```