OmniAICreator/Qiita-1.07M huggingface dataset:
HttpClient 4.x : GET


```java
package hello.httpclient4x;

import java.net.URI;
import java.util.ArrayList;

import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

public class HelloGetMain {

	public static void main(String[] args) throws Exception {

		CloseableHttpClient httpclient = HttpClients.createDefault();

		try {

			String url = "http://localhost:8080/HelloWeb/index.jsp";
			String method = "";

			ArrayList<NameValuePair> nvps = new ArrayList<NameValuePair>();
			nvps.add(new BasicNameValuePair("msg", "ハロー"));

			URI serviceUri = new URIBuilder(url + method) //
					.setParameters(nvps)//
					.build();

			System.err.println(serviceUri.toString());

			HttpGet httpget = new HttpGet(serviceUri);

			System.out.println("Executing request " + httpget.getRequestLine());

			CloseableHttpResponse response = httpclient.execute(httpget);

			// response.getEntity().getContent() -> InputStream

			try {
				System.err.println(response.getStatusLine());
				// EntityUtils.consume(response.getEntity());

				System.err.println(response.getStatusLine().getStatusCode());

				Header[] headers = response.getAllHeaders();
				for (Header header : headers) {
					System.err.println(header.getName() + ": "
							+ header.getValue());
				}

				HttpEntity httpEntity = response.getEntity();
				System.err.println(EntityUtils.toString(httpEntity));

			} finally {
				response.close();
			}
		} finally {
			httpclient.close();
		}
	}
}

```
HttpClient 4.x : POST


```java
package hello.httpclient4x;

import java.util.ArrayList;
import java.util.List;

import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

public class HelloPostMain {

	public static void main(String[] args) throws Exception {

		CloseableHttpClient httpclient = HttpClients.createDefault();
		try {

			List<NameValuePair> params = new ArrayList<NameValuePair>();

			params.add(new BasicNameValuePair("key1", "value1"));

			HttpPost httpPost = new HttpPost(
					"http://localhost:8080/HelloWeb/index.jsp");
			httpPost.setEntity(new UrlEncodedFormEntity(params));

			System.err
					.println("Executing request " + httpPost.getRequestLine());

			CloseableHttpResponse response = httpclient.execute(httpPost);
			try {
				System.err.println(response.getStatusLine());
				// EntityUtils.consume(response.getEntity());

				System.err.println(response.getStatusLine().getStatusCode());

				Header[] headers = response.getAllHeaders();
				for (Header header : headers) {
					System.err.println(header.getName() + ": "
							+ header.getValue());
				}

				HttpEntity httpEntity = response.getEntity();
				System.err.println(EntityUtils.toString(httpEntity));

			} finally {
				response.close();
			}
		} finally {
			httpclient.close();
		}
	}

}

```
Macでプログラミング用のフォントRictyを設置した話


## Ricty（リクティ）とは

* Linux環境での研究・開発に適したフリーなプログラミング用フォント
* フォントサイズが小さくてもアルファベットが区別しやすい。
* 詳細は[ここ](http://www.rs.tus.ac.jp/yyusa/ricty.html)を参考
* 去年作成した記事だが、macOS Sierraで試したところ問題なし。

## 設置順番

* fontforge
* ricty
* patch font for powerline

## fontforge

* XQuartzをインストールする。

```zsh
% brew cask install xquartz
```

* fontforgeをインストールする。

```zsh
% brew install --use-gcc fontforge
```

## Ricty

* Rictyをインストールする。
インストールが終わったら、生成されたファイルとフォントの設置方法が表示される。

```zsh
% brew tap sanemat/font
% brew install ricty

...省略...

***************************************************
Generated files:
  /usr/local/Cellar/ricty/4.0.1/share/fonts/Ricty-Bold.ttf
  /usr/local/Cellar/ricty/4.0.1/share/fonts/Ricty-Regular.ttf
***************************************************
To install Ricty:
  $ cp -f /usr/local/Cellar/ricty/4.0.1/share/fonts/Ricty*.ttf ~/Library/Fonts/
  $ fc-cache -vf
***************************************************
```

* 生成されたフォントをコピーする。

```zsh
% cp -f /usr/local/Cellar/ricty/4.0.1/share/fonts/Ricty*.ttf ~/Library/Fonts/
% fc-cache -vf
/usr/share/fonts: skipping, no such directory
/System/Library/Fonts: caching, new cache contents: 158 fonts, 0 dirs
/Library/Fonts: caching, new cache contents: 422 fonts, 0 dirs
/Users/red/Library/Fonts: caching, new cache contents: 4 fonts, 0 dirs
/Users/red/.local/share/fonts: skipping, no such directory
/Users/red/.fonts: skipping, no such directory
/usr/local/var/cache/fontconfig: cleaning cache directory
/Users/red/.cache/fontconfig: not cleaning non-existent cache directory
/Users/red/.fontconfig: not cleaning non-existent cache directory
fc-cache: succeeded
```

* iterm2でフォントを切り替える。
Preferences > Profiles > Text > Change Fontの順でクリックして、Rictyを選択する。
これでRictyフォントを使えるが、lightlineとかpowerlineのようなvim pluginを使いたい場合はもう一つの手順が必要。

## patch font for powerline

* lightlineを使っているが、powerlineのようにシステムのフォントに依存している。
* fontpacherを使うためvim-powerlineをダウンロードする。
* 見栄えをよくするために、Rictyフォントをpowerline用のフォントにパッチする。
* 生成されたpowerline用のフォントをコピーする。
* iterm2でフォントを切り替える。

```zsh
% git clone https://github.com/Lokaltog/vim-powerline.git
% fontforge -script vim-powerline/fontpatcher/fontpatcher  ~/Library/Fonts/Ricty-Regular.ttf
% cp Ricty-Regular-Powerline.ttf  ~/Library/Fonts/
```

## iterm2での切り替え手順（補足）

* ProfileからTextタップを選択する。
![スクリーンショット 2016-10-04 10.02.59.png](https://qiita-image-store.s3.amazonaws.com/0/93752/5b39380f-8c21-c93f-8876-b4a1fd0bf8b9.png "スクリーンショット 2016-10-04 10.02.59.png")

* フォント選択画面
![スクリーンショット 2016-10-04 10.03.22.png](https://qiita-image-store.s3.amazonaws.com/0/93752/6aa34ad6-70e7-0564-0399-7d0792b25470.png "スクリーンショット 2016-10-04 10.03.22.png")

* Ricty for Powerlineを選択
![スクリーンショット 2016-10-04 10.03.56.png](https://qiita-image-store.s3.amazonaws.com/0/93752/f3e51387-2907-b2a5-4a91-83cde8f15a9c.png "スクリーンショット 2016-10-04 10.03.56.png")

## 参考

* https://github.com/Lokaltog/zsh-powerline/tree/develop/fontpatcher
* http://morizyun.github.io/blog/ricty-font-homebrew-mac/
* http://qiita.com/syui/items/10a9086de309cef5e185#1-5
* http://jsapachehtml.hatenablog.com/entry/2014/01/08/230046
Objective-Cプロジェクトにswift対応して出たコンパイルエラー Duplicate interface definition for class の解決方法


CocoaPodsで管理している古いObjective-Cに初めてSwiftを入れる時に以下のような謎のエラーが大量に出ました。

```
Duplicate interface definition for class 'PMKPromise'
・・・
Redefinition of 'PMKCatchPolicy'
```

PromiseKitを入れているのですが、重複するようなコードはありません。

色々試してみた結果、importに問題がありました。

```diff
- #import "PromiseKit.h"
+ #import <PromiseKit/PromiseKit.h>
```

もちろんPromiseKit以外のフレームワークでも同様にimportしないとコンパイルエラーが出ます。

これに気づくのに時間がかかったので、誰かの役に立てれば。
Quiverが思ってたよりも使いやすかった

# Quiverとは？
一言で言うとKobitoやEverNoteのようなメモアプリです．
Ulyssesライクな見た目で他よりもリッチに使えるので現在最も優秀なメモアプリだと思います．
有料ですが[トライアル版](http://happenapps.com/#quiver)も出ているので，まずはこちらを試してみることをオススメします．

# 何が出来るの？
Quiverでは，Text，Code，Markdown，LaTeX，Diagramの5種類をCellという枠組みを用意することによって記述できるようにしています．
詳しくは日本語ドキュメントも作成された[こちらの人のサイト](http://namaraii.com/archives/39626)を見ると良いです．

# メモアプリ値段比較
|アプリ名|値段(円)||無料使用|
|:--|:-:|:-:|:-:|
|[DayOne](http://dayoneapp.com/)|4,800||無|
|[EverNote](https://evernote.com/intl/jp/)|3,100/年|5,200/年|有
|[Kobito](http://kobito.qiita.com/)|480/月|4800/年|有|
|[Quiver](http://happenapps.com/#quiver)|1,200||有(右下にTrial表示)|
|[Ulysses](https://www.ulyssesapp.com/)|5,400||10時間以降は閲覧のみ|
一回ぽっきりの1200円は安いと思います．

# メモアプリ対応OS比較
|アプリ名|Windows|MacOS|Android|iOS|
|:--|:-:|:-:|:-:|:-:|
|[DayOne](http://dayoneapp.com/)|X|〇|X|〇|
|[EverNote](https://evernote.com/intl/jp/)|〇|〇|〇|〇|
|[Kobito](http://kobito.qiita.com/)|〇|〇|X|X|
|[Quiver](http://happenapps.com/#quiver)|X|〇|X|X|
|[Ulysses](https://www.ulyssesapp.com/)|X|〇|X|〇|
Quiverは現状MacOSにしか対応していないのでWindowsの人とかは使えないですね．

# 気に入ったところ
- セルという枠組みがすごい使いやすい(`shift-enter`で新規セルに移行，`shift-cmd-enter`でその場に新規セル追加)
- EverNoteからの移住が楽
- テーマを自由に変更可能
- codecellのテーマも変更可([サポートされているテーマ](https://github.com/HappenApps/Quiver/wiki/Code-Cell-Themes))
- Code，Markdown，LaTeXCellでのキーバインドをAce，Vim，emacsの中から選択できる
- 起動が速い
- トラックパッドでサイドバーの表示/非表示を変更できる(`cmd-1`/`cmd-2`/`cmd-3`でも変更可能)
- Viewも`cmd-4`/`cmd-5`/`cmd-6`や`shift-cmd-p`で変更可能
- cssでプレビューやexport時のスタイルを変更できる

# ~~バグ？~~【2017/01/19 修正】
いつの間にか直ってました
~~僕の環境ではplanetext以外で日本語を打つと徐々にカーソルがズレていきます．これが困る．解決法知ってる方よろしければ教えてください．~~
![hoge.gif](https://qiita-image-store.s3.amazonaws.com/0/107221/ffa06d69-1cbc-648f-3d83-e546449153b8.gif)

# まとめ
現状ではQuiverの日本語記事が少ないため，情報収集は大変ですが非常に使いやすい優秀なメモアプリです．
試しに一度使ってみてはいかがでしょうか？
そして記事書いて情報増やして下さい．．．．
認証が必要なHTTPプロキシ環境下でpipコマンドを使う


主に、社内で Python を使う方向けの記事になります。

認証が必要な HTTP プロキシ環境下で pip コマンドを実行するときは、**「--proxy」**オプションを使い、ユーザー名とパスワードを以下の例ように付与する。

コマンド例：

```shell-session
$ pip install --proxy=http://username:password@domain.com:port numpy
```

認証情報（ユーザー名・パスワード）に**「@」**が含まれる場合は、認証情報を**「”」**で囲んであげるとうまくいく。

コマンド例：

```shell-session
$ pip install --proxy=http://"user@name":password@domain.com:port numpy
```

これで HTTP プロキシ環境下でも、ライブラリのインストールやアップデートが可能になります。


以上です。ご指摘等あればご連絡ください。
サーバ証明書



有効期限の長い証明書を作ってみた

```shell-session
openssl genrsa -out private.key -aes128 2048
openssl rsa -in private.key -out server.key
openssl req -new -sha256 -key private.key -out server.csr
openssl x509 -in server.csr -days 3650 -req -signkey server.key -sha256 -out server.crt
```
XCode8 で Swift2.3 対応、ついでに Pod から Carthage

# XCode8 の Swiftバージョンアップ対応、捗ってますか？
Swift2 で書いていたのですが、XCodeのバージョン上げたらビルド通らなくなりまして。
Converter が搭載されていて、2.3 ないし、3 に変換できるのですが、今回は外部ライブラリのエラーを消せず2.3を選択したのですが、その時のメモを残しておきます。

# ついでに外部ライブラリ管理を Pod から Carthage へ
Swift で iOS 開発をはじめると、最初にググって優秀なライブラリを探して、Pod "..." pod update などとするところからはじめると思います。

Pod は設定も簡単で初心者に易しいのですが、毎回ビルド対象になるため、自分では数行しか書いていないプロジェクトでも大量のファイルがビルドされ、毎回のビルド時間がかさんでしまいます。

一方、iOS8 から登場した Carthage。
若干設定が増えますが、最初に一回ビルドして、プロジェクトにリンクするだけなので、毎回のビルド時間を大幅に短縮できるのが魅力的です。Android の jar を拾ってきてリンクする感覚に近いとのことでしたので、移行してみることにしました。

# 今までの資産があるから乗り換えるの面倒？
いいえ。Pod と Carthage 併用できるのでそんなに面倒じゃなかったです。
ビルド時間が長い、Facebook や Realm あたりを Carthage にして、残りのライブラリは Pod のまま、というような構成にすることもできます。

Carthage については以下の記事に大変分かりやすく載っていました。ありがとうございます。
[Carthage導入]
http://qiita.com/kobad/items/dddab651c91b3dee9fbf

#Swift2.3　用のビルド
Swift3 が推奨ですが、外部ライブラリで 3 対応していないものもありますので、2.3　用にビルドしたいケースもあると思います。
Pod / Carthage のポイントをそれぞれ以下に。

``` 
# Podfile : ファイルの末尾に、2.3でビルドする設定
post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings['SWIFT_VERSION'] = '2.3'
    end
  end
end
```

``` 
# Carthage : ビルド時に 2.3 でビルドするように。また、ビルド済みのバイナリが 3用の場合もあるのでそれを使わないように
> TOOLCHAINS=com.apple.dt.toolchain.Swift_2_3 carthage update --no-use-binaries --platform iOS
```

以上です。
ArduinoIDEでUSBが検知されない系ハマリどころは書き込み装置を使って書き込め

再起動ボタンを押すと、赤いLEDが10秒間点滅しますよね、書き込み装置起動中なのかな。
赤いLEDが点滅している間に、スケッチ＞書込装置を使って書き込む をクリックするといける。
IDEでもターミナルでも検知できないのに書き込めるんだぜ。いったいなにがおきてるの。
わすれそうなのでめも
リンク切れを検知したり、リンク間の関係を可視化するツールをつくった

# その名も

![al.png](https://qiita-image-store.s3.amazonaws.com/0/73113/f606b206-95c3-3f9a-f5d8-50c32cfd26cc.png)

**Anomalynks**

Anomaly(異常) + Link(リンク)の造語。
https://github.com/cloudpack/anomalynks

# つくった背景と解決できる課題

PM < この前つくったあのサイトやねんけど、ちょっと部分部分きりとって別のサイトにしたいんよねー
PM < でも１ページ消したら他のページからリンクされてるの切れちゃってつらみあるからどうにかして💢
ぼく < はい

**＞　リンクチェッカーみたいなのつくろう　＜**

PM < あとついでにページ間の関係性みたい
PM < どうせならデザインチームでもできるように可視化してや
ぼく < はい

**＞　可視化しよう　＜**

PM < 管理画面とかでログイン必要だから
ぼく < はい
PM < Seleniumは重いからブラウザの拡張的なのがいい

**＞　ChromeExtensionに　＜**

PM < ドメインまたぐから
ぼく < はい

**＞　LocalStorage つかえない　＜**

PM < ボタン
ぼく < はい

**　＞　なんかいい感じにする　＜　**


というわけで、

* ChromeExtensionで
* リンク切れを検知できて
* ドメインをまたげて
* 関係性が可視化できて
* いい感じ

なリンクチェッカーをつくりました。

# なにができるか
+ リンク切れを検知
+ URL間の関係性

を可視化（タイトルのまんま

# 使い方
1. Extensionを起動
2. 対象のサイトをぽちぽち回遊
3. `OUTPUT` ボタンポチー
4. URL間の関係性、リンク切れがグラフになる

# 実際に使ってみた
お手軽な [コーポレートっぽいサイト](https://cloudpack.jp) があったのでそれを対象にやってみました。

ChromeExtensionを読み込んでサイトにアクセス！

<img width="1439" alt="top.png" src="https://qiita-image-store.s3.amazonaws.com/0/73113/c7a38de8-cbac-81ca-152a-7d648404d5b8.png">

なんか右下にでてますね。押してみましょう

<img width="1433" alt="status.png" src="https://qiita-image-store.s3.amazonaws.com/0/73113/cee0aa65-c62d-33cc-3e4d-2dbceabd2225.png">

今ひらいてるURLとステータスコードが表示されてます。
とりあえず無視してサイトを回遊しましょう。

(回遊中)

適度に回遊したので、これの関係性を見てみます。
右下の `OUTPUT` ボタンをポチー

<img width="1433" alt="output.png" src="https://qiita-image-store.s3.amazonaws.com/0/73113/061389ed-0173-bbee-2a9b-743e5a645d6d.png">

すると

<img width="1436" alt="result.png" src="https://qiita-image-store.s3.amazonaws.com/0/73113/0f7e1023-85f1-91ed-72aa-fd481b6e1fe9.png">

こんなんが出てきます。
この画面では、各ノード(黄緑のやつ)を動かしていい感じにできます。
ちょっと整理するとこんな感じ

<img width="1115" alt="スクリーンショット 2016-10-04 13.22.13.png" src="https://qiita-image-store.s3.amazonaws.com/0/73113/7c2c5571-daf0-d96e-067d-3c493f40d5ef.png">


**＞　わ！わかりやすい〜！！！　＜**


今回は、全て正常なレスポンスなので各ノードが黄緑ですが、300以上のStatusCodeのページのノードは赤くなります。
ノードをポチーすると、StatusCode表示に切り替わるのでお試しください。


# 今後(謝辞)
* 正式なExtension公開したい
* 雑な部分なおしたい
* PRほしい
* Issueあげてほしい

みたいな！
たぶんWeb制作では使えるんちゃうかなって思ってるので、フィードバック・ご意見いただけるとうれしいっす！！

thanks!
ロゴ制作： @kazuki-hirano
コーディング： @bobu_web
githubにpushしたファイルがgithubで開けない


![github.png](https://qiita-image-store.s3.amazonaws.com/0/135794/9c6436c9-41c9-8d2b-d8a1-5402c07c3f03.png)


上記のように`ImageProccessing`ディレクトリが非活性状態となり選択できない。


どうやらディレクトリを`.gitignore`ファイルでgit管理下から除外しているからではないかとのこと


調べてみると`.gitignoreは`ルートにあるらしいので


```shell-session

rm .gitignore

```

```shell-session

git fetch origin master

```

```shell-session

git merge origin/master 

```

```shell-session

git push origin mater

```



で無事開けた



参考↓
https://teratail.com/questions/50201?whotofollow
WordPressプラグイン有効化時にNode.jsでサーバーを起動する

## やりたいこと
- WordPressの情報を使うNode.jsのサーバアプリケーションを動かしたい
    - Socket.IOサーバーを立ててチャットとか
- もろもろの管理を簡略化したいのでWordPressプラグインとして実装
    - プラグインを有効化・無効化したタイミングで、起動・停止とかしたい

## 詰まったところ

### 普通に呼んだだけだと終了を待ってしまう
プラグイン有効化イベントに対して[exec関数](http://php.net/manual/ja/function.exec.php)で単純に `exec('node app.js')` というような処理をフックしただけだと、呼び出したnodeのプロセスが閉じるまでPHPがハングします。
それでも起動するにはするのですが、嫌な感じです。

### 簡単にforkさせてくれない
PHPには子プロセスを走らせるためのforkなる仕組みがあるらしいので使おうとしてみたのですが、想定する動作をさせることができませんでした。
PHPのフォークはちょっと癖が強いようです。

### Windows環境下だとさらにちょっと面倒
開発環境がWindowsなので、Windowsでも動作するようにしようと思ったのですが、バックグラウンドプロセスとして走らせるためのコマンドがよくわからない。
Linuxだと`&`で放り投げておけばいいんですが。

## 実装
```php:wp-chat.php
<?php
/*
 * Plugin Name: WPChat
 * Description: WordPressのユーザー情報を利用してチャットができるようにするプラグインです。
 * Version: 0.1;
 * Author: Huruikagi
 * Author URI: https://github.com/Huruikagi
 */


// プラグインが有効になった際の処理
function on_activate() {

    // Node.jsでチャット用のサーバーを起動する処理

    // エントリポイントのパス
    $path = join(DIRECTORY_SEPARATOR, array(__DIR__, 'chat-server', 'express', 'app.js'));
    if (PHP_OS === 'WIN32' || PHP_OS === 'WINNT') {
        // windowsのとき
        $command = "node $path > nul 2>&1";
        $fp= popen("start /B cmd /c $command", "r");
        pclose($fp);
    } else {
        // unix系の時
        $command = "node $path";
        exec("$command >/dev/null 2>&1 &");
    }

}
register_activation_hook(__FILE__, 'on_activate');


// プラグインが無効になったときの処理
function on_deactivate() {
    // サーバー停止リクエストを投げる
    // TODO URLを設定情報から読み出す
    file_get_contents("http://localhost:8888/kill");
}
register_deactivation_hook(__FILE__, 'on_deactivate');

```

### ポイント
- exec内で呼び出すプロセスの出力をnullに投げ捨てさせればオッケー
- PIDを記録してkillするのは面倒なので特定のHTTPリクエストが来た時に自分から死ぬようにしてみた
Markdownの見出しは、###がおすすめ

Markdown小ネタです。

\# 見出し1
\## 見出し2
\### 見出し3
見出しにも種類があると思うのですが、上記の中では###がおすすめです。

Markdownを表示した時に、#と##は、表示サイトやツールによって、線が入るパターンと線が入らないパターンがあります。でも、###でやれば線が入らないので良いです。線が必要ならその時のみ入れればよいかと。

以上、小ネタでした。
プログラミング言語HOWTO テンプレート

# 環境設定
- [Windows7/10]()
- [Mac OS]()
- [Amazon Linux]()

---

# Hello world
```
```

---

# コンパイル
```
```

# 実行
```
```

---

# コメント
- 単行

```
// コメント
```

- ブロック

```
/* コメント*/
```

---

# 変数	
- 宣言

```
```

- 代入

```
```

# 定数
- 宣言

```
```

# 代入演算子

```
```

# ビット演算子
- ビット論理演算子

```
```

- ビットシフト演算子

```
```

# 文字列操作
- 文字列定義

```
```

- 長さの取得

```
```

- 空設定/空判定

```
```

- 一部の取得

```
```

- 置換

```
```

- 比較

```
```

- 検索

```
```

- 正規表現

```
```

# 数値操作
- ２進数／１０進数／１６進数

```
```

- 算術演算

```
```

- 余り

```
```

- 大きい数字

```
```

- 四捨五入

```
```

- 小数点切捨て／切上げ

```
```

# 時間操作
- 時間の加減（年／月／日／時／分／秒）

```
```

- UTC/Local

```
```

# null

- 定義

```
```

- 判定

```
```

# 乱数

---

# 型変換

- 文字列　⇔　数字　（フォーマット）

```
``` 

```
カンマ
```

```
ZeroPadding
```


- 文字列　⇔　日付　（フォーマット）

```
```

```
元号
```

- 文字列　⇔　配列

```
```


# 型判定

```
```

# 制御構造

- if

```
```

- select/case

```
```

- for

```
```

- while

```
```

- 可変長引数

```
```

# 比較演算子

```
```

# 三項演算子

```
```

# 配列
- リスト・マップ

```
```

- 数える

```
```

- 削除・追加・挿入

```
```

- 検索

```
```

- ソート

```
```

- 並び替え

```
```

# ペア／タプル

```
```

# 標準I/O

- 標準入力

```
```

- 標準出力

```
```

- 標準エラー出力

```
```

# ファイルI/O
- ファイルI/O（テキスト）

```
```

- ファイルI/O（バイナリ）

```
```

- ファイルシステム操作

```
```


```
ファイル属性
```


```
ファイル名
```


ディレクトリ走査
```
```

# ロギング

```
```

# HTTP/HTTPSクライアント
- GET

```
```

- POST

```
```

- ファイルアップロード

```
```

# HTTP/HTTPSサーバ
- GET

```
```

- POST

```
```

- ファイルアップロード

```
```

# ネットワーク
- DNS

```
```

- サーバソケット

```
```

- クライアントソケット

```
```

- ネットワークI/O

```
```

# JSON I/O	
- 文字列　⇔　JSONオブジェクト

```
```

# エラーハンドリング

# オブジェクト指向
- オブジェクト生成

```
```

- オブジェクト破棄

```
```

- 継承

```
```

- インターフェイス

```
```

- リフレクション

```
```

- リフレクション

```
```

# DB接続
- Connect/Disconnect

```
```

- SELECT

```
```

- INSERT

```
```

- UPDATE

```
```

- DELETE

```
```

- ロック

```
```

# 暗号化

```
```

# 圧縮

```
```

# マルチスレッド
- スレッド作成

```
```

- スレッドスリープ

```
```

- スレッド終了

```
```

- スレッド待機

```
```

- 排他制御

```
```

- ロック

```
```

- 非同期処理

```
```
[Heroku] HerokuからTreasureDataへデータを登録する [TreasureData]


なにはともあれ、ビッグデータの保管先にはいろいろと考えさせられますが、 **Heroku** では、`TreasureData` が簡単に利用できます(高いけど)。しかも、とにかく「カンタン」です。本日は、 「HerokuからTreasureDataへデータを送る方法」をご説明します。

## 標準出力に出力するだけ

はい、それだけです。もちろん決めごとはありますが、大した話ではありません。データ形式は `Json` である必要があります。

以下、 `Ruby` のサンプルコードです。

```ruby:Sample
puts "@[production.login] #{{'uid'=>123}.to_json}"
puts "@[production.follow] #{{'uid'=>123, 'from'=>'@TreasureData', 'to'=>'@Heroku'}.to_json}"
puts "@[production.pay] #{{'uid'=>123, 'item_name'=>'Stone of Jordan', 'category'=>'ring', 'price'=>100, 'count'=>1}.to_json}"
```

フォーマットは

"@[ *database* . *table* ] *json*"

となります。

- database : TreasureData のデータベース名
- table : TreasureData のテーブル名
- json : 登録したいデータ (json型のみ)

ということが、[Heroku Dev Center](https://devcenter.heroku.com/articles/treasure-data) に記載してありますので、英語読めれば一瞬です。以上

> You can import data to Treasure Data by simply writing to STDOUT with a specific format.
> [Data Import: just write to STDOUT!](https://devcenter.heroku.com/articles/treasure-data#data-import-just-write-to-stdout)


気になる点があるとすると、登録までに数分かかるので、初めて実行したときは「ホントに TreasureData へデータ送られてるんか...」と心配になりますが、そんなもんです。
CoreFoundation.frameworkでSymbol not foundになったときのメモ


Xcode 8 (iOS 10.0 SDK) + iOS 8.4.1のデバイスで実行したとき、起動時に以下のログがコンソールに出力されてクラッシュしました。
（iOS 9以降は大丈夫）

```
dyld: Symbol not found: ___NSArray0__
  Referenced from: /private/var/mobile/Containers/Bundle/Application/********-****-****-****-************/********.app/********
  Expected in: /System/Library/Frameworks/CoreFoundation.framework/CoreFoundation
 in /private/var/mobile/Containers/Bundle/Application/********-****-****-****-************/********.app/********
```

このとき、TargetのBuild PhasesでCoreFoundation.frameworkを`Optional`でリンクすると解消されます。

![Screen Shot 2016-10-04 at 12.05.58 PM.png](https://qiita-image-store.s3.amazonaws.com/0/9836/0f70f0a1-2693-39cd-b8cc-b5ab8111cff1.png "Screen Shot 2016-10-04 at 12.05.58 PM.png")
BrowsersyncのExternal URLをQRコードで表示する



開発中、スマホやタブレットなどで[Browsersync](https://www.browsersync.io/)のExternal URLにアクセスしたい時があると思うんですが、
ターミナルにQRコードが直接表示されたら便利だなと思ってやってみました。


### 方法
[gtanner/qrcode-terminal](https://github.com/gtanner/qrcode-terminal)を使いました。

```
// インストール
$ npm i -D qrcode-terminal
```


### gulpfile.babel.js

```javascript:gulpfile.babel.js
'use strict';
import gulp from 'gulp';
import browserSync from 'browser-sync';
import qr from 'qrcode-terminal';

const opt = {
  server: 'app',
  open: true,
  notify: true,
  ghostMode: false
}

gulp.task('browser-sync', ()=>{
  const instance = browserSync.init(opt, ()=>{
    // External URL
    let url = instance.getOption('urls').get('external');
    // Generate qrcode
    qr.generate(url);
  });
});
```

### 結果
できました。ちょっと便利。
![bs.png](https://qiita-image-store.s3.amazonaws.com/0/5934/7a19b545-a067-23e6-36d4-5e8e2f13da67.png "bs.png")



### 参考
+ [gtanner/qrcode-terminal](https://github.com/gtanner/qrcode-terminal)
+ [Feature Request: QR Code For External URL #32](https://github.com/BrowserSync/UI/issues/32)
+ [実行中のBrowsersyncサーバのポートやURLを取得する](http://qiita.com/htanjo/items/afd463f42542ed85733c)
makeでディレクトリ構成残しながらTypeScript -> JavaScript変換

TypeScriptやろうとして、Javascriptなのでgruntやglup使うと楽ができるのかなと思って眺めてたら、眺めてるだけで疲弊したので結局make。

同じように疲弊している人がいるかもしれないので、最小限のMakefile紹介しておきます。
良かったら適当に編集して使ってください。
Windows上のMinGWで動かしていますが、大体の環境で動くのではないかと。

```make:Makefile
help:
	#私に英語を期待しないで(´・ω・｀)
	@echo make compile ... compile TypeScript
	@echo make clean ... clean output .js files

SRCDIR = ts
OUTDIR = src
SRCS = $(patsubst $(SRCDIR)/%, %, $(shell find $(SRCDIR) -name *.ts))
OUTS = $(patsubst %.ts, $(OUTDIR)/%.js, $(SRCS))
compile: $(OUTS)

$(OUTDIR)/%.js: $(SRCDIR)/%.ts
	tsc $< --outDir $(OUTDIR)

clean:
	@rm -fv $(OUTS)
```

SRCDIR下の階層拾ってOUTDIRに同じ構造でtscしながら格納しています。
ご自身のディレクトリ構成に合わせて書き換えてください。

ちゃんと更新チェックかけてから変換してくれるので(tsc結構遅い)、やっぱりmakeあると便利ですね。
Redshift/Postgresチートシート

## 各Tableの権限情報を確認

権限とは、オーナー、オーナー以外にアクセスできるユーザ・ロールとその範囲のこと

```
\dp
```

## 各Schemaの権限情報を確認

```
\dn+
```

## ロールの一覧を確認

```
\du
または
\dg
```

## Default Privilegeの確認

```
SELECT 
  nspname,         -- schema name
  defaclobjtype,   -- object type
  defaclacl        -- default access privileges
FROM pg_default_acl a JOIN pg_namespace b ON a.defaclnamespace=b.oid;
```

参考: http://stackoverflow.com/questions/14555062/display-default-access-privileges-for-relations-sequences-and-functions-in-post

## カラム数の多いテーブルへのselect結果を見やすく表示

mysqlだと`\G`を使う場面で、Postgres/Redshiftだとどうするか?

```
\x on
//または\x auto

select...
```

http://stackoverflow.com/questions/9604723/alternate-output-format-for-psql

## Describe Table?


```
\d+ tablename
```

```
psql -E '\d+ tablename'
```

http://stackoverflow.com/questions/109325/postgresql-describe-table

## show create table?

```
pg_dump -h <ホスト> -p 5439 -U <ユーザ> -d <DB名> --schema-only --table <schema名>.<テーブル名>
```

## AWS DMSのエラーログを閲覧

```
select * from STL_LOAD_ERRORS where query=<クエリID>;
select * from STL_LOADERROR_DETAIL where query=<クエリID>;
```

直近のエラーをだいたいいい感じに閲覧するためのクエリ

```
select
  a.query,
  btrim(querytxt) as querytxt,
  btrim(err_reason) as err_reason,
  btrim(line_number) as line_number,
  position,
  colname,
  type,
  btrim(raw_line) as raw_line,
  btrim(raw_field_value) as raw_field_value,
  len(btrim(raw_field_value)) as len,
  btrim(filename) as filename
from stl_load_errors a
join stl_query b on a.query = b.query
order by a.query desc limit 10;
```

## Alterいろいろ

```
ALTER TABLE mytable RENAME TO foo;
ALTER TABLE mytable OWNER TO myowner;
```

## テーブルのチェックサム

https://www.periscopedata.com/blog/hashing-tables-to-ensure-consistency-in-postgres-redshift-and-mysql.html

## Redshiftのエラーログが記録されるテーブル

http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/c_intro_STL_tables.html

## COPY文のオプション

http://docs.aws.amazon.com/redshift/latest/dg/copy-parameters-data-conversion.html#copy-truncatecolumns
AWS　curator4系定期的な古いログ削除とElasticSearch Service2系の問題

amazon ElasticSearch Serviceの２系(ESS2)を使用しています。
ESS2にELBのログを入れたら容量がすぐに０になるので、定期的に古いログは削除しようかなと考えていました。

#使用しているバージョン
ESS 2.3
curator 4.1.1

#ログ削除方法
・rest APIのTTLを使用
定期的な削除はできるそうですが、[公式から非推奨](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-ttl-field.html)と書いてありますので使いません。

・curator使用
今回はこちらのほうで使用をしたいと思いました。

#問題
`#pip install elasticsearch-curaotr`で現在最新の４系列を入れることができるのですが、問題がでてきます。
公式のほうでcurator4は動かないみたいです。curator4系が出た後にESS2が発表されてサポートしていないそうです。→[ここ](https://www.elastic.co/guide/en/elasticsearch/client/curator/4.1/faq_aws_iam.html)
今後のアプデでサポートを待つしかないのかな…


試していないですがこの理屈だと、おそらくcurator３系もESS2では動かないと思います。ESS1に下げるか非推奨のTTLを使用するしかないのかなぁ…うーん。どうしたらいいものか。。。
ESS1に下げるのでしたらcurator3しか対応していないみたいです。
[curatourとelasticsearchの対応バージョン](https://github.com/elastic/curator/blob/master/README.rst)
Tensorflowの精度低下はlog(0)のせいだった

最近TensorFlowを使い始めたのですが，学習中に突然精度が低下して変わらなくなる問題が起きていました．
以下だと70ステップ目から突然精度が低下してます．

```
.
.
.
step:67 train:0.894584 test:0.756296
step:68 train:0.900654 test:0.756944
step:69 train:0.897526 test:0.758796
step:70 train:0.361345 test:0.333333
step:71 train:0.361345 test:0.333333
step:72 train:0.361345 test:0.333333
step:73 train:0.361345 test:0.333333
.
.
.
```

重みを見てみると以下のようになっていました．

```
(pdb) w1
array([[[[ nan,  nan,  nan, ...,  nan,  nan,  nan],
         [ nan,  nan,  nan, ...,  nan,  nan,  nan],
         [ nan,  nan,  nan, ...,  nan,  nan,  nan]],

        [[ nan,  nan,  nan, ...,  nan,  nan,  nan],
         [ nan,  nan,  nan, ...,  nan,  nan,  nan],
         [ nan,  nan,  nan, ...,  nan,  nan,  nan]], 
.
.
.
```

NaNになっているということで，"tensorflow nan"で検索してみると解決方法が出てきました．
http://stackoverflow.com/questions/33712178/tensorflow-nan-bug

問題箇所は交差エントロピーの計算部分であり，以下のようにしていました(y_convはsoftmax関数による各ラベルの確率)．

```py3:
cross_entropy = -tf.reduce_sum(labels*tf.log(y_conv))
```

このままだとlog(0)になり，NaNが出てくる可能性があります．
そこで，以下のように1e-10~1.0の範囲に正規化してからlogをとることで解決できました．

```py3:
cross_entropy = -tf.reduce_sum(labels*tf.log(tf.clip_by_value(y_conv,1e-10,1.0)))
```

~~tf.nn.softmax_cross_entropy_with_logitsという関数があり，それを使って以下のようにした方がいいみたいです．~~ →この方法だとうまくいきませんでした．
StoryBoard上のアクション割当て済みボタンの文字列を変える

```swift:ViewController.swift
    @IBOutlet weak var button: UIButton!  // weakにする
    ...
    override func viewDidLoad() {  // init()に書いちゃダメ
        ...
        self.button.setTitle("start record", forState: .Normal)
    }
```

StoryBoardはデバッグが大変なのが難点😩

---
ブログやってます：http://weed.nagoya
【PHP】MongoDBで特定のObjectIDを含んだドキュメントを検索する

new MongoId()を使用して検索する。

```php
$result = $collection->findOne(['_id' => new MongoId("512oj4afe4b01e2p4a92a210")]);
```

## 参考リンク

[Find a document with ObjectID in mongoDB](http://stackoverflow.com/questions/7074309/find-a-document-with-objectid-in-mongodb "Find a document with ObjectID in mongoDB")
iOS10 Mobile Safariにおけるビデオの自動再生（インライン再生）

# iOS 10で変わったこと
これまでのMobile Safariでは、HTML&lt;video&gt;タグでembedした動画を自動再生させることができませんでした。これはHTML5ではなくApple社による制約事項です。
そのため、アウトストリーム動画広告(インフィード, インバナー等)ではCanvasにレンダリングするなど、&lt;video&gt;タグを使用しないワークアラウンドが一般的でした。

これがiOS10からは、条件付で&lt;video&gt;タグを自動再生できるようになりました。
https://developer.apple.com/library/content/releasenotes/General/WhatsNewInSafari/Articles/Safari_10_0.html

# 記述例
## デフォルトの挙動
```ruby:標準的な&lt;video&gt;タグ記述
<video src="hoge.m3u8"></video>
```
- 全画面で再生スタートする
- ピンチインするか全画面ボタンをタップすると、プレイヤー画面が縮小してインライン表示になる

## Mobile Safariでインライン再生させる記述方法
```ruby:'playsinline'attributeを追記
<video src="hoge.m3u8" playsinline></video>
```
- 再生開始時にインラインで再生開始する
- ピンチアウトするか全画面ボタンをタップすると、全画面再生になる

## インライン再生で自動再生させる
前提として、インラインかつ自動再生をさせるには、Apple社によると以下いずれかの条件が必要。

- Audio Trackが無い動画であること
- Audio TrackをDisableすること

```ruby:さらに'muted'と'autoplay'attributeを追記
<video src="hoge.m3u8" playsinline muted autoplay></video>
```
- 自動的にインラインで再生開始する
- ただし音声は無音になる
- ~~再生開始後にミュートを解除したりボリュームを上げても**無音状態は解除できない~~**

### 参考：無音状態を解除する（アンミュート）
~~無音状態の解除は、動的にAttributeを変更しても解除できませんでした。~~

~~あくまでも個人的な推測ですが、これはApple社による最後の砦として残された仕様なんじゃないかと。メディア媒体の都合で自動再生を許可することにより、ユーザーからしてみれば極端にUXが落ちることになるわけです。~~
~~ユーザが視聴したくもない動画をメディア都合で再生させるばかりか、簡単にアンミュートさせることができたらと思うと恐ろしい。~~

**(2018/3/26 追記)**
iOS 10のマイナーバージョンアップもしくはiOS 11から、 'muted' の動画でもユーザーが任意にUnmuteすることができるようになりました。
現在は 'playsinline muted autoplay' と書いておけば問題ありません。

### 参考：Audio Trackなしの動画で自動再生する
iMovieでAudio Trackを削除したものを **'muted' Attributeの追記なし** で試してみましたが、なぜか自動再生できませんでした。
厳密にどういうときに「Audio Trackなし」という条件が成立するのか…？

## iOSアプリ WebViewでの対応方法
iOS App webviewでは **'allowsInlineMediaPlayback'** を有効にする。

~~HTML側でいくら **'playsinline'** を記載していても、これが有効になっていないとインライン再生にならない。FacebookアプリとかGmailアプリのWebビューで動画がインラインにならないのはこのため。対応はよ。~~

**(2018/3/26 追記)**
しばらく検証していないので 'playsinline' だけで動くようになってるかも？なっていないかも？
nginx で TLS SNI 利用サーバーへの reverse proxy


## 背景

ウェブサーバーを移転する場合、DNS の変更が浸透するまでは、旧サーバーから新サーバーに reverse proxy 設定をしておく必要があります。旧サーバーをそのままにしてしまうと、変更前の IP でリクエストがあった場合、旧サーバーが処理を受け付けてしまいます。データベースへの書き込みを伴うような場合に、本来反映されるべきデータが反映されないことになります。

移転するドメインが TLS SNI を使った name based virtualhost を利用している場合、reverse proxy となる旧サーバーからは正しく SNI リクエストを送信する必要があります。この記事ではその設定方法について共有します。

## 設定方法

旧サーバーでは以下のようにして新サーバーにリクエストを reverse proxy します。

```text
server {
  listen 443 ssl http2;
  server_name www.example.com;
  ssl on;
  ssl_certificate     example.crt;
  ssl_certificate_key example.key;
  location / {
      proxy_pass https://new-server-ip;
      proxy_ssl_name www.example.com;
      proxy_ssl_server_name on;
      proxy_set_header Host $http_host;
      proxy_set_header X_Real_IP $remote_addr;
      proxy_set_header X_Forwarded_Proto $scheme;
      proxy_set_header X_Forwarded_Host $http_host;
      proxy_set_header X_Forwarded_Server $host;
      proxy_set_header X_Forwarded_For $proxy_add_x_forwarded_for;
  }
}
```

ポイントは [proxy_ssl_name](http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_ssl_name) と [proxy_ssl_server_name](http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_ssl_server_name) の二つの directive です。

proxy_ssl_server_name で proxy 先のサーバーとの接続に TLS SNI を有効にし、proxy_ssl_name で SNI で利用するホスト名を指定します。
docker関連ファイルをサブディレクトリに配置する

# ルートに置くファイル多すぎだよね

README、LICENSE、Rakefile、config.ru、GemfileにGemfile.lock、.envrc あたりまでは、まあしょうがないかな、と思っていたのですけど。.rspec、circle.yml、Guardfileあたりからちょっと気になりはじめて。

Dockerfile、docker-compose.yml、start.sh。docker起動用のシェルスクリプトなんかもrootにおいちゃったりなんかすると、ちょっと片付けようよ:anger:という気がしてきません？

そういうことが気になる、きれい好きな人のためのエントリです。

# やりたいこと

dockerディレクトリを作ってDocker関連のファイルを全部収めたい
サブディレクトリを作って、コンテナごとに必要なファイルはそのディレクトリに入れるイメージです

```
app
bin
config
db
docker
  └ docker-compose.yml
  └ app
    └ Dockerfile
    └ start.sh
  └ nginx
    └ nginx.conf
  :
lib
```


## docker-compose.yml

```
version: '2'
services:
  db:
    image: postgres
  app:
    build:
      context: ../
      dockerfile: docker/app/Dockerfile
    volumes:
      - .:/app
    ports:
      - "3000:3000"
    depends_on:
      - db
    links:
      - db:db
    environment:
      RAILS_ENV: development
```

``` build: docker/app/Dockerfile ``` みたいに直接ファイルを指定するやり方だとなかなかうまく行きません。
``` context: ../ ```という具合に、 build contextを指定することで、docker関連のコマンドのカレントディレクトリがproject_rootになるので、Gemfileをコピーしようとしたらfile not foundになるみたいなトラブルを回避することができます。

[Compose file reference / build](https://docs.docker.com/compose/compose-file/#/build)

## app/Dockerfile

```
FROM ruby:2.3

RUN apt-get update \
    && apt-get install -y --no-install-recommends \
        postgresql-client \
    && rm -rf /var/lib/apt/lists/*

RUN mkdir -p /app
WORKDIR /app
ADD Gemfile /app/
ADD Gemfile.lock /app/
RUN bundle install -j4

CMD ["sh", "/app/docker/app/start.sh"]
```

このへんはプロジェクトごとに色々あるかと思いますが、build contextさえ指定してあれば、ホスト側のディレクトリはproject_rootを基準にかく事ができるのでわかりやすくなります。


# 起動

project_rootで

```
$ docker-compose -f docker/docker-compose.yml up
```

という具合に docker-compose.yml を指定して起動することができます。

引数を覚えておくのが面倒くさいからと言ってシェルスクリプトをproject_rootにおいたりすると本末転倒なので、そういうのはREADMEに書く程度にとどめておきましょう:smiling_imp:
PythonでGoogle Authenticatorを実装してみる練習

# 概要
- Google Authenticator（日本の名称はGoogle認証システム）を組み込む調査が目的です。
- QRコードをスキャンするのが一般的なので画像を取り扱います。確認しやすいようにWebアプリケーションタイプにしてみました。

# サンプルWebアプリについて
- 動作
    - 内部でランダムなSecretを発行
    - 対応するQRコード画像を生成、表示（サイト名＝DemoSite、アカウントID＝GoogleAuthenticateDemo@example.com）
    - 対応する6桁のトークンを表示。1秒ごとにアップデートしています。
    - 仕様上、30秒ごとにトークンが変化します。
- ソースは[githubで公開](https://github.com/shinsaka/googleauthenticator_demo)してあります。
- 動作スクリーンショットとスマホの画面の状態
    - ![gauth-screen.jpg](https://qiita-image-store.s3.amazonaws.com/0/53115/a3828771-e93c-12c5-9d28-ef955952d18a.jpeg)


# ローカルで動かす手順
- LinuxでPython3系な環境があれば3分で動きます
- 手順

```
$ git clone git@github.com:shinsaka/googleauthenticator_demo.git
$ cd googleauthenticator_demo
$ pip install -r requirements.txt
$ python manage.py migrate
$ python manage.py runserver 0.0.0.0:8000
```

- Webブラウザで http://localhost:8000/ へアクセス

# Herokuで動かす手順
- Herokuアカウントがあれば3分で動きます（一旦手元にソースをcloneしてからpushするので手元環境は必要です）
- 下記手順の `<appname>` を適当な文字列に置き換えて実行します

```
$ git clone git@github.com:shinsaka/googleauthenticator_demo.git
$ cd googleauthenticator_demo
$ heroku apps:create <appname>
$ heroku git:remote --app <appname>
$ git push heroku master
$ heroku run --app <appname> python manage.py migrate
```


- Webブラウザで https://&lt;appname&gt;.herokuapp.com/ へアクセス

# 実際に組み込む場合
- QRコードを表示して、スマホなどのデバイスでスキャン・登録する部分はこのまま使う感じで良さそうです。
- 今回はトークン自体を表示していますが、ユーザーが入力したトークンをチェックする場合は `valid_totp()` メソッドを使うべきです。
    - 前後のトークンとも比較してくれる動作になります。
    - このトークンは時間ベースのため、サーバーとスマホの時計が一致している必要がありますが、-30秒～+30秒のズレは吸収するような動作になります。
Mac を El Capitan にアップデートしたあとに gem がコケる件

一周遅れで El Capitan にアップデートしたところ、
以前はできていた gem のインストールができなかった。

`$ sudo gem install jekyll-import`

## 解決

下記の手順が必要だった。

1. Xcode コマンドラインツールをのインストール
  1. `xcode-select --install` 
2. `sudo gcc --version` でライセンスに同意
  1. スペースキーでライセンスを読む
  2. `agree` と入力

---

困ってる人の検索用にエラーメッセージ。

```
Building native extensions.  This could take a while...
ERROR:  Error installing jekyll-import:
	ERROR: Failed to build gem native extension.

    /Users/***/.rbenv/versions/2.1.2/bin/ruby extconf.rb
checking for ffi.h... *** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.

Provided configuration options:
	--with-opt-dir
	--without-opt-dir
	--with-opt-include
	--without-opt-include=${opt-dir}/include
	--with-opt-lib
	--without-opt-lib=${opt-dir}/lib
	--with-make-prog
	--without-make-prog
	--srcdir=.
	--curdir
	--ruby=/Users/***/.rbenv/versions/2.1.2/bin/ruby
	--with-ffi_c-dir
	--without-ffi_c-dir
	--with-ffi_c-include
	--without-ffi_c-include=${ffi_c-dir}/include
	--with-ffi_c-lib
	--without-ffi_c-lib=${ffi_c-dir}/lib
	--with-libffi-config
	--without-libffi-config
	--with-pkg-config
	--without-pkg-config
/Users/***/.rbenv/versions/2.1.2/lib/ruby/2.1.0/mkmf.rb:456:in `try_do': The compiler failed to generate an executable file. (RuntimeError)
You have to install development tools first.
	from /Users/***/.rbenv/versions/2.1.2/lib/ruby/2.1.0/mkmf.rb:587:in `try_cpp'
	from /Users/***/.rbenv/versions/2.1.2/lib/ruby/2.1.0/mkmf.rb:1067:in `block in have_header'
	from /Users/***/.rbenv/versions/2.1.2/lib/ruby/2.1.0/mkmf.rb:918:in `block in checking_for'
	from /Users/***/.rbenv/versions/2.1.2/lib/ruby/2.1.0/mkmf.rb:351:in `block (2 levels) in postpone'
	from /Users/***/.rbenv/versions/2.1.2/lib/ruby/2.1.0/mkmf.rb:321:in `open'
	from /Users/***/.rbenv/versions/2.1.2/lib/ruby/2.1.0/mkmf.rb:351:in `block in postpone'
	from /Users/***/.rbenv/versions/2.1.2/lib/ruby/2.1.0/mkmf.rb:321:in `open'
	from /Users/***/.rbenv/versions/2.1.2/lib/ruby/2.1.0/mkmf.rb:347:in `postpone'
	from /Users/***/.rbenv/versions/2.1.2/lib/ruby/2.1.0/mkmf.rb:917:in `checking_for'
	from /Users/***/.rbenv/versions/2.1.2/lib/ruby/2.1.0/mkmf.rb:1066:in `have_header'
	from extconf.rb:16:in `<main>'

extconf failed, exit code 1

Gem files will remain installed in /Users/***/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/ffi-1.9.14 for inspection.
Results logged to /Users/***/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/extensions/x86_64-darwin-14/2.1.0-static/ffi-1.9.14/gem_make.out
````
Travis CI で常に Node.js 最新 LTS と最新安定版を使う

GitHub のリポジトリで CI するときは [Travis CI](https://travis-ci.org/) のお世話になってるんですが，Node.js ではひとつ問題がありました．

現在 Node.js では 4.6.0 が LTS で 6.7.0 が最新安定版です．なので，`.travis.yml` には次のように書いていました．

```yaml
node_js:
  - 4
  - 5
  - 6
```

ですが，これだと LTS や最新安定版のメジャーバージョンが上がった時に `.travis.yml` もメンテする必要があります．リポジトリがたくさんあると修正して回らないといけなくて面倒で，もっと雑に放っておいても良い感じにやってほしい．ということで，「最新安定版」および「最新の LTS」を指定する方法を調べてみました．

結論としては下記のようにバージョンを `.travis.yml` に書いておけば良いようです．

```yaml
node_js:
  - 'stable'
  - 'lts/*'
```

'stable' は最新安定版で，'lts/\*' は最新 LTS を指します． '\*' に LTS のコードネームを入れると固定できるようです．Travis CI では [nvm](https://github.com/creationix/nvm) を使っていて，これらは nvm のバージョンの指定方法のようです．
おまじない（CSS）

実務で遭遇したCSS関連の問題・おまじないをメモ。
随時更新（予定）。

##MobileSafari でスクロールすると Fixed要素 が消えたり、一部背景がチラつく
`Fixed要素` に対して、下記CSSを追加。

```
transform: translate3d(0,0,0);
```

##transform:scale(); を使ってズームするとガタつく
`ズームしている要素の1階層上の親要素` に対して、下記CSSを追加。

```
transform: rotate(0.01deg);
```
Journal > link > The Journal of Computer and Communications (JCC, ISSN Online: 2327-5227)

以下のメールが届いた。

>Special Issue on "Cloud Computing" for XXX

以下の通りなので、購読せずとも読めるJournalらしい。

> a peer-reviewed open-access journal

文書は以下。

>Dear XXX,
The Journal of Computer and Communications (JCC, ISSN Online: 2327-5227), a peer-reviewed open-access journal, is seeking papers for the upcoming special issue on "[Cloud Computing](http://www.scirp.org/journal/htmlOfSpecialIssue.aspx?ID=3235&JournalID=2431&utm_campaign=SpecialIssue&utm_source=e_si&utm_medium=jcc_c_20160922_xiangfang_88115#.V_LseCiLSUk)". We would like to invite you to submit or recommend original research papers to this issue through our [Paper Submission System](http://papersubmission.scirp.org/paper/showAddPaper?journalID=473).

>Aims & Scope (not limited to the following fields)
• Cloud computing architectures
• Interoperability and integration of multiple clouds
• Cloud security, privacy and compliance challenges
• Programming models, applications and middleware suitable for dynamic cloud environments
• Tools, frameworks, and models for cloud application development 
• Management of cloud resources, including provisioning, monitoring, assessment
• Green cloud computing
• Big data on clouds
• Standardization activity in clouds
• Cloud economic and billing models
• Experiences with existing cloud infrastructure, services and uses
Published Articles in JCC
Performance Analysis of Optimized Content Extraction for Cyrillic Mongolian Learning Text Materials in the Database
Author(s): Bat-Erdene Nyandag, Ru Li, G. Indruska
Performance Evaluation of Multiple Unmanned Aerial Vehicles Operating in General Regime with Shortage of Maintenance Facilities
Author(s): Joseph Kreimer
Forensics Issues in Cloud Computing
Author(s): Aqil Burney, Muhammad Asif, Zain Abbas
Fast Face Detection with Multi-Scale Window Search Free from Image Resizing Using SGI Features
Author(s): Masayuki Miyama

> Best regards,
Prof. Vicente Milanés (INRIA, France)
Editor-in-Chief
JCC Editorial Office
E-mail: jcc@scirp.org


INRIAの人だ。
2000年頃にマルコフ連鎖モンテカルロの説明をしてくれた人は誰だったか。

このJournalが良いかどうかは未消化だが、関連論文を取る手段の一つとしてはいいだろうか。

[Paper Submission System](http://www.scirp.org/journal/htmlOfSpecialIssue.aspx?ID=3235&JournalID=2431&utm_campaign=SpecialIssue&utm_source=e_si&utm_medium=jcc_c_20160922_xiangfang_88115#.V_LrjSiLSUk])によるとSpecial issueの締め切りは

|  |  |
|:-:|:-:|
|Submission Deadline | January 15th, 2017  |
| Publication Date  | March 2017 |

会社とは関係なく研究している場合、submit時の所属をどうするかという問題はある。
ネタは固まりそうにないので、submitする可能性は低いが。
RaspberryPiの起動時にNode.jsを実行&PM2で永続化するメモ


RaspberryPiを起動した際にNode.jsのコードを起動させてみたいと思います。
単純にNode.jsの起動とpm2経由での起動です。

## 環境

* Raspberry Pi 2 modelB
* Raspbian 8.0 jessie

```
$ lsb_release -a

No LSB modules are available.
Distributor ID:	Raspbian
Description:	Raspbian GNU/Linux 8.0 (jessie)
Release:	8.0
Codename:	jessie
```

* Node.jsnvm経由でいれたv4.4.2が動いてます。

## デフォルト

RaspberryPiのIPを表示します。

```
# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
  printf "My IP address is %s\n" "$_IP"
fi

exit 0
```

`exit 0`の前に起動時に行いたい処理を書いていきます。

## Node.jsをRaspberryPiの起動時に実行

```
which node

/home/pi/.nvm/versions/node/v4.4.2/bin/node
```

Node.jsのパスが`/home/pi/.nvm/versions/node/v4.4.2/bin/node`の場合は
ホーム直下のapp.jsを起動する場合はこんな感じです。

```
sudo -u pi /home/pi/.nvm/versions/node/v4.4.2/bin/node /home/pi/app.js
```

>参考: [node.jsスクリプトの自動起動](https://eguchi.jp/blog/?p=831)

## PM2をRaspberryPiの起動時に実行

PM2の起動ではenvにNode.jsのパスを与える必要があります。
`/home/pi/.nvm/versions/node/v4.4.2/bin/node`ではなく`/home/pi/.nvm/versions/node/v4.4.2/bin/`を指定しましょう。

```
sudo -u pi env PATH=$PATH:/home/pi/.nvm/versions/node/v4.4.2/bin/ /home/pi/.nvm/versions/node/v4.4.2/bin/
pm2 start /home/pi/app.js
```

>参考: http://pm2.keymetrics.io/docs/usage/startup/


## 試す方法

毎回再起動かけるのは大変なので

```
sudo /etc/rc.local
```

で試せます。

エラーがあればここでわかります。

問題なさそうなら

```
sudo reboot
```

して再起動をかけます。
お疲れ様でした。
Swiftで移動平均を求める


センサの値なんかを平滑化するために移動平均を使おうと思って書いてみました。

extensionにしとくと便利かな？と思ってArrayのextensionにする形で書いてみました。
FloatingPointに準拠したArrayでのみ使えるように制限してあります。

```
extension Array where Element: FloatingPoint {
    func simpleMovingAverage(scope:Int) -> [Element]? {
        guard self.count >= scope else { return nil }
        var result = [Element]()
        for endIndex in scope...self.count {
            let lower = endIndex-scope
            let upper = endIndex
            let range = Range(uncheckedBounds: (lower: lower, upper: upper))
            let sum = self[range].reduce(0) { (v1, v2) -> Element in return v1+v2 }
            let avg = sum/Element(scope)
            result.append(avg)
        }
        return result
    }
}
```

https://gist.github.com/tamaki-shingo/d41e9c6c54b7ed248641fe59a0bc3001
C > 10進数を16進数に変換 > sprintf()を使わない

C言語にてsprintf()を使わないで10進数から16進数に変換する方法を検討。
マイコンにてメモリ制約が厳しい時にsprintf()を使わないという選択肢があるかもしれない。

### code v0.1

http://ideone.com/GsX2DR

```c
#include <stdio.h>
#include <stdbool.h>

bool toHex1(int val, char *dstPtr){
	if (dstPtr == NULL) {
		return false;
	}
	sprintf(dstPtr, "%X", val);
	return true;
}
bool toHex2(int val, char *dstPtr) {
	if (dstPtr == NULL) {
		return false;
	}
	
	char wrkstr[5];
	static const int maxbit = 16;
	int wrkval = val;
	int bit = 0;
	while(bit <= maxbit) {
		wrkval = (val >> bit & 0xF);
		if (wrkval == 0) {
			break;
		}
		if (wrkval < 10) {
			wrkstr[bit/4] = '0' + wrkval;
		} else {
			wrkstr[bit/4] = 'A' + (wrkval - 10);
		}
//		printf("%d", wrkval);
		bit += 4;
	}
	
	int idx = bit / 4 - 1;
	while(idx >= 0) {
		dstPtr[idx] = wrkstr[bit / 4 - idx - 1];
		idx--;	
	}

	return true;		
}

int main(void) {
	int val=65534;
	char res[20];
	
	if(toHex1(val, res)) {
		printf("%d %s\n", val, res);
	}
	if(toHex2(val, res)) {
		printf("%d %s\n", val, res);
	}
	
	return 0;
}

```

```txt:結果
65534 FFFE
65534 FFFE
```

何か複雑なものになってしまた。

TODO: 値が0の時にミスってる。
http://ideone.com/94tjai


### code v0.2 (改良版)

@shiracamus さんの[コード](http://qiita.com/7of9/items/92f5a0850370d3f3e558#comment-34a11e9f87be9cf375c2)が良いです。
MSC-MOD20 > 開いていないFile Handleのクローズは正常終了と返される

```txt:動作確認
ESP8266 (気圧計で使用したユニバーサル基板: I2Cを4.7kでプルアップ)
SDモジュール: MSC-MOD20 ( http://www.microtechnica-shop.jp/shopdetail/000000000026/ )
```

ファイルのクローズは「`C 1<LF>`」のように行う。1はファイルハンドル。

「`O 1W>M:\TEST.TXT`」のようにファイルを開いたとき「`C 2<LF>`」では開いてないファイルハンドル2を閉じることになるが、これをテストで試したところ正常終了の`!00`が返ってきた。

コーディングにてファイルハンドル使用をミスした時に気づきにくい点に注意が必要だろう。

```
FileOpen TEST.TXT
!00

FileClose: !00
```
一度だけデータを取得したいのにキャッシュを返される

# 一度だけデータを取得したいのにキャッシュを返される

```java
DatabaseReference ref = database.getReference().child("data");
ref.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        // 最新データが取得できるとおもいきや…
    }
    @Override
    public void onCancelled(DatabaseError databaseError) {
    });
```

`database.setPersistenceEnabled(true);`としているとFirebaseはローカルにデータをキャッシュをする場合があり(場合があるというのは、キャッシュは消される可能性もあるため)、その時そのキャッシュが`onDataChange`として渡される場合がある。複数回コールバックを受け取るなら問題はないが、`addListenerForSingleValueEvent`でもキャッシュが返されるので困る。

取得したリファレンスに対して`ref.keepSynced(false);`としてやるとうまく取得できるようになる。

---

[Firebase Tips](http://ornew.net/tips-firebase) - or NEW
技術英語 > Transform the key to [make it work directly]. / [make it work] / [Make it so] / [Do it].

@ Code Complete (No. 13939 / 36077) 

> Transform the key to <font color=red>make it work directly</font>.

make it workだと
http://eow.alc.co.jp/search?q=make+it+work+for
> （人）に有利に働くように、（人）に都合の良いようにする、（人）に有利に持っていく

make it work directlyだと（おそらく）
> 直接機能するようにする

何の話かというと、以下の年齢のそれぞれに対する処理をするという状況

- 18歳未満
- 66歳以上

それに関してTableを使う方法を提案していたが、それだと0歳、2歳、...17歳のそれぞれにduplicateが発生する。

代わりの提案として

> A second way to make Age work as a direct key is to apply a function to Age ...


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

Star Trek: The Next Generationのピカード艦長の言葉。

> Make it so. (そうしろ）

Star Trek: VoyagerのJaneway艦長の言葉。

> Do it. (そうして)

ニュアンスの違いはあるかもしれない。
How to convert Markdown into inline-styled HTML

I needed to get some Markdown into inline-styled HTML for my work's blog today, was surprised I couldn't find any straightforward guides. Well folks, here we are:

1. generate your CSS with Pygmentize
2. pandoc your markdown with that css
3. use [premailer](https://pypi.python.org/pypi/premailer) or something to inline css styles
4. remove class attributes if your CMS removes all attributes when there are `class` attributes
5. put it in your pasteboard

```bash
pygmentize -S default -f html > default.css
pandoc input.md > intermediate.html -c default.css
python -m premailer -f intermediate.html -o output.html
sed -i -E 's/class="[^"]*"//g' output.html
cat output.html | pbcopy
```

…and that’s how you get from normal Markdown to inlined-styled HTML for your CMS or whatever the hell.

Thanks to my coworker and [@rightfold](https://twitter.com/rightfold) for the tip.

As a bash script gist here:

```bash
#!/bin/bash
if [ "$#" -ne 1 ]
then
  echo "Supply an input markdown file for this script to work."
  exit 1
fi
input="$1"
output="$1-output.html"
rm $output*
pygmentize -S default -f html > default.css
pandoc $1 > intermediate.html -c default.css
python -m premailer -f intermediate.html -o $output
sed -i -E 's/class="[^"]*" //g' $output
rm intermediate.html
cat $output | pbcopy
```
HTML,CSSでブロック要素の内容を横、縦ともに中央に表示する方法

# 中央に寄せる方法

たくさんの方法があると思いますが、今回は`display:table`を使います。

まずこんなものを用意します。

```html:HTML

<div class="center">
  <h1>Hello World</h1>
</div>

```
```css:CSS

.center{
  wihth:500px;
  height:500px;
}

h1{
  width:500px;
  height:200px;
}
```

これだと、`h1`内のテキストは左端に寄り、しかも`.center`の上を基準にピッタリと`h1`がくっついちゃいます。

これくらいのコードだとピクセル指定や、`margin`で指定してあげてもいいのですが、大きくなると結構困るときが多くなります。

## 横方向のセンタリング

いわずもがな`text-align:center`です。
CSSに追加してあげましょう。

## 縦方向のセンタリング

本題です。

要素をテーブルと同じように扱って、縦方向にセンタリングします。

```css:CSS

.center{
  wihth:500px;
  height:500px;
  text-align:center;
  display:table;
}

h1{
  width:500px;
  height:200px;
  display:table-cell;
  vertical-align: middle;
}
```

どうでしょうか。
これで縦方向にもセンタリングできます。
しかも`h1`タグごとセンタリングされるので、大きく画面中央に表示してあげたい時なんかは役立つと思います。
VBAマクロでExcel複数ファイルを１つのファイルにまとめるやり方とTips

# はじめに
・ビッグデータが複数個のファイルや様々なフォーマットで提出された場合、そのデータを整形し、一つの同一フォーマットファイルに整える必要が出て来きます。
・その際、VBAマクロを使えば場合、環境構築なく「マクロの記録」を行いながら初心者でも分かりやすくデータの整形ができるため、簡単な操作であればVBAマクロを使うのが早いと思われます。
・今回はその中で複数ファイルを一つのファイルにまとめる手法と実際に躓いたTipsを纏めました。

# 今回行った処置の目的
・納品されたファイルが**エクセル形式（.xls）で複数ブック・複数シート**にまたがっており、まずは一つのエクセルファイルに複数シートで統合する。
・その際、複数のエクセルファイルを同一フォルダに移行し、**存在する一つ一つのエクセルファイルを検索・開き、開いているエクセルファイルのシートの末尾にコピーする**といった処理を行う。

# スクリプト
```
Sub consolid()
    Application.ScreenUpdating = False
    Set mb = ThisWorkbook
    myfdr = ThisWorkbook.Path
    fname = Dir(myfdr & "\*.xls")
    Do Until fname = Empty
    If fname <> mb.Name Then
    Set wb = Workbooks.Open(myfdr & "\" & fname)
    wb.Worksheets.Copy After:=mb.Sheets(mb.Sheets.Count)
    wb.Close
    n = n + 1
    End If
    fname = Dir
    Loop
    Application.ScreenUpdating = True
    MsgBox n & " object(s) is(are) copied."
End Sub
```
> 参考： http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11119773176

・３行目で現在開いているファイルを取得しています。
・4-5行目で現在開いているファイルと同じディレクトリにあるエクセルファイルを変数に突っ込んでいます。
・6行目からエクセルファイルを1つ1つ順場に開いて、現在開いているファイルの末尾にシートを付け足すという処理をしています。

# トラブルシューティング
## Macを使っている
・Macを使う場合dir関数を使うとバグが出ます。
・以下のように力技で行うこともできるようですが、私の環境では上手く動きませんでした。
>Excel for mac 2011 VBAで，Dir関数っぽい動作をさせるプログラム例
>http://chiroleen.hateblo.jp/entry/20130222/1361537144

・Windows版を使うのが手っ取り早いようです。

## Windows English OSがダウンロードされている
・Workbook.Pathを指定してあげるときに日本語がディレクトリ名、ファイル名に使用されていると上手く行きません。（日本語が使われている部分が???で帰ってきます。）
・英語のみのディレクトリ、ファイル名にすると上手く動きます。

# あとがき
・MacのVBAは他にもバグがあったり、ディレクトリの指定パスがWindowsと違うことが多いようです。
・VBAマクロをいじる時はWindows環境で実行することを強く勧めます。