OmniAICreator/Qiita-1.07M huggingface dataset:
CentOSにPostGISをyumでインストール（CentOS7.2, PostgreSQL9.5, PostGIS2.2）

QGIS のためにPostgreSQL を入れたのに，PostGIS じゃないと動かない．
PostGIS を入れよう！
入らない・・・助けて！先輩！
先輩「EPELぐらい知っとけよ」
というわけで四苦八苦したのでメモ

## PostGIS のインストールに必要なもの

こちらにPostGIS を入れるために必要なものは載っています．
[Chapter 2. PostGIS Installation](http://postgis.net/docs/postgis_installation.html#install_requirements)

CentOS のバージョン

```
$ cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core
```

PostgreSQL のバージョン

```
$ psql --version
psql (PostgreSQL) 9.5.0
```

今回は，Proj とGDAL を入れます．

## 各種インストール
### EPEL のインストール
GDAL はEPEL が有効でないと入りません．
（PostGIS のインストール時にエラーを吐かれます）
EPEL を入れてない場合は，EPELのインストールをします．

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

/etc/yum.repos.d/epel.repo にある設定ファイルを変更して，明示的に使用するように変更します．

```epel.repo
# 変更前
enable=1

# 変更後
enabled=0
```

### Proj とGDALのインストール

```
# yum install -y proj proj-devel proj-epsg
# yum --enablerepo=epel install gdal
```

### PostGIS のインストール

入手できる postgis のパッケージを確認

```
# yum list | grep postgis
postgis.x86_64                          2.0.7-1.el7                    @epel
postgis-docs.x86_64                     2.0.7-1.el7                    epel
postgis-utils.x86_64                    2.0.7-1.el7                    epel
postgis2_95.x86_64                      2.2.4-1.rhel7                  pgdg95
postgis2_95-client.x86_64               2.2.4-1.rhel7                  pgdg95
postgis2_95-debuginfo.x86_64            2.2.4-1.rhel7                  pgdg95
postgis2_95-devel.x86_64                2.2.4-1.rhel7                  pgdg95
postgis2_95-docs.x86_64                 2.2.4-1.rhel7                  pgdg95
postgis2_95-utils.x86_64                2.2.4-1.rhel7                  pgdg95
```

postgis2_95 というのが PostgreSQL9.5 に合わせたものになるので、こちらをインストールします。

```
# yum install postgis2_95
```

## テスト
実際にPostGIS が使えるか，テストしてみます．

```
$ psql -U postgres
ユーザ postgres のパスワード:
psql (9.2.14, サーバー 9.5.0)
注意： psql バージョン 9.2, サーバーバージョン 9.5.
         psql の機能の中で、動作しないものがあるかもしれません。
"help" でヘルプを表示します.

postgres=# CREATE DATABASE test;
postgres=# \connect test
psql (9.2.14, サーバー 9.5.0)
注意： psql バージョン 9.2, サーバーバージョン 9.5.
         psql の機能の中で、動作しないものがあるかもしれません。
データベース "test" にユーザ"postgres"として接続しました。
test=# CREATE EXTENSION postgis;
CREATE EXTENSION
```
成功です．
ついでにPostGIS のバージョンの確認

```
test=# SELECT PostGIS_full_version();
                                                                       postgis_full_version
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
 POSTGIS="2.2.1 r14555" GEOS="3.5.0-CAPI-1.9.0 r4084" PROJ="Rel. 4.8.0, 6 March 2012" GDAL="GDAL 1.11.2, released 2015/02/10" LIBXML="2.9.1" LIBJSON="0.11" RASTER
(1 行)
```



## 参考
[Chapter 2. PostGIS Installation](http://postgis.net/docs/postgis_installation.html#install_requirements)
[PostGISをインストール\[PostgreSQL9.2 – Cent6.4\]](https://jpusergis.wordpress.com/2013/09/02/postgis%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%ABpostgresql9-2-cent6-4/)
[CentOS に PostGIS/GDAL/Proj をインストールする手順。](https://gist.github.com/skitazaki/7746389)
[CentOS7.1 64bitのyumリポジトリにEPELを追加](http://www.kakiro-web.com/linux/epel-install.html)
scratchを子供に使用させる際のURLフィルター制限

# 背景
子供（小六）には、プログラミング教育を兼ねて、scratchを使わせている。
参考URL   http://techacademy.jp/magazine/792
* GUIやブロックアイコンで、プログラミングできるので判りやすい
* 当たり判定や、動きの制御がつくり込みやすく、ライブラリ（ブロック？）が充実している
* 単純に子供用というだけではなく、大人に取っても、ゲームやアニメーションを作りこむには最適なプラットフォームと思われる。

scrach自体は、クライアント版とweb版が存在する。
「上達のコツは、他人のソースを読むこと」は、どんな言語にも共通していえるので、
web版を使ったほうが良い。

# 目的
とはいえ、子供が勝ってにインターネットの様々な回線にアクセスできてしまうのは不安が残る。子供には必要最低限のサイトだけアクセスできるようにするため、その方法をまとめる。

# 設定方法 (windows8など)

参考：https://www.fmworld.net/cs/azbyclub/qanavi/jsp/qacontents.jsp?PID=9609-8177

1.「Web コンテンツの制限」、または「Web フィルター」が表示されます。
2.「XXXさんは許可された、Web サイトのみ使用できます」をクリックします。
3.「Web コンテンツの制限レベルの設定」、または「Web フィルターレベルの設定」をクリックします。
4. 「Web の制限」が表示されます。「許可一覧のみ」をクリックします。
5. 「許可一覧を変更するには、ここをクリックしてください。」をクリックします。
6. 「Web ページの許可または禁止」が表示されます。アクセスを許可したいホームページのアドレス（URL）を入力します。



    scratch.mit.edu
    *.scratch.mit.edu
    *.media.tumblr.com
    js-agent.newrelic.com
    bam.nr-data.net
    app.getsentry.com
    *.adobe.com

# 補足
google chromeのdevelopment toolを調べると
他にも,

     *.google.com

と通信しているように見えるが、ここは子供が見える範囲が広がりそうなので
あえて追加していない。それでも、動作上は問題ないように見える。
ファイルの各行にコールバック関数を適用する汎用関数

業務のシェルスクリプトで、ファイルの各行についてほげほげ～な処理をすることはよくあると思いますが、`std::for_each()`的な「リスト型の各要素についてコールバック関数をマッピングする」メソッドのファイル版があったらな～と思い、実装してみました。

##for_each_line関数の仕様
第1引数で指定したファイルの各行について、第2引数に指定したコールバック関数を適用します。その際、事前にコメント行やコメント部分、空行は事前に除外することで、コールバック関数には有効行のみが渡るようにしました。

また、ファイルの読み込みには、ファイルが巨大サイズの場合を考慮して`while read`を使用しています。

```bash:libsample.sh
#!/bin/bash

#
# Apply callbackfn to each line in file
#
for_each_line ()
{
    local in_file="$1"
    local callbackfn="$2"

    while read line; do
        local line="${line//#*/}"
        [[ -z "${line}" ]] && continue
        "${callbackfn}" "${line}"
    done <"${in_file}"
}
```

##for_each_line関数の使い方

すごくすっきりした！コールバック万歳。

1行の`split`についてはプロセス`fork`を抑止するために、`awk`や`cut`などの外部コマンドは使わないようにしています。

```bash:sample.sh
#!/bin/bash
set -u

. ./lib/libsample.sh

#
# Callback function applied to each line in file
#
callbackfn()
{
    set -f; set -- $1; set +f
    [[ $# -ne 3 ]] && return
    echo 1=$1 2=$2 3=$3
}

for_each_line "./sample.lst" "callbackfn"
```

```shell-session:実行結果
$ cat ./sample.lst
#
# sample.lst
#

100 aaa xxx
200 bbb #yyy
300 ccc zzz

$ ./sample.sh
1=100 2=aaa 3=xxx
1=300 2=ccc 3=zz
```
##コマンドの実行結果を読み込む版

ファイルを読み込むのではなく、コマンドラインの標準出力結果を一時ファイルを媒介せずに各行処理したい場合の汎用関数です。第1引数には、結果にコールバック関数を適用したいコマンドラインを文字列リテラルで指定します。

```bash:libsample.sh
#
# Apply callbackfn to each line in command execution result
#
for_each_line_cmdresult()
{
    local cmdline="$1"
    local callbackfn="$2"

    while read line; do
        [[ -z "${line}" ]] && continue
        "${callbackfn}" "${line}"
    done < <(${cmdline})
}
```

```bash:sample.sh
callbackfn()
{
    #TODO : 1行についての処理をここに書く
}

# カレント配下の全ファイルについて、コールバック関数を適用する
for_each_line_cmdresult "find ./ -type f" "callbackfn"
```

##ワンシェルで完結させるコードスニペット
使い捨てのスクリプトを書くのに、いちいち外部モジュールを作るのは逆に手間なので、ワンスクリプトで記述するコードも貼りつけておきます。`find`や`awk`の実行結果からの読み込みは、**Process Substitution**（プロセス置換）という機能を使っています。

```bash:sample.sh
#!/bin/bash

#awkでファイルのコメント部分と空行を削除した結果を1行ずつ処理
    while read line; do
        set -f; set -- ${line}; set +f
        [[ $# -ne 3 ]] && continue
        echo "1=$1 2=$2 3=$3"
    done < \
<(cat ./sample.lst | awk '! /^[ \t]*(#|$)/ {sub("#.*$",""); print}')
```

```bash:sample.sh
#!/bin/bash

#カレント配下にあるすべてのファイルパスについて処理
while read line; do
    #TODO : 1行についての処理をここに書く
done < <(find ./ -type f)
```

##参考サイト様
ありがとうございます。

[シェルスクリプトの中で1行ずつ変数を分割する際には、cutとかawkとか余計なプロセスを起動せずsetを使って分割した方が効率的（双六工場日誌）](http://sechiro.hatenablog.com/entry/2015/01/25/%E3%82%B7%E3%82%A7%E3%83%AB%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%81%AE%E4%B8%AD%E3%81%A7%E5%A4%89%E6%95%B0%E3%82%92%E5%88%86%E5%89%B2%E3%81%99%E3%82%8B%E9%9A%9B%E3%81%AB%E3%81%AF%E3%80%81cut)

[巨大なファイルをシェルスクリプトで読む時](http://qiita.com/arc279/items/9ca18f5c76ed365265c6)（@arc279さん）

[パイプ出力を現在のシェル上のwhileに喰わせる上手いやり方](http://qiita.com/kawaz/items/6fd4cd86ca98af644a05)（@kawazさん）
ESP8266 (ESP-WROOM-02) でサーボを制御する

## 概要
ESP8266 (以下 WROOM02) でサーボを制御する
![スクリーンショット 2016-01-10 17.07.32.png](https://qiita-image-store.s3.amazonaws.com/0/69410/2c65df69-0cc7-7b43-ba62-9179ac618b92.png)


## はじめに

今回使ったサーボは、SG90 というやつ。秋月で 400円。
http://akizukidenshi.com/catalog/g/gM-08761/

|キー|値|
|----|----|
|PWMサイクル|20 ミリsec|
|制御パルス|0.5～2.4 ミリsec|
|制御角|±約 90 °（180 °）|
|配線|茶:GND 赤:電源[+] 橙:制御信号<br>[JRタイプ]|
|トルク|1.8 kgf・cm|
|動作速度|0.1秒 / 60度|
|動作電圧|4.8V（～5V）|
|温度範囲|0 ℃ ～ 55 ℃|
|外形寸法|22.2 x 11.8 x 31 mm|
|重量|9 g|

4.8 V 駆動ですが、WROOM02 用の 3.3 V で、取り敢えず、動作しました。
(電源 5 V 、制御信号 3.3 V では、動作しません。)

データシートはこちら
http://akizukidenshi.com/download/ds/towerpro/SG90_a.pdf


![スクリーンショット 2016-01-10 17.07.15.png](https://qiita-image-store.s3.amazonaws.com/0/69410/c3f491dd-3807-37fa-187c-96c57f9f330e.png)

そのものズバリの「Servo」ライブラリがありますが、挙動を理解したいので、今回は自前で作成してみます。

データシートによると、20 msec 周期 (50 Hz) で制御パルス(PWM)を送ればよいらしい。
ここは、まさに Ticker の出番ですよ。
<a href="http://qiita.com/exabugs/items/34aab51eb2d35207629b" target="_blank">「ESP8266 (ESP-WROOM-02) の便利ライブラリまとめ (Ticker編)」</a>


## スケッチ
```cpp
// SG90
// http://akizukidenshi.com/download/ds/towerpro/SG90_a.pdf
// 
// Position "0" (  1.45 ms pulse) is middle,
//         "90" ( - 2.4 ms pulse) is all the way to the right,
//        "-90" ( - 0.5 ms pulse) is all the way left.

#include <Ticker.h>

const int deg000 =  500; // micro sec.
const int deg180 = 2400; // micro sec.

int microSec = deg000;

#define PWM_OUT 4

Ticker serv1;

void setup() {
  Serial.begin(115200);
  Serial.println();

  pinMode(PWM_OUT, OUTPUT);

  // 20 msec
  serv1.attach_ms(20, pwm);
}

void pwm() {
  digitalWrite(PWM_OUT, HIGH);
  delayMicroseconds(microSec);
  digitalWrite(PWM_OUT, LOW);
}

void loop() {
  if (0 < Serial.available()) {
    delay(10);
    int deg = serialReadAsInt();
    if (0 <= deg && deg <= 180) {
      microSec = deg000 + deg / 180.0 * (deg180 - deg000);
    }

    Serial.print(deg);
    Serial.print(" : ");
    Serial.println(microSec);
  }
}

int serialReadAsInt() {
  char c[9] = "0";
  for (int i = 0; i < 8; i++) {
    c[i] = Serial.read();
    if (c[i] == '\0') {
      break;
    }
  }
  return atoi( c );
}
```

## 動作確認

ツール - シリアルモニタ を開いて、0 - 180 の角度を送信します。
サーボがジリジリいってますが、いい感じに制御できるようです。

![スクリーンショット_2016-01-10_17_16_51.png](https://qiita-image-store.s3.amazonaws.com/0/69410/8373e9fb-db7d-8029-17ae-65da9f30c649.png)

## まとめ
 - WROOM02 でサーボを制御しました。
 - Ticker のおかげで、随分と簡単に、安定した PWM が生成できます。
 - 逆に loop( ) で PWM を生成した場合だと、他の処理に影響されて PWM (サーボの角度) が安定しないです。Ticker バンザイ !!
 - 2個以上つなげる場合は、PWM をシリアル化するのかな？？？ <br>シリアル化 して 20 msec を死守するためには、1ピンで 20 / 2.4 = 8.xx 最大 8 個まで？？？
 - ちゃんと 5 V で駆動させたいですが、トランジスタ (ソースドライバ) を使えばいいかな？？？

## 参考資料
 - <a href="http://kousaku-kousaku.blogspot.jp/2008/06/arduino.html" target="_blank">「建築発明工作ゼミ2008: Arduino サーボ制御」<a>
 - <a href="http://marupeke296.com/EL_Ard_No9_ServoMotor.html" target="_blank">「Arduino編 その９ Arduinoでサーボモータをキュイキュイ動かす！」</a>
ApacheのMPM(マルチプロセッシングモジュールの比較)

##prefork
コネクションに対しててlistenして、子プロセスを起動する
メモリの消費が一定
##event
worker MPMを基本に設計されている
スレッドで動く

zabbixでグラフを見ていると、その動作の違いがより鮮明になります

1/7にeventかれpreforkに変更しました
メモリの使用率が安定しました
![スクリーンショット 2016-01-10 16.14.40.png](https://qiita-image-store.s3.amazonaws.com/0/39073/39c4589d-2a00-5b17-aa6d-88ab52d0a86e.png "スクリーンショット 2016-01-10 16.14.40.png")

プロセス数が増えました。preforkで動くようになったからです
![スクリーンショット 2016-01-10 16.14.14.png](https://qiita-image-store.s3.amazonaws.com/0/39073/345c2c65-47d5-a1fc-7d53-9cc15e87f1c6.png "スクリーンショット 2016-01-10 16.14.14.png")

追記。
すみません、動作を勘違いしていました。
当初、preforkとeventを逆に書いていました。
Qiita / 考察 > タグの整理をした > ぱっと思いつくタグはフォロー解除

Qiitaのタグを80くらいフォローしていたが、整理をして50程度にした。

- 削除したタグは Linux, bash, shell, qiitaなどのぱっと思いつくタグ
- 残したタグは、ぱっと思いつかないタグ

##削除理由

現在のQiitaのシステムではタグ検索機能がない。
投稿時にタグ入力テキストボックスにて前方一致検索でタグのリストが得られるのみとなっている。

記事を検索するときに「ぱっと思いつかないタグ」で検索しようとした時、どういうタグがあったか探すのに苦労する。
(追記: 2017/03/03。 @RyogaBarbie さんによる[Cusqsというサービス](https://cusqs.com)内にて「タグで条件を絞る」を選択すると、タグの一覧が表示される）。



一方で「ぱっと思いつくタグ」は当然すぐに検索できる。

上記の理由から、「ぱっと思いつかないタグ」だけのフォローに変更した。

## 本当に望んでいること

本当はQiitaのタグフォローにレベル(優先度)がついていて、タグリストでそのレベルに合わせて表示を絞り込めたらいいと思っている。しかしそういう機能を中途半端に実装するとユーザにとっては使いにくくなるかもしれない。

stackoverflowのタグ検索(部分一致検索)は使いやすいと思っている。タグ検索によりいちいちタグを覚えておく必要がない。タグレベルよりはタグ検索の実装を要望する。

ユーザが記憶にたよらないように使えるシステムは僕自身見習うことが多いと思う。
Azureのストレージアカウントがエラーで削除できなかった



>ストレージ アカウント 'xxxxxxxxxxxxxxx' を削除できませんでした。ストレージアカウント 'xxxxxxxxxxxxxxx' を削除できません: 'ストレージ カウント xxxxxxxxxxxxxxx に、アクティブなイメージやディスクがあります (例: )。このストレージ アカウントを削除する前に、これらのイメージやディスクを削除してください。'。

仮想マシンもすべて削除しているのに出て困っていたが
以下のURLで解決した。

[Windows Azureのストレージアカウントが削除できない場合の対処法](http://yomon.hatenablog.com/entry/2013/05/15/082706)
Mac+XcodeでEigenを使う

EigenはC++で使える線形代数ライブラリです。


# Xcodeを使う

`usr/local/include` あたりにHeader Search Pathsを設定

<img width="760" alt="Screen Shot 2016-01-10 at 3.58.50 PM.png" src="https://qiita-image-store.s3.amazonaws.com/0/30440/22f66940-6447-87ca-92bb-1b6ea12c41fc.png">


ダウンロードしたブツのEigen以下を設置

<img width="1116" alt="Screen Shot 2016-01-10 at 4.06.26 PM.png" src="https://qiita-image-store.s3.amazonaws.com/0/30440/76018521-d122-e380-fcb4-e7002e2c154e.png">

```cpp
#include <iostream>

#include <Eigen/Core>
#include <Eigen/Geometry>


int main() {
    using namespace Eigen;
    
    Matrix3d A, B;
    
    A << 3.0, 6.0, 3.0,
    2.0, 1.0, 2.0,
    1.0, 2.0, 1.0;
    int k = 0;
    
    B << 1.0, 0.0, 0.0,
    -A(k+1,k)/A(k,k), 1.0, 0.0,
    -A(k+2,k)/A(k,k), 0.0, 1.0;
    
    
    std::cout << "m\n" << B * A << std::endl;
}
```
セピア調シェーダ作ってみた

UnityのShaderLabの勉強のため、セピア調シェーダ作ってみました。

![noeffect.png](https://qiita-image-store.s3.amazonaws.com/0/108809/2ef0e6f0-dd1a-bfb4-a46f-4b46aeb64357.png)

シェーダを適用すると

![effect.png](https://qiita-image-store.s3.amazonaws.com/0/108809/16947618-11b3-7b24-3023-3b0dfee00b31.png)

こんな感じに。以下シェーダです。

```:SepiaVF.shader
Shader "Custom/SepiaVF"{
	Properties{
		_MainTex("Main", 2D) = "black"{}
	}

	SubShader{
		Lighting Off

		Pass{
			CGPROGRAM
			#pragma vertex vert_img
			#pragma fragment frag
			#include "UnityCG.cginc"

			sampler2D _MainTex;

			float4 frag(v2f_img i) :COLOR{
				float4 tex = tex2D(_MainTex, i.uv);
				float4 c;
				c.r = tex.r*0.393 + tex.g*0.769 + tex.b*0.189;
				c.g = tex.r*0.349 + tex.g*0.686 + tex.b*0.168;
				c.b = tex.r*0.272 + tex.g*0.534 + tex.b*0.131;
				c.a = tex.a;
				return c;
			}
			ENDCG
		}
	}
}

```

頂点シェーダはUnityCG.cgincで定義済みのvert_imgを流用しています。vert_imgでは(おそらく)特殊な処理はなく、各頂点の座標変換を行い、v2f_img構造体で定義されている各変数に適切な値をセットするような処理を行っています。

フラグメントシェーダは自前で実装しています。フラグメントシェーダ内で取得したピクセル色を加工し、その色情報を返すだけのシンプルなものです。
Intel Edisonでホームサーバ構築 (1)  序論

Intel Edisonの発売後1年が経ちましたが、買ったものの眠らせてしまっている方は多いのではないでしょうか。

[Edison Lab](http://edison-lab.jp)のShowcase等で紹介されているような素晴らしい事例を思いついてすぐに実装できればいいのですが、その域に達するのがなかなか難しい(私みたいな)方に向けて、簡単な使い方の組み合わせで常時Edisonを使いたくなるアイディアを紹介できればと思います。

本稿では、以下を紹介したいと思います。(追加中)

- [家庭用100V電源の制御](http://qiita.com/hishi/items/b6c76a6cda8f7a825559)：リモコンがないもの(間接照明等)の電源オンオフをしたい、等
- ミュージックサーバ：USBスピーカーを繋ぎ、Bluetoothスピーカーとして、あるいはEdison単独でインターネットラジオとして使う
- 上記をスマホ等のブラウザからコントロール

自分自身が電子回路を組めない人間なので、ありものを調達して組み合わせて実現、というスタンスです。ただし、ちょっとした電子工作が必要になる箇所はあります。

Raspberry Piのほうがこの手の記事が豊富ですが、あえてここはIntel Edisonでチャレンジしてみます。

# 構成案

ハード的に重要な要素が2点あります。一つ目はUSBをHOSTモードで使用すること(USBハブがあるとよいです)と、二つ目はこれを行おうとするとDCアダプタから電源供給を行わないといけない場合があるです。この2点を踏まえ、どのようなEdison開発ボードを選定すべきか、以下に示します。


# Edison開発ボードの選定

手持ちに3種類あるので、簡単に紹介したいと思います。

## インテル® Edison キット For Arduino (以下Arduinoボード)

据え置きで使うには必要なものが一番少なくて済みます。USBホスト機能が使えるUSB端子がありますが、これを使うとUSB電源供給が物理的にできなくなりますので、別途DCアダプタ用のジャック(J1)から電源供給が必要です。7-15V、1A以上、内径2.1のものが必要となります。
DCアダプタは調達するも良いですし、意外と眠っている機器のアダプタが流用できてしまったりします。自分はバッファローの無線LANルーターWZR-HP-AG300Hの電源アダプタがそのまま使えました。
なお、J2端子からリチウムイオンバッテリーで電源供給を行うと、本ボードも後述のBreakoutボードもUSBホストモードは動作しません。

いざ運用するとなると、サイズの大きさが仇となり基板的なものが見え見えになります。リビングに溶け込ませてさりげなさ感を出すためには、ケースに覆う等の工夫が必要です。

![edison_arduino.png](https://qiita-image-store.s3.amazonaws.com/0/100741/7bff661a-ecfe-a75d-2623-526a95230979.png)



## インテル® Edison Breakout ボードキット (以下Breakoutボード)

話の構造はArduinoボードと同じで、電源供給にも用いることができるUSB端子J16をUSBホストとして使います。そのためにはAndroidスマートフォン等で使用できるmicroUSBのOTGケーブルが別途必要になります。

また、USBホストモードとして動作させるには、J21かJ22を経由してのDC電源供給が必要があります。自分はJ21に刺せる2.5mmコネクタとArduinoボードと同じ内径2.1のメスジャックを組み合わせて電源ケーブルを作成しました。
(後日談：千石通称の2Fに[そのもの](http://www.sengoku.co.jp/mod/sgk_cart/detail.php?code=EEHD-0B65#)が売っていました。。。コネクタ幅が少し狭いですが、使えます)

程よい小ささなので、あまり目立ちません。自分はBreakoutボードで運用しています。

![Breakout_Board.png](https://qiita-image-store.s3.amazonaws.com/0/100741/09f3cf91-660d-a358-788b-50326da5fff0.png)


## Henry基板

こちらは上記2ボードと異なり、電源供給とシリアルコンソールの両方が使えるmicroUSBコネクタがあるのと、USBホスト機能専用のUSBコネクタ(A端子)があります。したがって、DCアダプタを用意せずにそのまま使えます。

ただし、この基板はFriskケースに収まるその小ささと、加速度センサーを搭載していることにあるので、動くものに対して使うことに真価があります。USB電源でUSBホスト機能が使えることもポイントです。据え置きで使うにはもったいないです。

![edison_henry.png](https://qiita-image-store.s3.amazonaws.com/0/100741/45099b7e-0835-c169-c207-ee0e5d6b4f5c.png)


---

次のページからいよいよ詳細に入ります。

[家庭用100V電源の制御](http://qiita.com/hishi/items/b6c76a6cda8f7a825559)
(メモ) plink で aws ec2 のインスタンスにアクセスする

# Symptom

```shell-session
plink.exe -ssh -i ~/.ssh/key-pair.ppk ubuntu@192.168.11.11
```

# 鍵の作り方

鍵は、 PuTTYGen で .pem ファイルから privatekey の .ppk ファイルを作成する。
詳細は、下の AWS ドキュメントに書いてある。

# ソース

より詳細には: http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/putty.html
秋月電子の「Ｗｉ－Ｆｉモジュール　ＥＳＰ－ＷＲＯＯＭ－０２　ＤＩＰ化キット」を使った開発環境の構築

# まとめ

* Arduino IDEから、秋月電子のESP-WROOM-02へスケッチが書き込めるところまでの動作確認を行いました。
* ポイントは、モード設定用のピンを正しく接続することです。
 * GPIO15, GPIO0, GPIO2
     * UART Download Mode（スケッチの書込み） = Low - Low - High
     * Flash Boot Mode（スケッチの実行）    = Low - High - ~~Low~~High

# 事前準備

## 使用した機材

* PC
 * DELL Vostro270s Corei5 2.9GHz
 * Windows10 Home 64bit
* USBシリアルコンバータ（400円）
 * [USB2.0 TO TTL 6ピン シリアル·コンバータ UART モジュール CP2102 STC 6ピンケーブル](http://www.amazon.co.jp/dp/B00HLUZYXA)
* ACアダプタ（3.3V 2A）とDCジャック
 * ACアダプタは数年前に若松通商で買った部品キットに含まれていたものです。
     * [すぐにつながる!Ethernetマイコン・モジュール](http://www.cqpub.co.jp/hanbai/books/48/48281.htm)
     * [部品セット表](http://www.wakamatsu-net.com/cgibin/biz/pageshousai.cgi?code=38230006&cate=3823)

## 今回購入したもの

* [Ｗｉ－Ｆｉモジュール　ＥＳＰ－ＷＲＯＯＭ－０２　ＤＩＰ化キット](http://akizukidenshi.com/catalog/g/gK-09758/)
 * ~~600円->勘違い~~ 650円。店頭で2個買いました。
* [ＢＭＥ２８０使用　温湿度・気圧センサモジュールキット](http://akizukidenshi.com/catalog/g/gK-09421/)
 * まだ使いません(^^;

# 環境構築

## ソフトウェア
### Arduino IDEのアップデート
* これまで使用してきたバージョンが1.6.4でしたので最新版にアップデートしました。（最新版=1.6.7）

### USBシリアルドライバのアップデート
* Windows7で使用できていたドライバはWindows10では使用できませんでした。
* Windows10用ドライバはここからダウンロードしました。（※ファイル名はWin10_Drive.zipです）
     * [Is or will Usb to Uart CP210X bridge be compatable with windows](http://community.silabs.com/t5/Interface/Is-or-will-Usb-to-Uart-CP210X-bridge-be-compatable-with-windows/m-p/147075#M2251)

### ESP8266ボードのインストール
*  [技適済み格安高性能Wi-FiモジュールESP8266をArduinoIDEを使ってIoT開発する為の環境準備を10分でやる方法](http://qiita.com/azusa9/items/264165005aefaa3e8d7d)の通りにインストールします。
 * ダウンロードに5分くらいかかりました。

### スケッチ

* サンプルのままです。GPIOは16番を使います。

```arduino:blink-test.ino
#define LED_PIN 16

void setup() {
  // put your setup code here, to run once:

  pinMode(LED_PIN, OUTPUT);

}

void loop() {
  // put your main code here, to run repeatedly:
  digitalWrite(LED_PIN, HIGH);
  delay(1000);
  digitalWrite(LED_PIN, LOW);
  delay(1000);
}
```

### ボードと書込装置の選択
* Arduino IDEの「ツール:マイコンボード」メニューから、「Generic ESP8266 Module」を選択します。
 * Arduino IDEは、ボードや書込装置の設定内容をスケッチ毎に保持しないようです。

![fig2.png](https://qiita-image-store.s3.amazonaws.com/0/63696/98f1d341-20f2-7d6c-5700-3446e966f4ea.png)


## ハードウェア

* 下図のようにブレッドボードに組み立てました。
 * FritzingにESP-WROOM-02のパーツが無かったので、18pinのDIP ICで表現しています。

![1st_ブレッドボード.png](https://qiita-image-store.s3.amazonaws.com/0/63696/cc4aabb9-1d81-2f4c-8e19-b25bcfe46acb.png)

* 実際に組み立てた様子は下の写真のようになります。
 * ジャンパの色は上記チャートとは違います。（適当です・・・）

![IMG_4335.JPG](https://qiita-image-store.s3.amazonaws.com/0/63696/02ff140b-3f15-548c-ae34-2d08b3e4970b.jpeg)

# 動作確認

0. いったん電源を落とします（DCプラグを外します）
1. IO0をGNDに落とします（スイッチが欲しかったですが、ジャンパを差し替えて対応します）
2. 電源を入れます（DCプラグを差し込みます）
3. （この回路の場合は、動作確認用LED（赤）が点灯します）
3. IDEから「マイコンボードに書き込む」ボタンを押します
4. この環境の場合、30秒位経過すると、flush completeと表示され、LED（赤）が点滅を始めます
5. 電源を落とします（DCプラグを外します）
6. IO0をVccに接続します（ジャンパを差し替えます）
7. 電源を入れます（DCプラグを差し込みます）
8. LED（赤）が点滅を始めます（スケッチが起動します）

# 参考

以下の記事が分かりやすかったです。

* [技適済み格安高性能Wi-FiモジュールESP8266をArduinoIDEを使ってIoT開発する為の環境準備を10分でやる方法](http://qiita.com/azusa9/items/264165005aefaa3e8d7d)
* [技適済みWi-Fiモジュール「ESP8266」で始めるIoT入門（ブレイクアウトボード実装編）](https://tech-blog.cerevo.com/archives/859/)

# これからやりたいこと

[ＢＭＥ２８０使用　温湿度・気圧センサモジュールキット](http://akizukidenshi.com/catalog/g/gK-09421/)をつなぐ
Sublime Text / 正規表現> get*String()という形式の関数を探す > "get.*String.*\("で検索

```txt:動作確認
Sublime Text2 on Window 7 pro
```

自分のコードで get*String()という形式の関数を検索したくなった。
例としてgetErrorLevelString(), getTitleString(), getDataString()など。

Regular Expressionをオンにして、検索キーワードとしては「`get.*String`」のようにすれば検索できると考えた。

参考 http://www.mnet.ne.jp/~nakama/regexp3.html

## 落とし穴

確かに検索できたが、以下の文字列まで検索されてしまった。

```
static int getPrecision(String text);
```

正規表現としては確かにあってはいるが、欲しい情報ではない。

## try2 > 改良版

以下のキーワードでの検索で精度が上がった気がする。

「`get.*String.*\(`」
Friends で友達との関係を可視化する

友達との関係を track してくれる [friends](https://github.com/JacobEvelyn/friends) という Gem がおもしろかったので、ご紹介。
全て Ruby で書かれているが、CLI が用意されていてい コマンドラインから操作できる。

# 使い方
まず友達を登録

```
$ friends add friend 'Yukihiro Matsumoto'
$ friends add friend 'Larry Wall'
$ friends add friend 'Brendan Eich'
```

友達とやった事を記録

```
$ friends add activity 'Yukihiro と Larry とご飯'
Activity added: "2016-01-10: Yukihiro Matsumoto と Larry Wall とご飯"

$ friends add activity '2016-01-08: Yukihiro とプログラミング'
Activity added: "2016-01-08: Yukihiro Matsumoto とプログラミング"
```

名前を認識して、Activity の記録をどんどん追加してくれる。
追加したくない名前にはバックスラッシュでエスケープする。

```
$ friends add activity '2016-01-08: Yukihiro と \Brendan の話し'
Activity added: "2016-01-08: Yukihiro Matsumoto と Brendan の話し"
```

ニックネームもつけれる

```
$ friends add nickname 'Yukihiro Matsumoto' 'Matz'
Nickname added: "Yukihiro Matsumoto (a.k.a. Matz)"

$ friends add activity '2016-01-08: Matz とお茶'
Activity added: "2016-01-08: Yukihiro Matsumoto とお茶"
```

そして、いろいろとデータを追加したら、、、

アクティビティの一覧を見たり、

```
$ friends list activities
2016-01-10: Yukihiro Matsumoto と Larry Wall とご飯
2016-01-08: Yukihiro Matsumoto と Brendan の話し
2016-01-08: Yukihiro Matsumoto とお茶
2016-01-08: Yukihiro Matsumoto とプログラミング

$ friends list activities --with 'Larry'
2016-01-10: Yukihiro Matsumoto と Larry Wall とご飯
```

仲の良い友達ランキングを出したり、

```
$ friends list favorites
Your favorite friends:
1. Yukihiro Matsumoto (4 activities)
2. Larry Wall         (1)
3. Brendan Eich       (0)
```

どれだけ遊んだか可視化してくれて、

```
$ friends graph 'Yukihiro'
Sep 2016 |█
Oct 2016 |█████
Nov 2016 |██
Dec 2016 |██
```

友達の提案もしてくれる。

```
$ friends suggest
Distant friend: Brendan Eich
Moderate friend: Larry Wall
Close friend: Yukihiro Matsumoto
```


これで誰と遊べば良いか一目瞭然！
んー便利だ。たぶん。
今年(?)の抱負

　なぜ, "今年(?)"とタイトルに付けたのかというと、主な内容が今までの生活ではなく、新人プログラマとしての抱負になるからです.
　生活も、どのくらいの知識が求められているか(身につけられるか)分からないので甘い、もしくは厳しいんでないの？、と思われるかもしれません.そのときは, Twitterなどで言っていただければ、幸いです. 新生活がはじまって厳しいと思ったら, 変更するかもしれません.

 1月の間は毎日英語を1時間くらいやりながら(最近はHarry Potterの本を流し読みしてる)、修論を書くだけなので、特に言うことはありません.
 2月は同じように英語をやりながら、第二の論文を書くつもりです.
 3月からはこんな感じにしたいです.

* プログラミング関連:
  * 毎日勉強時間を2時間はとる(最低30分でも勉強する).
  * Ruby:
    今のPythonくらいには使えるようになりたい.
  * Web 関連:
    なんかWeb関連の資格とる(Web検定Webプログラマー(Webプログラミング)か?)
  * 自分の:
    なんか大きいの一つ作る
* 数学関連:
  仕事はじまっても, 土日はそれぞれ最低4時間(もしくは合計8時間)とりたい.
RailsでPostgresSQLを使った時のFATAL: no pg_hba.conf entryエラーの対処法

# 概要
PostgresSQLとRailsの組み合わせでサーバ構築をしていた時のトラブル。
あまり日本語の対策が無かったので、残しておきます。

# 事象
- 開発環境 : MacOS X (Version 10.9.5)
- ruby : 2.2.2p95
- rails :  4.1.7
- Postgres :  9.4.1.1

PostgresSQLの起動後、Railsサーバを起動してアクセスすると以下のエラーメッセージが表示されました。

``` sh:postgres-server.log 
PG::ConnectionBad (FATAL:  no pg_hba.conf entry for host "fe80::1%lo0", user "[DBユーザ名]", database "[DB名]", SSL off
):
```

# 解決策
結果として、[StackOverflowのQ&A](http://stackoverflow.com/questions/23348774/fatal-no-pg-hba-conf-entry-for-host-fe801lo0)にて解決策が書いてあったのですが、
pg_hba.confの中に以下のフォーマットを追記し、Rails, PostgresSQLサーバを再起動させることで解決しました。

``` sh:pg_hba.conf
host    all             all             fe80::1%lo0/128         trust
```

# 根本原因は？
この事象が起こる前は、特に連携の部分に問題は無く、**MacOSを再起動（セーフブートで起動）**させたことでこの連携エラーが出た様でしたが、それが直接的な要因となっているのかはわかりません。
根本原因の詳細がわかる方がいらっしゃれば、コメントして頂けると嬉しいです。
Node.jsでHTTP GETしてJSONパースするメモ


あけましておめでとうございます。 

`Node.js HTTP GET`なんか検索したら、自分が学生の時に書いていた記事がヒットして、間違い見つけて修正したかったのでES2015な感じにしつつなメモ。

> [EXPRESS(NODE.JS)でHTTP.GETでJSONを取得してパースする](http://offsidenow.phpapps.jp/archives/1679) 
↑すでにログイン情報忘れてて修正できない

## Node.jsのバージョン

```bash
$ node -v
v5.3.0
```

## Qiitaの記事のjsonを取得してパースします。

@kazuhikoyamashitaの[pyenvを利用してPython環境を整備する方法](http://qiita.com/kazuhikoyamashita/items/273692ccbdf8c0950a71)をたまたまタブで開いていたので使ってみます。

Qiitaは記事のURL+`.json`ってつけるとjsonを返してくれますね。
http://qiita.com/kazuhikoyamashita/items/273692ccbdf8c0950a71.json


```app.js
'use strict'

let http = require('http');
const URL = 'http://qiita.com/kazuhikoyamashita/items/273692ccbdf8c0950a71.json';

http.get(URL, (res) => {
  let body = '';
  res.setEncoding('utf8');

  res.on('data', (chunk) => {
      body += chunk;
  });

  res.on('end', (res) => {
      res = JSON.parse(body);
      console.log(res);
  });
}).on('error', (e) => {
  console.log(e.message); //エラー時
});
```

## 実行

```
$ node app.js
{ id: 352559,
  user_id: 41823,
  title: 'pyenvを利用してPython環境を整備する方法',
  raw_body: 'LIGアドベントカレンダー15日目です！こんにちは、Jack (@kazuhikoyamashita) です。\n\n最近の趣味はPythonで行列計算をする事です。\n今回は、pyenvを利用してPython環境を構築する
  ・
  ・
  (省略)
  ・
  ・
  uuid: '273692ccbdf8c0950a71',
  secret: false,
  lang: 0,
  via: 0,
  tweet: false,
  gist: false,
  gist_url: null,
  gist_id: null,
  banned: false,
  created_at: '2015-12-15T00:57:02.000+09:00',
  updated_at: '2015-12-15T06:01:51.000+09:00',
  flags: 0 }
```

こんな感じでJSONを取得することができました。
ライブラリ依存も無いし最低限のスニペットな感じですね。
Ubuntu14.04でWiFiが不安定だった

#やったこと

0. wicdをつかう
1. NetworkManagerの設定変更
2. NetworkManager-noscanを使ってみる（結局ビルドできず）

でも全然ダメ。

#本当の問題
rtl8723be（WiFiデバイス）に問題があった。

#解決方法
http://js.prog.xyz/2016/01/04/wifi-is-instable/

問題がどこにあるか本質をつかむのむずかった。
もうすこしハードについても勉強しよう。
phpを勉強するにあたりエディタをAtomに変えてみる

コテコテのマークアップエンジニアなので、いつもDreamWeaverでコーディングしてましたが、このたびphpのお勉強を始めるにあたり、DreamWeaverでは役不足であることが判明(今更!)したので、ちょっとエディタを変えてみることにしました。
#エディタを変えようと思ったきっかけ
DreamWeaver(以下、DW)はリアルタイムでシンタックスエラーを見つけてくれるありがたい機能が搭載されているのですが、以下のコードでエラーが出た。

`const DISCOUNT = 0.9;`

どうやら、DreamWeaverのエラーチェック機能はphp5.2で止まってるという噂。
(参考記事：[PHPの開発環境を構築する（その１）：「Pleiades All in One」のインストール](http://wsf.mot.or.jp/yujakudo/develop/php-dev/php-develop-env1/))
php超初心者にとって、正体不明のエラーを吐かれることほど恐ろしくめんどくさいことは無い……。
コレは早急に対応が必要！と、重い腰を上げた訳です。
#エディタ候補
- [Sublime Text 3](http://www.sublimetext.com/3)
- [Atom](https://atom.io/)

Mac対応で、とりあえず無料で触れるもので検討。
Sublime Text 3の方が軽そうでよかったんですが、日本語の対応が微妙的な記事をどこかで見たので、取り急ぎAtomに。
#Atomをインストールした直後にやったこと
パッケージのインストールをしまくった

以下、インストールしたパッケージ
- [japanese-menu](https://atom.io/packages/japanese-menu) (メニューを日本語化)
- [tag](https://atom.io/packages/tag) (「`</`」って打ったら開始タグに対応した終了タグが自動で入力される)
- [linter](https://atom.io/packages/linter) (構文チェック)
- [linter-php](https://atom.io/packages/linter-php) ([linter](https://atom.io/packages/linter)のphpチェック用中身。コレが無いとphpの構文チェックできない)
- [linter-csslint](https://atom.io/packages/linter-csslint) ([linter](https://atom.io/packages/linter)のcssチェック用中身。コレが無いとcssの構文チェックできない)
- [project-manager](https://atom.io/packages/project-manager) (多分DWでいうところの「サイト管理」機能をいい感じにしてくれるはず。私の環境では現状ちゃんと動いてない)
#Atom導入の際にちょっと困ったこと
最大の目的であるlinter-phpが当初全く機能してくれなかった。
何が問題かさっぱりだったが、結果、何度かAtomを再起動することで動くようになった。
今回うちの環境がMacだったのでそれだけですんだかもなのですが、Windows環境だと、phpの在処を設定しないといけないらしいので要注意です。
(黒い画面で`where php`って打ったらphpの在処が表示されるのでそれを Packages > linter-phpのSetting画面内「PHP Executable Path」に入力すればOKっぽい。)

* * *

以上、Atom導入メモでした。
「よくわからないけどとりあえずやってみたい」という人に参考になれば！
uGUIで比率の違う端末での表情差分的な配置の備忘録

Unity 3.5.1p1で
uGUIのレイアウト機能を使って
iOSで表情差分的なUI配置をいい感じにしたかった備忘録です。
#こんな感じの表情差分を用意していて

![image](https://qiita-image-store.s3.amazonaws.com/0/96808/399b5ec6-ca23-0be7-126a-c53bb493cd5b.png)

uGUIの設定を失敗して、実機に持っていくと
こんな悲惨な感じになる。
![image](https://qiita-image-store.s3.amazonaws.com/0/96808/770f6497-9b72-d3b5-d34f-be526177f638.png)
違う、こうじゃない。

#Canvasの設定

iOSの場合、縦横比率が違う場合がある。
今回は余白（いわゆる黒帯）を上下につける自動配置にする設定。

まず、CanvasにCanvas Scalerをつける
Resolutionは480 320 にしてみた。
Expandモード
![image](https://qiita-image-store.s3.amazonaws.com/0/96808/2a4f7268-7522-5100-5a27-696dbf69dc2e.png)

#余白部分の設定

端末によってでてきてしまう余白部分はのBGは
stretchを縦横に設定
![image](https://qiita-image-store.s3.amazonaws.com/0/96808/804c57aa-2a23-2bf9-0574-2706e8caeb05.png)

#機種共通の表示部分の設定
どの端末でも触れる範囲は
縦横比率はそのままに、目一杯大きくなるように
Aspect Ratio Filterをつけて、
Fit in Parentにしておく
![image](https://qiita-image-store.s3.amazonaws.com/0/96808/47c1f31d-df3b-f16f-2810-e7c2a2d19a02.png)

#表情差分の配置
で、表情差分の配置は、
がんばって、手動で座標を合わせて、
それからAnchors（くさび形のもの）をその合わせた角になるようにした
![image](https://qiita-image-store.s3.amazonaws.com/0/96808/b995166c-0d24-8a51-8ca9-6fc7611fcae2.png)

たぶんこれで、どの比率、解像度の端末でも、良い感じに表示されるはず。

#結果

![image](https://qiita-image-store.s3.amazonaws.com/0/96808/c2d90520-dce0-42ea-4eee-e11415d2cb81.png)

まとめると
- 親にAspect Ratio FilterをつけてFit in Parentにし、Anchorsを配置した角に設定する。

UIをHorizontal Layoutとかで並べる以外に自由配置にしたいけど、機種別の配置で悩む時はこういうやり方もあるのかなと思った。

あってるか自信ないけど・・・
表示させるViewがすでにaddSubViewされているか調べる方法


## はじめに

自作アプリの改修をしていて，広告のViewのコードのところで
ん？と思ったので **Debug View Hierarchy** で見てみたところ
やっぱり二重に表示されていた。そのときの修正について備忘録。

画面上だとわからないけど，見事に 2 つ表示されている・・・
![00.png](https://qiita-image-store.s3.amazonaws.com/0/88266/7145e94a-d5cc-099f-c567-e5fb3a2121e3.png "00.png")


**Debug View Hierarchy** に関してはこちらをご覧ください。
[[Xcode]なぜ表示されない・・・ビルドしたアプリのViewの重なりをXcodeで確認する方法 - Qiita](http://qiita.com/MilanistaDev/items/adbf38d186e9727ea7dc)


## 原因と対策

### 原因
viewWillAppear と viewDidLoad で 広告の view を作成し，
表示するメソッドがそれぞれ呼ばれていた。つまり，2 つ分表示される。

### 対策
メソッドは両方から呼ばれてほしいので，どちらかでメソッドを呼ばない選択肢はない。よってすでに 広告 View が下地(addSubView される View) に addSubView されているかを判断して，されていれば何もしないようにした。

```Objective-C:Objective-C
// すでに表示されてない
if (![addSubViewするView isDescendantOfView:addSubViewされるView]) {
	// 広告View生成
} else {
	//Nope
}
```
Swift もおそらく同じ。

### 実際のコード(nend)

```Objective-C:広告表示関数
# pragma mark - View Ads method

// 広告表示関数
- (void)viewAds {

    // (2) NADView の作成
    if (![self.nadView isDescendantOfView:self.view]) {
        if ([Util isIPADPRO]) {
            self.nadView = [[NADView alloc] initWithFrame:CGRectMake(523, 0, 320, 50)];
        } else {
            self.nadView = [[NADView alloc] initWithFrame:CGRectMake(352, 0, 320, 50)];
        }
        // (3) ログ出力の指定
        [self.nadView setIsOutputLog:YES];
        // (4) set apiKey, spotId.(省略)
        [self.nadView setNendID:@"hoge" spotID:@"hoge"];
        [self.nadView setDelegate:self]; //(5)
        [self.nadView load]; //(6)
        [self.view addSubview:self.nadView];
    } else {
        NSLog(@"何もしない何もしない");
    }
}
```
【追記】
コメントでご指摘いただいた View の nil チェックの方がスマートな気がします。

実行してみる。これでよし。
![01.png](https://qiita-image-store.s3.amazonaws.com/0/88266/895a86a0-90fe-5c13-81d7-4e2709c87e6f.png "01.png")


Nend は手順通りにやれば比較的早く導入できる。ただ，日本語環境だといいけど英語環境だと表示する広告はないとエラー吐くのでため息になる。

iAd は導入自体は容易だけど表示されないときの処理書いたり色々面倒。



## おわりに
表示させる View がすでに addSubView されているか調べる方法について実際の例を交えて書いた。Storyboard の VC に広告用の UIView を貼った方が早い気もする。このアプリ 1 年くらい前の私がコード書いてるんだけどしっかりしてくださいよって言いながらいい感じにツッコミながら作業できている。少しは成長したのだと思いたい。
ご覧いただき，ありがとうございました。
golang coreutils 探しメモ


実装の参考にさせてもらおうと思ったらいくつかあった。
split に似たことをやろうと思ったんだけど、split の golang 実装は無さそう。

1. https://github.com/aisola/go-coreutils
1. https://github.com/EricLagergren/go-coreutils
1. https://github.com/sepeth/go-coreutils
1. https://github.com/uiri/coreutils
1. https://github.com/prabirshrestha/go-coreutils
1. https://github.com/iestynpryce/goreutils
1. https://github.com/takatoshiono/go-wc
1. https://github.com/necomeshi/gocoreutil

| | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| :----------------- | :-: | :-: | :-: | :-: | :-: | :-: | :-: | :-: |
| arch | o | | | | | | | |
| base64 | o | | | | | o | | |
| basename | o | | | | o | o | | o |
| cat | o | o | o | | | | | |
| chmod | | | | o | | | | |
| chown | | o | | o | | | | |
| cp | | | | o | | o | | |
| date | o | | | | | | | |
| dirname | o | | | | o | | | o |
| du | | | | o | | | | |
| echo | o | | | o | | o | | |
| env | o | o | | | | | | |
| expr | o | | | | | | | |
| exit | | | o | | | | | |
| factor | o | | | | | | | |
| false | o | o | o | | o | o | | |
| groups | o | | | | | | | |
| head | o | | o | | | o | | o |
| link | | | | o | | | | |
| ln | | | | o | | | | |
| logname | o | o | o | | o | | | |
| ls | o | | | | | | | |
| md5sum | o | | | | | | | o |
| mkdir | o | | | o | o | o | | |
| mv | o | | | o | | | | |
| nl | | | | | | o | | |
| pwd | o | o | o | | o | | | o |
| realpath | | | | | o | | | |
| rm | o | | | o | | | | |
| rmdir | o | | | o | | | | |
| seq | | | | | | o | | |
| sha1sum | o | | | | | | | |
| sha224sum | o | | | | | | | |
| sha256sum | o | | | | | | | |
| sha384sum | o | | | | | | | |
| sha512sum | o | | | | | | | |
| sleep | o | | o | o | o | | | |
| stat | o | | | | | | | |
| sync | o | o | | o | | | | |
| tac | | | | | | o | | |
| tail | o | | | | | o | | o |
| tee | o | | | | | o | | |
| touch | o | | | o | | | | |
| true | o | o | | | o | o | | |
| tsort | o | o | | | | | | |
| tty | | o | | | | | | |
| uname | o | o | | | | | | |
| uniq | | | | | | o | | |
| unlink | | | | o | | | | |
| uptime | o | o | o | | o | | | |
| uuidgen | | | | | o | | | |
| wc | o | o | | | | o | o | o |
| whoami | o | o | o | o | o | o | | |
| xxd | | o | | | | | | |
| yes | o | | | o | o | o | | |
Elixirでcall stackを表示する

スマートではないですが、以下のようにして表示できます。

```ex
#!/usr/bin/env elixir
defmodule Bar do
  def bar do
    try do raise "oops" rescue _ -> IO.inspect System.stacktrace end
  end
end

defmodule Foo do
  def foo do
    Bar.bar
  end
end

Foo.foo
```
```ex
[{Bar, :bar, 0, [file: 'test.exs', line: 4]},
 {:elixir_compiler, :dispatch_loaded, 6,
  [file: 'src/elixir_compiler.erl', line: 126]},
 {:elixir_lexical, :run, 3, [file: 'src/elixir_lexical.erl', line: 16]},
 {:elixir_compiler, :quoted, 3, [file: 'src/elixir_compiler.erl', line: 30]},
 {Code, :require_file, 2, [file: 'lib/code.ex', line: 363]},
 {Mix.Tasks.Run, :run, 1, [file: 'lib/mix/tasks/run.ex', line: 68]},
 {Mix.CLI, :run_task, 2, [file: 'lib/mix/cli.ex', line: 58]},
 {:elixir_compiler, :dispatch_loaded, 6,
  [file: 'src/elixir_compiler.erl', line: 126]}]
```

`Exception.format`を使うと、もうちょいきれいになります。

```ex
try do raise "oops" rescue e -> IO.puts Exception.format(:error, e) end

#** (RuntimeError) oops
#    test.exs:4: Bar.bar/0
#    (elixir) src/elixir_compiler.erl:126: :elixir_compiler.dispatch_loaded/6
#    (elixir) src/elixir_lexical.erl:16: :elixir_lexical.run/3
#    (elixir) src/elixir_compiler.erl:30: :elixir_compiler.quoted/3
#    (elixir) lib/code.ex:363: Code.require_file/2
#    (mix) lib/mix/tasks/run.ex:68: Mix.Tasks.Run.run/1
#    (mix) lib/mix/cli.ex:58: Mix.CLI.run_task/2
#    (elixir) src/elixir_compiler.erl:126: :elixir_compiler.dispatch_loaded/6

```

うーん、しかしほんとにこれしか方法ないんだろうか…

~~あとFoo.fooが表示されないのも謎。~~

```el
  def foo do
    Bar.bar
    IO.puts 100
  end
```
としたら、Foo.fooも表示された。

```
** (RuntimeError) oops
    test.exs:4: Bar.bar/0
    test.exs:10: Foo.foo/0
    (elixir) src/elixir_compiler.erl:126: :elixir_compiler.dispatch_loaded/6
    (elixir) src/elixir_lexical.erl:16: :elixir_lexical.run/3
    (elixir) src/elixir_compiler.erl:30: :elixir_compiler.quoted/3
    (elixir) lib/code.ex:363: Code.require_file/2
    (mix) lib/mix/tasks/run.ex:68: Mix.Tasks.Run.run/1
    (mix) lib/mix/cli.ex:58: Mix.CLI.run_task/2
```

最適化されてる？


あと、[Exception](http://elixir-lang.org/docs/v1.2/elixir/Exception.html)のリファレンスで

> Note that stacktraces in Elixir are updated on throw, errors and exits. For example, at any given moment, System.stacktrace/0 will return the stacktrace for the last throw/error/exit that occurred in the current process.

とあるんですが、これ「実用上問題ないからOK!」ってことなんですかね…
IBDesignable, IBInspectableのエラーでハマった

# はじめに
Xcode6から追加されたInterfaceBuilder（以下IB）の機能であるIBDesignableとIBInspectableを使ってみて、ハマったエラーがあったので共有したいと思います。

IBDesignableとIBInspectableについては

- [@IBDesignableと@IBInspectableを使ってグラデーション可能なカスタムViewを作ってみた](http://qiita.com/mo_to_44/items/762f42c22ae70c689cb9)
- [Interface builderでカスタムViewのライブレンダリング](http://qiita.com/hayashi311/items/14ddfa146a83139c41fc)

などの記事が詳しく書かれているので参考にしてください。


# エラー内容

```
Failed to set (myKey) user defined inspected property on (MyApp.MyClass): 
[<MyApp.MyClass 0x7fc1315478c0> setValue:forUndefinedKey:]: 
this class is not key value coding-compliant for the key myKey.
```

`this class is not key value coding-compliant for the key myKey.`のエラーについては、関連付けされたプロパティを編集・削除した際に、ストーリボードに古い関連が残っているエラーがほとんどだと思います。
この場合は、ストーリボード上から古い関連付けされたプロパティなどを削除してあげれば解決できます。

今回のは、`Failed to set (myKey) user defined inspected property on(MyApp.MyClass):`のエラーでIBInspectableのプロパティのエラーです。

警告の部分では以下のメッセージが

```
~/Main.storyboard: warning: IB Designables: 
Ignoring user defined runtime attribute for key path "myKey" on instance of "MyApp.Myclass". 
Hit an exception when attempting to set its value: [<MyApp.Myclass 0x7fb51b0104c0> setValue:forUndefinedKey:]: 
this class is not key value coding-compliant for the key myKey.

```

# 解決策
このエラーの解決法は場合によって異なると思いますが、自分の場合だとアクセスコントロールが`private`になっていることが原因でした。

```swift
    @IBInspectable private var myKey: Int {
        didSet {
            
        }
    }
```

普通に考えたらごくごく当たり前のことなのですが、IBInspectableのプロパティを`private`で設定しても、IBでは普通に値が設定できてしまうんですよね。ってことで簡単な問題に気付かず試行錯誤してました。

<img width="369" alt="スクリーンショット 2016-01-10 13.05.20.png" src="https://qiita-image-store.s3.amazonaws.com/0/62451/7d7c326a-21ab-67a3-b42f-4ea030989ae3.png">

普通にアクセスレベルを修正したら問題なく動作しました。
アクセスレベルは`public`か`internal`であれば問題ないです
(明示的にアクセスレベルを指定しなければ、自動的に`internal`になる)


```swift
    @IBInspectable var myKey: Int {
        didSet {
            
        }
    }
```
MVVMでコレクション内のコントロールにフォーカスを当てるときにつまづいた件

Livetを利用している場合、ViewModelからメッセージを投げることで任意のコントロールにフォーカスを当てることができる。例えば、ViewModelから`Messenger.Raise(new InteractionMessage("FocusToTextBox"));`という形でメッセージを投げて、Viewでは下記のように受け取る

```xml
           <TextBox>
                <i:Interaction.Triggers>
                    <l:InteractionMessageTrigger Messenger="{Binding Messenger}" MessageKey="FocusToTextBox" >
                        <l:SetFocusAction />
                    </l:InteractionMessageTrigger>
                </i:Interaction.Triggers>
            </TextBox>
```

ただ、この方法ではコレクションの任意のコントロールに対してフォーカスを当てたいときにうまくいかないパターンがあった。例えば、何らかのコレクションを表示していて、あるボタンを押下したときに「要素を末尾に追加＋追加した要素内のコントロールにフォーカスを当てる」という動きを実現したいとき、上記の方法ではフォーカスを当てることができない（そもそもInteractionMessageTriggerがメッセージを受け取れてないっぽい）。

処理の流れとして
1. コレクションに要素が追加される
2. 追加した要素のViewModelからメッセージを投げる
3. View上のコントロールが追加される
となってしまっている気がする。ので、なんとかして２と３の処理の順番を入れ替えたい。
悩んで導き出した解決方法が、Dispatcherを利用して非同期にフォーカスを当てる方法。

```csharp
DispatcherHelper.UIDispatcher.BeginInvoke(new Action(() => Messenger.Raise(new InteractionMessage("FocusToName"))), DispatcherPriority.Background);
```

DispatcherPriorityをBackgroundに指定することで、要素追加のバインド処理が完了してからメッセージを投げることができるようになった。


※検証用のソースは[ここ](https://github.com/ambleside138/ControlsShowcase)のFocusタブにおいてます
petalinux / microzed > O. 計算処理の計時

自分の過去メモ（2014年ころ)より

- MicroZed (CPU: 666MHz動作)

下のコードにすること (return fvalを追加)で、過度のoptimizationを回避できるようになり、O0 optionでもO2 optionでも同じ結果となった。
 
計時にはclock_gettime()を用いた。clock_gettime()のtime granularityは2700ns程度のようだ。10000回のループにすることで、granularityの影響を回避した。

### float型 > 足し算10000回

```
static float funcToBeTimed_floatAdd(void)
{
    int idx;
    float fval = 0.0f;
    for(idx=0; idx<kLoopNum; idx++) {
        fval = fval + 1.001f;
    }
    return fval;
}
```

on MicroZed: 17.1(usec) >> 1回の演算は17.1(nsec)

### float型 > 掛け算10000回

```
static float funcToBeTimed_floatMulti(void)
{
    int idx;
    float fval = 3.14f;
    for(idx=0; idx<kLoopNum; idx++) {
        fval = fval * 1.001f;
    }
    return fval;
}
```

on MicroZed: 18.2(usec) >> 1回の演算は18.2(nsec)

 float型 > 割り算10000回

```
static float funcToBeTimed_floatDiv(void)
{
    int idx;
    float fval = 3141590000000.00f;
    for(idx=0; idx<kLoopNum; idx++) {
        fval = fval / 1.001f;
    }
    return fval;
}
```

on MicroZed: 33.2(usec) >> 1回の演算は33.2(nsec)

### (追記 2016年1月)

計時のやり方についてStackoverflowでアドバイスをいただいたがリンク情報を失念した。
petalinux / microzed > N. プロセス間通信( IPC ; inter process communication )の種類

自分の過去メモ(2014年ころ）より

プロセス間の通信手法 (スレッド間通信に使ってもいいとのこと) [stackoverflow](http://stackoverflow.com/questions/404604/comparing-unix-linux-ipc)

1. Pipe
2. FIFO (named pipe)
3. Socket (Unix Domain Socket)
4. Message Queue
5. Signal
6. Semaphore
7. Shared memory

- それぞれについて
  - Pipe is useful only among processes related as parent/child. Call pipe(2) and fork(2). Unidirectional.
  - Two unrelated processes can use FIFO unlike plain pipe. Call mkfifo(3). Unidirectional.
  - Bidirectional. Meant for network communication, but can be used locally too. Can be used for different protocol. There's no message boundary for TCP. Call socket(2).
  - Message Queue. OS maintains discrete message. See sys/msg.h.
  - Signal sends an integer to another process. Doesn't mesh well with multi-threads. Call kill(2).
  - Semaphore is a synchronization mechanism for multi processes or threads, similar to a queue of people waiting for bathroom. See sys/sem.h.
Shared memory is a shared memory. Do your own concurrency control. Call shmget(2).
petalinux / microzed > M. デフォルトrunlevelの変更方法

自分の過去メモ(2014年ころ)より

通常はrunlevel 5で起動するようになっている。 runlevelを変更する場合は `petalinux-build -x package`を行う前に 
build/linux/rootfs/targetroot/etc/inittab
の id:5:initdefault: の数値を変更すればいい。
 
- 注意1. petalinux-build -c rootfsなど行うと inittabファイルが書き換えられてしまうようだ
- 注意2. runlevelを1 (single user mode)にした場合、USB-シリアル通信 (115200bps)接続を確立していないようだ
- 注意3. ramdiskイメージを用いる場合は、上記のinittabファイルでなく、arm_ramdisk.image.gzの中身のinittabを書き換えないといけないようだ。
petalinux / microzed > L. デフォルトIPアドレスの設定方法

自分の過去メモ(2014年ころ)より

http://zedboard.org/content/change-default-ipaddr-microzed
以下のいずれかの方法が可能

- /mnt/init.sh スクリプトファイルを新規作成して  以下のコマンドを記載

```
ifconfig eth0 192.168.1.31  netmask 255.255.255.0
```

- /etc/init.d/rcS の中に上記のifconfig...を追記
 
上記の方法ではlinuxを一度ブートする必要がある。 kernel build時に設定ファイルが追加できればいいのだが。。
c++ builder XE4, 10.2 Tokyo > fileIO > 指定フォルダのサブフォルダにファイルがあるかどうか確認。あればpathを返す

```txt:動作確認
C++ Builder XE4
RAD Studio 10.2 Tokyo Update 2 (追記: 2018/01/09)
```

任意のフォルダのサブフォルダにおいているファイルまでのパスを取得したい。

http://qiita.com/7of9/items/cb92a2ed0fad73afb069
でやっていたものに近いが、ファイルパタン(*.csvなど)ではなく、ファイルそのものを指定する。

##コード

```UtilFolderSearch.h
//---------------------------------------------------------------------------

#ifndef UtilFolderSearchH
#define UtilFolderSearchH

//---------------------------------------------------------------------------

/*
ファイルをサブフォルダ含めて検索する
*/

class CUtilFolderSearch {
private:

public:
	static String __fastcall CUtilFolderSearch::SearchFileInSubDir(String baseDir, String filename);

	// テスト用
	static String __fastcall CUtilFolderSearch::Test_SearchFileInSubDir();
};

#endif
```

```UtilFolderSearch.cpp
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include <IOUtils.hpp> // for TDirectory.XXX
#include "UtilFolderSearch.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)

#define DEBUG_DO_PRINT // デバッグ出力

/*
v0.1 2016/01/10
	- Test_SearchFileInSubDir()追加
	- SearchFileInSubDir()追加
	- debug_outputDebugString()追加
*/

static void debug_outputDebugString(String prefix, String msg)
{
	// あとでまとめてデバッグ出力をコメントアウトするため、関数にしている。

#ifdef DEBUG_DO_PRINT
	String work = L"UtilFolderSearch >" + prefix + L": " + msg;
	OutputDebugString(work.c_str()); // @ debug_outputDebugString
#endif
}

/* static*/String __fastcall CUtilFolderSearch::SearchFileInSubDir(String baseDir, String filename)
{
	if (baseDir.Length() == 0) {
		return L"";
	}

    TStringDynArray fileList;
    TSearchOption option = TSearchOption::soAllDirectories; // all folders

	fileList = TDirectory::GetFiles(baseDir, /* pattern=*/filename, option);

    String res;
	if (fileList.Length == 0) {
        return L"";
    }

	return fileList[0];
}

/*static*/String __fastcall CUtilFolderSearch::Test_SearchFileInSubDir()
{
	String baseDir = L"C:\\Program Files\\Windows NT";
	String filename = L"wordpad.exe";
	String filepath;

	filepath = SearchFileInSubDir(baseDir, filename);

	String msg;
	if (filepath.Length() > 0) {
		msg = L"Line63 > Found:" + filepath;
	} else {
		msg = L"Line63 > Not found";
    }
	debug_outputDebugString(L"Test_SearchFileInSubDir", msg);
}
```

##実行例

CUtilFolderSearch::Test_SearchFileInSubDir()を実行することで、テスト動作を確認できる。

例としてワードパッドを検索してみた。

![](http://yuml.me/diagram/class/[C:\Program Files]-->[Windows NT], [Windows NT]-->[Accessories], [Windows NT]-->[TableTextService], [Accessories]-->[wordpad.exe])

(YUMLでは円マークがうまく表示されないようだ)

```
デバッグ出力: UtilFolderSearch >Test_SearchFileInSubDir: Line56 > Found:C:\Program Files\Windows NT\Accessories\wordpad.exe プロセス Project1.exe (2532)
```
複数行ある標準入力を1行ずつ処理するJavaコード

複数行ある標準入力を1行ずつ処理するJavaコード

```java:StdInRead.java
class StdInRead{
	public static void main(String[] args) throws IOException{
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		String strStdIn = in.readLine();
		while(strStdIn!=null){ //EOFまで処理継続
			//処理を記載

			strStdIn = in.readLine();
		}
	}
}
```
[Swift] umbrella header 'Realm.h' not found　でハマった時のこと

CocoaPods 関連のエラーの解決方法はいろんな場所に記載されている．
以下はほんの一例．

- http://qiita.com/yokomotod/items/884f624cf17ba4a5ef11
- http://qiita.com/makoto_kw/items/b7cc2bb77a7a71bc36da
- http://qiita.com/Takumi_Mori/items/42a5c993041dbbc86f85
- http://www.ateliee.com/archives/2364

また，プロジェクトのIssueなんかもだいぶ参考になることが最近わかった．

しかし今回，どのサイト，どのissueを見ても解決できない問題があった．
それが，__`umbrella header 'Realm.h' not found`__!!!


他のプロジェクトでは正常に動くのに，どうしたものか．．．
Build SettingsやBuild Build Phasesなどを一行一行丁寧に比べたけども，何も変わったことはなかった．
何が悪さをしているのか．．．

# User Header Search Paths

悪さをしていたのはこいつだった．．

Objective-Cのヘッダーを読み込むために，Bridging Headerに記述を行ったときに，`file not found`エラーが出ていたので，
`User Header Search Paths`に`Pods/**'と設定を行っていた．

詳しいことは割愛するが，(というかよく分かっていないのだが...)
__`Pods/**`を`Pods/xxxx(ライブラリ名)/**`のように読み込みたいObj-Cヘッダーのパスだけに限定することで解決した．__

`Pods/**`ってしちゃうとRealmSwiftもこっちを見ちゃうから無いっていうんだろうな．．．(適当)

# 終わりに
今回のエラーは久しぶりに長期戦でした．
同じようなエラーで悩んでる方は是非試してみてください．

# 追伸
Swiftにもだいぶ慣れてきたんで，これからは，issue切ったりPRしたりしていきたい今日この頃．
なんか約束事とかまとめてるいいサイトあったら教えて欲しいです．m(_ _)m
呼び出し元の Self を引数のデフォルト値にする方法

例えば、関数ライブラリに以下のような関数を作ったとします。

![image](https://qiita-image-store.s3.amazonaws.com/0/43814/3a8bff41-a535-a14c-5745-7b9444d1489d.png)

この関数の Target には呼び出し元の Self を指定させたいわけですが、毎回 Self を指定させるのは面倒です。

そこで、Target のデフォルト値に Self にします。
この方法は、C++ で関数を定義する場合のみ使えます。（ブループリントでの方法はわかりませんでした。）

引数に Self を指定させたい場合、**UFUNCTION** のメタデータに以下を追加します。

**DefaultToSelf="引数名"**

先ほどの関数の場合、以下の様な定義になります。

```cpp:
UFUNCTION(BlueprintCallable, Category = "Test", meta=(DefaultToSelf = "Target"))
static void DisplayName(UObject* Target);
```

こうすることで、Target に何も指定されていない場合は、デフォルト値に Self が入るようになります。
（ただし、ノード上の見た目は変わりません。）
json-server使ってみた

## 参考

* [typicode/json-server · GitHub](https://github.com/typicode/json-server)

## npmでインストールする場合

```bash:
sudo apt-get install -y npm
npm install json-server
node_modules/.bin/json-server db.json -p 8080
```

## dockerで動かす場合

* [Docker Hub](https://hub.docker.com/r/clue/json-server/)

```bash:256mb
docker pull clue/json-server
```

```json:db.json
{
  "users": [
    { 
      "id": 1,
      "name": "user1"
    }
  ]
}
```

* [Update README.md by vkim · Pull Request #2 · clue/docker-json-server · GitHub](https://github.com/clue/docker-json-server/pull/2)

```bash:起動
docker run -d \
 -p 8080:80 \
 -v `pwd`:/data/ \
 clue/json-server
```

## curlで操作

```bash:~/.bashrc
json() {
  URL=http://localhost:8080

  case ${1} in
    add|a|i|insert) ACT="POST" ;;
    update|u) ACT="PUT" ;;
    *) ACT="GET" ;;
  esac

  ARG2=${2}

  if [ $# -ge 2 ];then
    shift;shift;set -x
    curl -X ${ACT} ${URL}${ARG2} $@
  else
    echo "引数が足りません."$#
  fi
}
```

```bash:
#一覧
json list /users

#追加
json a /users/2 -d name=user2

#更新
json u /users/2 -d name=おなまえ
```
2016年の抱負

#はじめに
ちょっと遅くなりましたが明けましておめでとうございます。
どうぞ今年もよろしくお願いします。

#2016年の抱負
今年は改めて、技術を追い求める年にしたいと思っています。
2012年に会社に入ってからというもの、以前ほど技術を追い求める事が少なくて
なんだか刺激の少ない毎日だなぁと心がモヤモヤとしていました。

TechBooster楽しかったなぁ…
ディズニー待ち時間作ってた頃は楽しかったなぁ…
色んな勉強会に出て色んな人に会って楽しかったなぁ…
毎週のように飲みに出かけてたなぁ…

いまや…orz

改めて、今年は技術を追いかけます。

##技術を追いかけるって具体的に何するの？
###1.最低でも1回/月は勉強会的なイベントに参加する
以前はAndroiderの集う勉強会にばかり出ていましたが、
Androidに縛らず色んな種類の勉強会に出てみようと思います。

BaaSとか興味ありますね。サーバサイド。

仕事の関係上、Oracleを始めとしたDB系を勉強しなくちゃなんだけど、
やっぱりもうちょっと高めのレイヤーが好きだなぁということで。

###2.何か形になるものを作る
何を作るかは考え中。けど、何か実績(名刺代わりになるもの)を作る。２つ以上。


#最後に
なんだか新入社員みたいな抱負になっちゃったけど、まずは初心に戻るということで。
改めて、がんばろう。