OmniAICreator/Qiita-1.07M huggingface dataset:
S/MIMEメールの送り方

## 登場人物

自分(=送信者側)
相手(=受信者側)

## やること一覧
1. 証明書の取得
1. 証明書のエクスポート(windows7)
1. 証明書のインポート(thunderbird)
1. 相手側でも上記の項目を全部実施
1. 相手側からデジタル署名付きメールを送ってもらう
1. 相手側のデジタル署名を受信
1. 暗号化メールを相手へ送信

## 1. 証明書の取得
無料で証明書を発行してくれるところで発行します。
https://www.comodo.com/home/email-security/free-email-certificate.php
（注意）上記はIEでアクセスしましょう。FireFoxだとあるオプション(「Advanced Private Key Options... 」)が出ないです。

1. 一番したの「Sign Up Now」をクリック
1. 「First Name」「Last Name」適当に。「Email Address」は自分のアドレス。
1. 「Advanced Private Key Options...  」をクリック。内容はそのまま。これをしないと秘密鍵のエクスポートができません。。
1. 「Revocation Password」登録を削除するときのパスワード入力。
1.  「Opt in?」ニュースレター来るので外す。
1. 「 I ACCEPT ...」をチェックしてnextボタンをクリック
1. 登録メールが来るので、記載のURLにアクセス。自分のアドレスとメールに記載のパスワードを入力。<br>
   「Successful」と出て証明書がインポートされる。<br>
   ※「証明書の発行要求時に作成された秘密鍵がないため、この個人証明書をインストールできませんでした。」と出た方、IE以外でアクセスしてませんか？？<br>
   ※やっぱ削除したいときは、メール内の下の方のrevokeのリンクから削除。<br>
     ここでのパスワードは登録時のパスワード。

## 2. 証明書のエクスポート(windows7)
メーラの方でインポートするために証明書を書き出す。

1. インターネットオプション→コンテンツ→証明書→個人
1. (自分のアドレスの入った)証明書を選択→エクスポート
1. 「はい、秘密キーをエクスポートします」を選択
1. 「証明のパスにある証明書を可能であれば全て含む」、「すべての拡張プロパティをエクスポートする」をチェック→次へ
1. パスワードを適当に設定(インポート時に使用するだけ)
1. 名前を適当に付けて保存

## 3. 証明書のインポート(thunderbird)
1. ツール→オプション→詳細→証明書→証明書を表示→あなたの証明書→インポート→上記(2)でエクスポートしたものを選択。<br>
   「原因不明の問題により PKCS #12の操作に失敗しました。」と出る場合はたぶんパスワードが間違ってます。
    エクスポートからやり直しましょう。
1. ツール→アカウント設定→セキュリティ　の「デジタル署名」の選択ボタンでインポートしたものを選択。<br>
   「メッセージにデジタル署名する」は外しておく。<br>
  「暗号化」も同様。ラジオボタンは「暗号化しない」をとりあえず選択しておく。

## 4. 相手側でも上記の項目を全部実施
※上とおなじ感じで設定して(してもらって)ください

## 5. 相手側からデジタル署名付きメールを送ってもらう
thunderbirdのメール作成ウィンドウにて、セキュリティーのプルダウンの「このメッセージにデジタル署名する」にチェックして
メールを送ってもらう。

## 6. 相手側のデジタル署名を受信
前述のメールを受信したらthunderbirdが勝手に登録してくれているはず。
"ツール→オプション→詳細→証明書→証明書を表示→個人証明書" を見て登録されてるか確認

## 7. 暗号化メールを相手へ送信
thunderbirdのメール作成ウィンドウにて、セキュリティーのプルダウンの「このメッセージを暗号化する」にチェックして
メールを送る。
ダミーファイルの作り方

|countの値|何メガ作るかの指定|
|---|---|
|of|作りたいファイル名|
```console
% dd if=/dev/zero of=/home/swap0 bs=1024k count=64
```

/dev/zero は 0x00 を永遠と吐き出し続ける仮想ファイルで、/home/swap0 というファイルにブロックサイズ 1024k で区切って 64 回繰り返して追記していく。

結果的にファイルサイズ 65536k の中身が全て 0 で埋め尽くされたファイルが出来上がるという寸法。
4.3-RELEASE 以降で root に softupdate を

* シングルユーザモードに入る

```console
# nextboot -o "-s" && reboot
```
<ぼそ>勿論コールドブート時にシングルユーザーモードで起動してもよい</ぼそ>

* SOFTUPDATE を ON にする

```console
# umount -a
# tunefs -n enable /
```

* シングルユーザーモードを抜ける 

```console
# exit
```

* SOFTUPDATE が有効になっているのを確認する

```console
# mount
```
```text
/dev/ad0s1a on / (ufs, local, soft-updates)
```
soft-updates の表示が出ていれば設定完了
{t}csh で日本語を喋らす方法

.cshrc に以下の文を追加

```text:.cshrc
% setenv LANG ja_JP.EUC
```
ja_JP.SJIS ⇒ シフト JIS
ja_JP.UTF-8 ⇒ UTF-8 (コード体系にバグありなので利用には注意)
bashコマンド ～いろいろ～

## lsコマンド
```bash
$ ls
$ ls -l     # ファイル詳細情報オプション
$ ls -a     # 隠しファイル表示オプション（隠しファイルは先頭に"."が付く）
$ ls -F     # ファイル種別表示オプション
$ ls -LAF   # 全部乗せ

# -Fオプションで表示されるファイル種別
#   なし：通称ファイル
#   /  ：ディレクトリ
#   *  ：実行可能ファイル
#   @  ：シンボリックリンク
```
## mkdirコマンド
```bash
$ cd          # homeへ移動
$ mkdir work  # workフォルダを作成（同名のフォルダは作成できない）
```
```bash
$ mkdir -p work/work2/work3  # -pオプションにより深いディレクトリを一気に作ることが出来る
```
## touchコマンド
```bash
$ touch <新しいファイル名1> <新しいファイル名2> ... # 空の新しいファイルを作成

# touchコマンドは本来ファイルのタイムスタンプの更新のためのコマンド
# 対象のファイルが存在しない場合は新規ファイル作成になる
# touchコマンドは間違って既存ファイル名を指定しても内容が上書きされたり削除されないので安心
```
## rmコマンド
```bash
$ rm [オプション] <新しいファイル名1> <新しいファイル名2> ... # ファイルを削除

# フォルダ削除の場合は-rオプション
$ rm -r dir1

#空のフォルダを削除する専用コマンドもある
$ rmdir dir1  # dir1フォルダが空（隠しファイルが存在してもダメ）でないと削除出来ない
```
## catコマンド
```bash
$ cat [オプション] <ファイル名> # ファイルの内容表示
# コマンド名：conCATenate(連結する)の略

# ファイル名を指定しないと
$ cat
# キーボードからの入力待ちとなりカーソルが止まりプロンプトにも何も表示されなくなる
# [Ctrl] + d でcatコマンドから抜ける事が出来る

$ cat -n <ファイル名> # 行番号表示オプション
```
## lessコマンド
```bash
# ファイルをスクロールできる形で表示する
$ less [オプション] <ファイル名>

#lessコマンドのスクロール操作
f：1画面下にスクロール
b：1画面上にスクロール
j：1行下にスクロール
k：1行上にスクロール
q：lessコマンド終了
#lessコマンドの検索操作
/<文字列>　下方向に向かって検索
?<文字列>　上方向に向かって検索
n　次の検索結果に移動
N　前の検索結果に移動
```
## カレントディレクトリ確認
```bash
$ pwd
```
## ホームディレクトリ
```bash
$ cd
```
## ホームディレクトリ（チルダ）
```bash
$ cd ~
```
## 時刻
```bash
$ date
```
## ログインシェルの確認
```bash
$ echo $SHELL
```
## 文字コードの確認
```bash
$ printenv
```
## アスキーコードのマニュアル
```bash
$ man ascii
```
vi に馴染めない人は ee で！

スーパーユーザーが新規で作成した直後のユーザーでログインしたユーザーだと、標準のエディタが vi(1) となる
スクリーンエディタの ee(1) を標準のエディタにするように ~.cshrc 内の setenv EDITOR 行を書き換え

```console:.cshrc
setnev	EDITOR	ee
```

書き換え後は、ログオフするか、下記コマンドを実行する

```console
# source .cshrc
```
Githubで使えそうなAPI

# やりたいことリスト

- PRが作成されたら関連するIssueの概要をコメントする
- 特定のLabelが付いているIssueを取得する
- 特定のブランチからタグを切る
- （おまけ）特定のブランチとの比較URLを作成する

# PRが作成されたら、関連するIssueの概要をコメントする
PRを作成するときに、元となるIssueの情報が欲しいということで、概要にIssueの情報があるとその内容を自動で取得してコメントするようにしたい

- Webhook Pull Request
    - https://developer.github.com/v3/activity/events/types/#pullrequestevent
- Issueの情報を取得
    - https://developer.github.com/v3/issues/#get-a-single-issue
- コメントの作成
    - https://developer.github.com/v3/issues/comments/#create-a-comment

# 特定のLabelが付いているIssueを取得する
`urgent` ラベルが付いたIssueやPRをSlackに通知したい

- SearchAPI
    - https://developer.github.com/v3/search/#search-issues
    - teamでフィルタ
        - https://help.github.com/articles/searching-issues/#search-by-a-team-thats-mentioned-within-an-issue-or-pull-request
    - labelでフィルタ
        - https://help.github.com/articles/searching-issues/#search-by-the-labels-on-an-issue
    - レポジトリでフィルタ
        - https://help.github.com/articles/searching-issues/#search-within-a-users-or-organizations-repositories

# 特定のブランチからタグを切る
複数レポジトリにまたがってタグ作るのが面倒なので、botで自動化したい
タグは結構特殊みたいで、 `tag object` と `reference` を作る必要があるらしい

- https://developer.github.com/v3/git/tags/#create-a-tag-object
- https://developer.github.com/v3/git/refs/#create-a-reference

# おまけ

PRの出し先と比較したいブランチが違うときとか、結構ある。
そんなとき、比較したいブランチ（PR)との比較ブランチを作ってくれる

```
https://github.com/<organization>/<repo>/compare/<branch1>...<branch2>
```
上記URLで比較されるので、それを自動的に生成してコメントするようにすれば良い

```
compare <PRのURL>
```
というコメントがあったら比較URLをコメントするようにするとする

- Webhook Pull Request
    - https://developer.github.com/v3/activity/events/types/#pullrequestevent
- IssueコメントのWebhook
    - https://developer.github.com/v3/activity/events/types/#issuecommentevent

上記Webhookを受けて、 

- Pull Request
    - https://developer.github.com/v3/pulls/#get-a-single-pull-request

でブランチ情報を取る
(おそらく head->label(or ref) で取れる)
JRuby から TensorFlow を使う

数日前に[piyo7](http://qiita.com/piyo7)さんが投稿された [ScalaからTensorFlowのJava APIを呼びだすぞい](http://qiita.com/piyo7/items/d897d7156d87d29cad19) をみて JRuby からだとどういうコードになるのか試してみました。
## コード

```example.rb
require 'pp'
require 'java'
require './libtensorflow-1.0.0-PREVIEW1.jar'

module TF
  include_package 'org.tensorflow'
end

graph = TF::Graph.new

a = graph.opBuilder("Const", "a").
  setAttr("dtype", TF::DataType::INT32).
  setAttr("value", TF::Tensor.create([1, 2, 3].to_java(:int))).
  build().
  output(0)

b = graph.opBuilder("Const", "b").
  setAttr("dtype", TF::DataType::INT32).
  setAttr("value", TF::Tensor.create([4, 5, 6].to_java(:int))).
  build().
  output(0)

c = graph.opBuilder("Mul", "c").
  addInput(a).
  addInput(b).
  build().
  output(0)

session = TF::Session.new(graph)
out = Array.new(3).to_java(:int)
session.runner().fetch("c").run().get(0).copyTo(out)

pp out #=> int[4, 10, 18]@71623278

```

$ ruby -J-Djava.library.path=./jni example.rb

で実行すると確かに [4, 10, 18] が求まります。

ちょっとハマったのが org.tensorflow を import する処理

```rb
  import 'org.tensorflow.*'
```

とは書けず、名前空間 TF を定義して include_package する方式になりました。
## 比較

Ruby から TensorFlow を実行するライブラリは、昨年6月に公開された

　[somaticio/tensorflow.rb](https://github.com/somaticio/tensorflow.rb)

が定番のようです。

このライブラリ付属の[サンプルコード](https://github.com/somaticio/tensorflow.rb/blob/master/image/classify_image.rb)と上記の example.rb を比較すると  example.rb の方がかなり冗長です。

もし今回のコードを発展させる意味があるとすると、module TF をよりインテリジェントなラッパーに置き換えることくらいでしょう。

(1) Java 側のシンボル情報を用いて module TF を[メタプログラミング](http://qiita.com/tags/%E3%83%A1%E3%82%BF%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0)する。

(2) [Keras](http://qiita.com/tags/Keras)ライクに、より抽象化された (Ruby らしい)API を提供する。

といったことが考えられます。

Keras は Keras 2 で TensorFlow に統合されるとのこと(→[Spring 2017 roadmap: Keras 2, PR freeze, TF integration ](https://github.com/fchollet/keras/issues/5299))で、Java API の仕様はまだまだ不安定と見受けます。残念ながら(1)(2)いずれも時期尚早ですね。
bashコマンド　～shutdown～

# shutdown
## シャットダウン（即時）
```bash
# shutdown -h now
```
## シャットダウン（10秒後）
```bash
# shutdown -h 10
```
## 再起動（即時）
```bash
# shutdown -r now
```
## シャットダウンコマンドのエラー
### コマンドが見つからない場合
```bash
# shutdown -r now
-bash: shutdown: コマンドが見つかりません
```
### [対応策]shutdownコマンドをフルパスで指定
```bash
# /sbin/shutdown -r now
```
ユーザーの追加

|項目|値|
|---|---|
|グループネーム|apache|
|ユーザーネーム|web|
|uid|任意 (自動付与)|
|ログインディレクトリ|/usr/local/apache/htdocs/|
|ログインシェル|無効|

```console
# pw user add web -d /usr/local/apache/htdocs/ -g apache -s /usr/sbin/nologin
```
この場合 ftpd ではログイン可能なので、必要に応じて /etc/ftpusers にユーザーネームを追記しておく必要がある
[フロントエンド]flexで困ったこと

今回flexを触って困ったことがありましたので共有させていただきたいと思います。

##今回困ったこと
![スクリーンショット 2017-02-21 14.17.19.png](https://qiita-image-store.s3.amazonaws.com/0/163415/5aa32867-f888-707c-bc31-44b010687e64.png)
このようにdisplay: flexで横並びにした要素があるのだが
テキスト1だけ横並びにしたくないときがあった。
flexの解除などを調べていたのだが、出てこなかったので試行錯誤を繰り返した結果、
少し無理矢理だが解決策を思いついた。

##解決策
親の要素にflex−wrap: wrap;を追加して
テキスト1にwidth: 100%を指定するとうまくいった。

##まとめ
かなり無理矢理なやり方な気がするのでここらへんのうまいやり方を募集。
Chrome v56の全角変換中の入力をJSから更新した際の不具合

## この記事の趣旨

例えば、JavaScript で

「テキストフィールド[^1]の全角入力中[^2]に `input要素.value` を更新することで、
　その全角入力ウィンドウ[^3]を強制的に閉じる」

という実装をしている場合に、Chrome v56 で不具合らしき挙動になる点の調査結果です。

`v56` として言及している対象の Chrome のバージョンは、正確には `56.0.2924.87` です。


## 不具合らしき挙動とは

文章で説明すると、

「ある input 要素をフォーカスして全角モードでキー入力を行った場合、
　1 文字目の keyup イベントの開始時点で `input.value` の値が空文字列の場合、
　その後全角入力を確定しても、全角入力ウィンドウがブラウザの input 要素に残る。」

という挙動です。

確認用の CodePen スクリプトは以下です。
http://codepen.io/kjirou/pen/OWKNey


## この挙動は不具合ですか？

詳細は不明です。

ただ、少なくとも v55 ではこのような挙動にはなりませんでした。
ちょっとわかり難いですが、以下が v55 と v56 の比較になります。

Chrome が v55 のとき）
<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">Chrome、全角モードのkeyupイベント内でinput.valueを更新したときの挙動がやっぱり変わってる.. こっちが v55 のときで <a href="https://t.co/lbAn48LnEz">pic.twitter.com/lbAn48LnEz</a></p>&mdash; kjirou (@kjirou) <a href="https://twitter.com/kjirou/status/828995964669087744">2017年2月7日</a></blockquote>
Chrome が v56 のとき）
<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">こっちが v56、表示上は見えないけど変換中の文字が埋まってて変換のドロップダウンが残ったままだ <a href="https://t.co/BBBCudWHGy">pic.twitter.com/BBBCudWHGy</a></p>&mdash; kjirou (@kjirou) <a href="https://twitter.com/kjirou/status/828996368148488192">2017年2月7日</a></blockquote>


一般ユーザとしては不具合報告はしましたが、返答はありません。
公式からの回答を積極的に得たい、とすればこの辺りに出現したり投稿したりすることになるのではないでしょうか。

- Google Chrome ヘルプ フォーラム
  - https://productforums.google.com/forum/#!forum/chrome-ja
- Chromium の Issues
  - https://bugs.chromium.org/p/chromium/issues/list


## 対処案
- keyup イベント開始時点で `input.value` が空文字列で無ければいいので、keydown イベントなどで直前に `input.value = " ";` を挿入して空文字列でないようにする。
- 全角入力中に `input.value` を更新するような実装を諦め、全角入力確定時のみに行うようにする。
  - 全角入力の確定イベントは、`CompositionEvent` を利用すれば、IE10,11 を含むどのブラウザでも安定して判別できます。
- というか、本当に重要な機能でなければ、入力値を整形する場合はそのテキストフィールドからフォーカスを外したタイミングで行うのが一番良い選択だと思います。


## 追記
- `バージョン 57.0.2987.98` でも同様の状態でした


## 脚注
[^1]: 「テキストフィールド」は、`type="text"` の input 要素のことを意味しています。
[^2]: この状態を示す正式な名称は不明です。`IME mode` という単語は良く見かけました。
[^3]: これを示す正式な名称は不明です。`IME window` という単語がよく見かけました。
さくらのレンタルサーバで常時SSL化するときに、http→httpsの転送でハマった話

# 前提

* Slimframework 3を使っています。
* さくらのレンタルサーバにアップロードしていました。
* 公開ディレクトリの場所を変更しています。（/home/アカウント/www/ → /home/アカウント/www/ディレクトリ名/www）

# 動いたコード
フロントコントローラの一番上に、下記の処理を挿入しました。今回はSlimframework 3を使用していますが、CakePHPやWordPressなど、処理をフロントコントローラに集める他のフレームワークやCMSでも動きそうです。
後述のとおり、a-blog cmsの問題解決用の記事を参考にしています。
ただし、さくらのレンタルサーバでしか通用しません。
何より対応が無理矢理過ぎるのでいつ動かなくなるのかと不安です。。

```:index.php
if (isset($_SERVER['HTTP_X_SAKURA_FORWARDED_FOR'])) {
    $_SERVER['HTTPS'] = 'on';
    $_ENV['HTTPS'] = 'on';
}
if (empty($_SERVER['HTTPS'])) {
    header( "HTTP/1.1 301 Moved Permanently" ); 
    header("Location: https://{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}");
    exit;
}
```

# mod_rewriteが思ったとおりに動かない

さくらのレンタルサーバで非SSL領域（http）へのアクセスをSSL領域（https）に飛ばそうとしました。通常は.htaccessに以下の記述で対応できます。

```:.htaccess
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://domain.com/$1 [R=301,L]
```

ところがこれでは上手く動きませんでした。

さくらのレンタルサーバーは独特な仕様をしていて、SSLの注意点が記載されていました。

> 「さくらのレンタルサーバ」にて提供しているウェブサーバ （Apache） は、 
> 80番ポートを使用するものと、443番ポートを使用するものとの 2種類に分けられます。 
> 一般的に、80番ポートは「http://」、443番ポートは「https://」という形式でアクセスされ、 
> 「https://」についてはプロクシとして動作します。 
> そのため、同じディレクトリへのアクセスであっても、その際に呼び出されるウェブサーバ が異なると、 
> CGIプログラムやウェブサーバが.htaccessなどのファイルを読み込む際、挙動に違いが生じます。 
> 例えば、HTTPとしてアクセスした場合はお手元のコンピュータが、 
> HTTPSとしてアクセスした場合はサーバそのものがアクセス元となります。 
> このため、SSLのみのアクセス許可(HTTPアクセスの制限)や、mod_rewriteによるURLの書き換えはできません。

（[SSL利用時の注意点 – さくらのサポート情報](https://help.sakura.ad.jp/hc/ja/articles/206207221-SSL%E5%88%A9%E7%94%A8%E6%99%82%E3%81%AE%E6%B3%A8%E6%84%8F%E7%82%B9)）

# PHPでの転送も一苦労

ならば、PHPを使った転送を試みました。
公開ディレクトリ直下のindex.php（フロントコントローラ）の一番最初にこう記述しました。

```:index.php
if (empty($_SERVER['HTTPS'])) {
    header( "HTTP/1.1 301 Moved Permanently" ); 
    header("Location: https://{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}");
    exit;
}
```

ですがこれも上手くいきませんでした。リダイレクトループが発生してしまいます。
httpの場合はhttpsに飛ばして、httpsの場合は上記コードは評価されない。。と思っていたのですが、さくらのレンタルサーバの場合、httpにアクセスすると、常に評価されてしまいます。
なぜかと調べてみました。

> httpsのアクセスであっても、%{SERVER_PORT} に 443ではなく80が設定される。
> httpsのアクセスであっても、%{SERVER_HTTPS} は空。
> $_ENV['HTTPS'] に httpsのアクセスの場合は"on"が設定されるが、リライトされたものは、空になってしまう。
> httpsのアクセスの場合、%{HTTP:X-Sakura-Forwarded-For} に クライアントのIPアドレスが設定される。

（[さくらのレンタルサーバーで常時SSL/TLSを設定する \| サイト公開時のポイント \| インストール \| a\-blog cms 制作者向け情報](https://developer.a-blogcms.jp/document/deploy/sakura-ssl.html)）

特に厄介なのは「リライトされたものは、空になってしまう。」です。「\$_ENV['HTTPS']」とありますが、「\$_SERVER['HTTPS']」も同様です。つまりif文の中身が永久に実行されるようになっていたのです。

回避方法も引用元にありました。「\$_SERVER['HTTP_X_SAKURA_FORWARDED_FOR']」が設定されている場合に$_SERVERに書き込んでいます。
最終的に一番最初に挙げたコードになります。
空間参照系変換ライブラリ Proj4js 使い方メモ

# この記事について

ドキュメント( http://proj4js.org/ ) に書いてある通りに動かしたメモです。

# インスコ

Node でもブラウザでも動くので好きなの選べ！

```bash
$ npm install proj4
$ bower install proj4
$ jam install proj4
$ component install proj4js/proj4js
```

今回は Node の REPL で動かして確認します。

```
$ npm install proj4
$ node
> var proj4 = require("proj4");
undefined
```

# 座標を変換する

変換関数の I/F は以下。

```js
proj4(fromProjection[, toProjection, coordinates])
```

第1引数の空間参照系から、第2引数の空間参照系に変換する。第3引数には変換対象の座標を指定。
世界測地系緯度経度座標(WGS84, EPSG:4326)から日本測地系緯度経度座標(Tokyo, EPSG:4301)に変換します。

```js
> var firstProjection = "+proj=longlat +datum=WGS84 +no_defs";
undefined
> var secondProjection = "+proj=longlat +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +no_defs";
undefined
> proj4(firstProjection, secondProjection, {x:139.74981563, y:35.64160487});
{ x: 139.75304670250136, y: 35.63836153195859 }
```

座標は `{x: x, y: y}` の形式以外にも配列で `[x, y]` で指定可能。指定した形式と同じ形で返ってくる。

```js
> proj4(firstProjection, secondProjection, [139.74981563, 35.64160487]);
[ 139.75304670250136, 35.63836153195859 ]
```

引数の空間参照系を1つ省略した場合は、 WGS84 からの変換とみなします。

```js
> proj4(secondProjection, [139.74981563, 35.64160487]);
[ 139.75304670250136, 35.63836153195859 ]
```

座標を省略した場合は、 `forward()` と `inverse()` の2メソッドを持つオブジェクトが返されます。

```js
> proj4(firstProjection, secondProjection).forward([139.74981563, 35.64160487]); 
[ 139.75304670250136, 35.63836153195859 ]
> proj4(secondProjection, firstProjection).inverse([139.74981563, 35.64160487]);
[ 139.75304670250136, 35.63836153195859 ]
```

# 空間参照系を名前付きで定義する

`defs()` メソッドで定義できます。

```js
> proj4.defs("EPSG:4326","+proj=longlat +datum=WGS84 +no_defs");
undefined
> proj4.defs("EPSG:4301","+proj=longlat +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +no_defs");
undefined
> proj4("EPSG:4326", "EPSG:4301", [139.74981563, 35.64160487]);
[ 139.75304670250136, 35.63836153195859 ]
```

# 定義済み空間参照系

- `EPSG:4326` (エイリアスで `WGS84` )
- `EPSG:4269`
- `EPSG:3857` (エイリアスで `EPSG:3785`, `GOOGLE`, `EPSG:900913`, `EPSG:102113` )

また `defs()` の第2引数を省略すれば定義済みの情報も確認できます。

```js
> proj4.defs('EPSG:4326')
{ projName: 'longlat',
  datumCode: 'WGS84',
  no_defs: true,
  k0: 1,
  axis: 'enu' }
```

# `defs()` の第2引数に渡す文字列を調べる

http://epsg.io/ から検索することができる。 `EPSG:4612` が欲しければ `4612` とかで検索すれば大体ヒットします。

丁寧に Proj4js 用の Export コードも用意されているので、そのままコピーすれば利用可能。

![image](https://mapion.qiita.com/files/1ccaacc8-f602-501c-4c19-6517b096f513.png)

```js
proj4.defs("EPSG:4612","+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs");
```
internalパッケージが使えないエラーはGOPATHが正しくないときにも出る

# 現象

例えば素朴にGithubから何らかのinternalパッケージを使用しているGoプロジェクトをCloneする。
それも適当なディレクトリに。

```
aya-eiya> cd ~/work/go
aya-eiya> git clone https://github.com/peco/peco
aya-eiya> cd peco
aya-eiya> make installdeps # <- この時点でワーニングが割りと出る
aya-eiya> make test
```

ビルドエラーとして以下が得られる。

```
cmd/peco/peco.go:9:2: use of internal package not allowed
  ・
  ・
  ・
```

# 対処

<code>GOPATH</code>を例えば以下に設定する。

```bash
export GOPATH=~/work/home/go
```

プロジェクトを以下に移動する。

```bash
aya-eiya> cd ~/work/go
aya-eiya> mkdir -p src/github.com/peco
aya-eiya> mv peco/ src/github.com/peco/
aya-eiya> cd src/github.com/peco/peco
aya-eiya> make clean installdeps test
# Greenダヨ！
```

# なんで？

## internal packageについて

Goには、プロジェクト内からのアクセスのみを許可する参照スコープを定義する目的で、<code>internal</code>パッケージという機能がVersion 1.4から用意されています。

internalという名前でパッケージの階層を作ると、そのinternalの下のSymbolはそのinternalを置いたパッケージと同階層のパッケージからしか参照できなくなります。

## 公開されるGo Projectのimport記法

公開することを見越したGo Projectでは、importに公開した時にそうなるだろうパッケージ名を付けてシンボルを設定しているようです。

例えば、例としてあげたPecoのコードであれば、importは以下のように設定されています。

```go
import (
	"fmt"
	"os"
	"runtime"
	"github.com/peco/peco"
	"github.com/peco/peco/internal/util" // <- インターナルなのぜ
	"context"
)
```

なので、ローカルでビルドする場合でも、クローンしたプロジェクトが、<code>GOPATH</code>から<code>github.com/peco</code>に置かれているように見えなければなりません。

# 参考

* [Goコードの書き方](http://golang-jp.org/doc/code.html#PackagePaths) - http://golang-jp.org/doc/code.html#PackagePaths
* [golang 1.5 の internal パッケージの使い方。](http://mattn.kaoriya.net/software/lang/go/20150820102400.htm) - http://mattn.kaoriya.net/software/lang/go/20150820102400.htm
* [peco](https://github.com/peco/peco) - https://github.com/peco/peco
rbenv メモ

vagrant で rbenv をインストールするたびやっていることのメモ。

使用している vagrant box は [ubuntu/xenial64](https://atlas.hashicorp.com/ubuntu/boxes/xenial64)

```bash
# シェルをfishにする
$ sudo apt-add-repository ppa:fish-shell/release-2
$ sudo apt update
$ sudo apt install -y fish build-essential libffi-dev libssl-dev libreadline-dev zlib1g-dev && sudo apt upgrade -y && sudo apt autoremove -y
$ sudo passwd ubuntu # パスワード入力
$ chsh -s /usr/bin/fish # パスワード入力
$ logout # ホストで vagrant reload
```

ここからは fish. bash/zsh な人は rbenv/ruby-build 見ればいいとおもいます。

```bash
$ git clone https://github.com/rbenv/rbenv.git ~/.rbenv
$ cd ~/.rbenv && src/configure && make -C src
$ vim ~/.config/fish/config.fish
# 追記
set -x PATH "$HOME/.rbenv/bin" PATH
$ source ~/.config/fish/config.fish
$ rbenv init
$ vim ~/.config/fish/config.fish
# 追記
status --is-interactive; and source (rbenv init -|psub)
$ source ~/.config/fish/config.fish
$ rbenv install ***
```

本当は(よくわかってないけど) Ansible とか Chef とかっていうのを使うと幸せになるんだろうな。
TCP > Link > Three standard message formats @ spring > length-header / stx-etx / crlf 

TCP通信などにおけるデータフォーマットに関して、`<CR><LF>`や`<STX><ETX>`などの使用について疑問に思った。

以下を見つけた。

http://docs.spring.io/spring-integration/docs/2.0.0.M4/spring-integration-reference/html/ip.html

> Three standard message formats are provided for this purpose; you can also provide code for your own custom format.

- > The first of the three standard formats is length-header, in which case a 4 byte length header precedes the data;
- > The second is stx-etx in which the message data is preceded by an STX (0x02) character and terminated with an ETX (0x03) character.
- > The third is crlf in which the message is terminated with a carriage return and line feed (\r\n).

...

> The length-header format can also handle binary data. The other two formats can only handle text data (specifcally, data that does not contain characters 0x02 and 0x03 for stx-etx and 0x0d and 0x0a for crlf). This limitation can be avoided by appropriate character escaping techniques in the application layer.
CloudWatch エージェントは SSM エージェントと呼ばれる別のエージェントに移行されましたとさ

# ログは外に出しますよね

EC2 の Windows インスタンスでイベントログやアプリケーションログを CloudWatch Logs に転送して運用しています。
ログを見るためにいちいちインスタンスに入る必要もないし、必要なログがインスタンス外にあることで AutoScaling でインスタンスが勝手に破棄されても大丈夫という設計です。

# これまで

ログ転送設定を ``C:\Program Files\Amazon\Ec2ConfigService\Setting\AWS.EC2.Windows.CloudWatch.json`` に書いて EC2Config サービスを再起動することでインスタンスごとにログ転送の仕方を設定していました。
これを CodeDeploy の Hook スクリプトで行い、アプリケーションの配置と同時にログが指定した（アプリケーションごとの）ロググループにロストすることなく集めることができていました。
ちなみに Windows Server 2012 R2 です。

# EC2Config ログ転送やめるってよ

あるとき、こんな記事を見つけました。
[Windows ServerのCloudWatch LogsをSSMで行う ｜ Developers\.IO](http://dev.classmethod.jp/cloud/aws/set_cloudwatch-logs_on_windows-server_with_ssm/)

> 従来のEC2 Configの設定を行っても、CloudWatch Logsへログの転送が行われないので注意してください。

え？まじで？
試しに新しい AMI で試してみましたがやっぱりログは転送されません。
今後は SSM で設定しなくちゃいけないのかと調べましたが、どうもやりたいことができません。
やりたいことって何よ？を書くと長くなりそうなんで書きませんが、とにかく、インスタンスに置いたローカルファイルからログ転送設定をしたいんです。

# どうも SSMAgent です

[EC2Config バージョン履歴的なドキュメント](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/WindowsGuide/ec2config-version-details.html) を確認したらなんだかローカル設定ファイルを使えそうな雰囲気が・・・

> ローカル設定ファイル (AWS.EC2.Windows.CloudWatch.json) を使用して、インスタンスで CloudWatch の統合を有効にしている場合、SSM エージェントと連携して動作するようファイルを設定する必要があります。詳細については、「Windows Server 2016 インスタンスで CloudWatch 統合用のローカル設定ファイルを使用する」を参照してください。

お？・・・え？ Windows Server 2016 だけなん？

結局、サポートに問い合わせて回答をいただきました。

> CloudWatch Logsの設定方法
> -------------------------
> これまでと同様にローカルのファイルをお使い頂けますが、CloudWatchもしくはCloudwath Logsの設定変更が必要な場合には、下記の手順を実施頂くようお願いいたします。
> 
> 1. Amazonssmagent サービスを停止します。
コマンドプロンプトで net stop amazonssmagent　を実行することで停止できます。
> 2. ``C:\Program Files\Amazon\SSM\Plugins\awsCloudWatch\AWS.EC2.Windows.CloudWatch.json`` を削除いたします。
> 3. ``C:\Program Files\Amazon\Ec2ConfigService\Setting\AWS.EC2.Windows.CloudWatch.json`` の内容を編集いたします。
> 4. Amazomssmagent サービスを開始します。
> コマンドプロンプトで net start amazonssmagent　を実行することで開始できます。
> 
> 新しい設定が反映されますと、AWS.EC2.Windows.CloudWatch.json　の内容が　``C:\Program Files\Amazon\SSM\Plugins\awsCloudWatch\AWS.EC2.Windows.CloudWatch.json`` に出力されます。
> テキストファイルの改行コードが変わり、Headerが追加されますが、影響はございませんので、無視頂くようお願いいたします。

・・・ふむ。
これ通りに試したところ、無事にログ転送がされました。

極端なことを言ってしまえば僕のケースでは、再起動するサービスを EC2Config から SSMAgent に変えるだけで良かったと言う話です。（担当部署が変わったからそっちに聞いて的な）
でもあくまで設定ファイルの大本は今まで通り EC2Config の下にあるファイルで、それを読み込んで SSM の下のワークスペース的なところに保持するって感じなんですね。

# まとめ

* 新しい Windows AMI でも CloudWatch Logs のログ転送設定をローカルファイルで行える
* ただし扱うサービスは SSMAgent
* ファイルの置き場に注意
* AWS のドキュメントはやっぱり追いつくのが遅い
* AWS のサポートは丁寧で助かる
.NET の ColorTranslator.FromHTML() の処理を高速化してみました

.NET で、Web,CSS の色をパースする際に、"#fff" や "#ff0000" などの色を指定されている文字列を解析し System.Drawing.Color を取得するためには、ColorTranslator.FromHTML() が利用可能ですが、ベンチマークしてみると多少遅いため、高速化できるか試してみました。

前提としては、名前付きの色などは、別対応としています。
<pre>
public static System.Drawing.Color getColorFromHexHtmlFaster(string str)
        {

            char[] cs = str.ToCharArray();
            int cslen = cs.Length;
            if (cs[0] == '#')
            {
                switch (cslen)
                {
                    case 4:
                        return System.Drawing.Color.FromArgb(255, convertHexcharsToInt32(cs[1], cs[1]), convertHexcharsToInt32(cs[2], cs[2]), convertHexcharsToInt32(cs[3], cs[3]));
                    case 7:

                        return System.Drawing.Color.FromArgb(255, convertHexcharsToInt32(cs[1], cs[2]), convertHexcharsToInt32(cs[3], cs[4]), convertHexcharsToInt32(cs[5], cs[6]));

                    default:
                        return System.Drawing.Color.Transparent;
                }

            }else
            {
                return Color.Transparent;
            }
        }
        internal static int convertHexcharsToInt32(char c1, char c2)
        {

            return (getHexCharToInt(c1) * 16) + getHexCharToInt(c2);
        }

        internal static int getHexCharToInt(char c)
        {

            switch (c)
            {
                case '1':
                    return 1;
                case '2':
                    return 2;
                case '3':
                    return 3;
                case '4':
                    return 4;
                case '5':
                    return 5;
                case '6':
                    return 6;
                case '7':
                    return 7;
                case '8':
                    return 8;
                case '9':
                    return 9;
                case 'A':
                case 'a':
                    return 0xa;
                case 'B':
                case 'b':
                    return 0xb;
                case 'C':
                case 'c':
                    return 0xc;
                case 'D':
                case 'd':
                    return 0xd;
                case 'E':
                case 'e':
                    return 0xe;
                case 'F':
                case 'f':
                    return 0xf;
                case '0':
                default:
                    return 0;
            }

        }

</pre>

このコードで、ColorTranslator.FromHtml() よりおよそ、1/3 程度まで、処理時間が短縮できました。

<pre>
[Benchmark Result]
ColorTranslator.fromHTML() took 1503 ms Color [A=255, R=255, G=0, B=0]
Faster fromHTML() took 451 ms : Color [A=255, R=255, G=0, B=0]
</pre>
C#覚書 net use コマンド

VisualStusio2012のC#で、net useコマンドを使用してサーバーに接続しています。
実は、Javascript側で実施していた処理だったのですが、Edge対応でサーバーサイドで処理することになり調査・実装しました。

#参考サイト
http://piyopiyocs.blog115.fc2.com/blog-entry-261.html
https://social.msdn.microsoft.com/Forums/ja-JP/7aa9ee0f-4ad2-436b-b5ed-ad11cc6f78e3/net-use?forum=csharpgeneralja
http://d.hatena.ne.jp/nurs/20130404/1365090460

#ハマったところ
**1. WaitforExitで待っても戻ってことない**
　　「/c」オプションを追加する事で解決。
　　上記オプションを追加する事で、起動したコマンドプロンプト上で【コマンド】を実行した後、
　　コマンドプロンプトを終了することになるそうです。
　　（知らなかった…)

**2. 接続出来ない**
　　ユーザーIDの前にドメイン名をつける事で解決。
#実装ソース
**接続処理**

```c#:open.cs
// nert use 接続
                        System.Diagnostics.Process open = new System.Diagnostics.Process();
                        open.StartInfo.FileName = "cmd.exe";            // コマンド名
                        open.StartInfo.Arguments = "/c";                // 引数①
                        open.StartInfo.Arguments += "net user 接続先 パスワード /user:ユーザーID";            // 引数②
                        open.StartInfo.CreateNoWindow = true;           // DOSプロンプトの黒い画面を非表示
                        open.StartInfo.UseShellExecute = false;         // プロセスを新しいウィンドウで起動するか否か
                        open.StartInfo.RedirectStandardOutput = true;   // 標準出力をリダイレクトで取得したい
                        open.Start();
                        open.WaitForExit();
```

**切断処理**

```c#:close.cs
// nert use 接続
                        System.Diagnostics.Process open = new System.Diagnostics.Process();
                        open.StartInfo.FileName = "cmd.exe";            // コマンド名
                        open.StartInfo.Arguments = "/c";                // 引数①
                        open.StartInfo.Arguments += "net user 接続先 /delete";            // 引数②
                        open.StartInfo.CreateNoWindow = true;           // DOSプロンプトの黒い画面を非表示
                        open.StartInfo.UseShellExecute = false;         // プロセスを新しいウィンドウで起動するか否か
                        open.StartInfo.RedirectStandardOutput = true;   // 標準出力をリダイレクトで取得したい
                        open.Start();
                        open.WaitForExit();
```
iPhoneシミュレータでSimpleAudioEngineのプリロードや再生などでエラーがでる場合の解決方法

iPhoneシミュレータでSimpleAudioEngineのプリロードや再生などでエラーがでるようになった。
m4aファイルでも何故かエラーが出てたのでCocos2d-x側の問題？と考えたが
シミュレータなので開発環境のmacで何かが悪さをしていると考えた。

* * *
結論：
仮想サウンドデバイスであるSoundflowerが悪さをしているため
これをアンインストールする

* * *

アンインストール方法
１.
https://github.com/mattingalls/Soundflower/releases
からsoundflowerのdmgファイルをダウンロード
２.
dmgをマウントして展開しその中の、uninstall soundflower.scptを開いて
削除できそうなボタンをクリックする

* * *

iPhoneシミュレータ限定になるが、
Cocos2d-xやゲームエンジンのゲームをシミュレータで実行させてサウンド関係で
エラーが起きる場合は仮想サウンドデバイスがインストールされているならばそれを削除してみるといい
Excel 経過日数を「○年○日経過」で表示させたいだけ

# やりたかったこと 2016/05/15 → 「○年○日経過」

`=DATEDIF`以外のサンプルが見つからなかったからやった。

# 雑な解決

※（つかわないとおもいますが）うるうどし考慮していないので業務などでつかわないでください。

```
[A1]：=2006/05/15
// TODAY() =2017/02/21 のとき

// 経過日数を出す
[B1]：=TODAY()-A1
>3935

// ○年○日経過 と出力する
[C1]：
=IF(ROUNDDOWN(B1/365,0)>0,ROUNDDOWN(B1/365,0)&"年","")&ROUNDDOWN(MOD(B1,365),0)&"日経過"
>10年285日経過
```

## 備忘録
```
// 日数（3935）を365日で割った数が0より大きければ ”○年”
=IF(
   ROUNDDOWN(B1/365,0)>0,
   ROUNDDOWN(B1/365,0)&"年",
   ""
)
// 日数を365で割った余りを、”○日経過”
&ROUNDDOWN(MOD(B1,365),0)
&"日経過"
// ROUNDDOWN(N,0)、小数点以下切り捨て
// MOD(N,M)、N%Mの計算
```
公開slackチーム作りました

クラウドを活用していく上で、いろいろサービスを使ってみた過程で生じた困ったことや、共有したいこと、こんな便利なサービスがあるよ〜とか、社内外関係なくみんなで話せる場欲しいよね〜って流れで作ってみました！
### 参加方法
下記URLにメアド入力するとinviteが飛ぶので、joinすれば完了です。
https://clouddevelopers-slack.herokuapp.com/

<img width="616" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/74698/0023f2ba-3867-0e0e-7668-3ebfd03dd495.png">

slackの使い方については、よさそうな記事があったのでこちらを参照してください。
http://qiita.com/shizuma/items/6fc86e4718ff912d76e8

皆さんで、ベストプラクティスを目指しましょう！
VisualStudio2012覚書 Gitの使い方

VisualStudio2012を使用して開発している中で、チームエクスプローラでのGitの使い方をすぐに忘れちゃうので覚書。（今後も追記予定です）

#前回コミットしたソースとの差分を確認したい
1. 「ホーム」→「Changes」の順にクリックする

2. 「Changes」の中の「Included Changes」の下に前回コミットから差異のあるソースが表示される

3. 差分を確認したいソースを右クリックすると下記のメニューが表示されるので、「Compare with Unmodified...」をクリックする
　![image](https://qiita-image-store.s3.amazonaws.com/0/67341/d334dac7-1fe4-b6ca-2ce2-1d8273121b4b.png)

4. 左側に前回コミットソートと変更後のソースが並んで表示されるので、差分を確認することが出来る
PetaLinux / MicroZed > AJ. Vivado > Address Editorを元にしたdtsの書き方例 / uioのapplication

```txt:動作環境
PetaLinux 2014.4
Vivado v2014.2
MicroZed
```

2014年のメモより。

[Zynq-7000 AP SoC Spectrum Analyzer part 5 - Accelerating Software - Accelerating an FFT with ACP Coprocessor Tech Tip 2014.3](http://www.wiki.xilinx.com/Zynq-7000+AP+SoC+Spectrum+Analyzer+part+5+-+Accelerating+Software+-+Accelerating+an+FFT+with+ACP+Coprocessor+Tech+Tip+2014.3)


```bash
fft_1: fft-axi-dma@40400000 {
compatible = “generic-uio”;
interrupt-parent = <&ps7_scugic_0>;
interrupts = <0, 52 4>;
reg = <0x40400000 0x10000>;
};
 
The fields of the description are:
- fft_1:
Just a label in the dts
fft-axi-dma:
The name that will show up in the PetaLinux/sys file system describing this device
@40400000:
The address on the bus in Hex for documentation purposes (Recall that we verified this address when the hardware was built in Vivado.)
compatible="generic-uio":
States that this is compatible with the driver named "generic-uio" - This is critical to link the DMA engine to user space I/O
interrupt-parent=<&ps7-scugic_0>:
States that interrupts from this device go to that controller described elsewhere in the dts
interrupts=<0, 52, 4>:
The 52 is the number assigned in IRQ_F2P minus 32. The numbers 0 and 4 are required for proper operation of IRQ_F2P interrupts.
reg=0x40400000 0x10000:
This specifies that this device has a 0x10000 (64K) address space starting at 0x40400000 (Recall that we verified this address when the hardware was built in Vivado.)
```

上記を参考にsystem-top.dtsファイルを以下のように編集したら、/dev/uio0が見えるようになった。
この例ではoutput(LED点灯など)の書き方をしている。 inputの場合は、別途interruptなどの指定が必要となるそう。

```
/dts-v1/;
/include/ "system-conf.dtsi"
/ {
axi_gpio@41200000 {
    compatible = "generic-uio";
    reg = < 0x41200000 0x10000>   ;
};
};
```

uioのapplicationは [svenandのコード](http://svenand.blogdrive.com/files/gpio-uio-test.c) をPetaLinuxのアプリケーションとして作成すればいい。
アプリケーションの名前をledappとした場合

```
$ /bin/ledapp -d /dev/uio0 -o 1
```
とするとzedboardのLD0が点灯することを確認した。
同様に

```
$ /bin/ledapp -d /dev/uio0 -o 2
$ /bin/ledapp -d /dev/uio0 -o 3
```
などでLD1、LD0+LD1が点灯する。
PetaLinux / MicroZed > AI. プロジェクトの作成からBOOT.BIN / image.ubの作成まで (+ Vivadoのhdfファイル取込み)

```txt:動作環境
PetaLinux 2014.4
Vivado v2014.2
MicroZed
```

2014年のメモ。

VivadoにてhdfファイルのExportまでをやっておく。Vivadoに関して参考にしたのはこちら [Creating a Base System for the Zynq in Vivado @ fpgadeveloper](http://www.fpgadeveloper.com/2014/07/creating-a-base-system-for-the-zynq-in-vivado.html)
以下のコマンドに関して参考にしたのは、UG980 Board Bringup Guide.

```bash
// Petalinuxプロジェクト(plnx_proj)の作成. /home/user/work以下にplnx_projを作る例
$ cd /home/user/work
$ petalinux-create --type project --template zynq --name plnx_proj
  
// Vivadoのhdfファイルの取込み
$ cd <directory which contains hardware description file>
$ petalinux-config --get-hw-description -p /home/user/work/plnx_proj
ここでconfigurationが実行されるので、以下の設定をすることでmicroSDからの起動ができるようになる。
  
1. Under "-*-Subsystem AUTO Hardware Settings---", enable "Advanced bootable images storage Settings -->"
2. Select "Advanced bootable images storage Settings"
3a. Select "boot image settings", then select "image storege media (primary sd)", then select "( )primary sd"
3b. Select "u-boot env partition settings", then select "image storage media (primary flash)", then select "( )primary flash"
3c. Select "kernel image settings", then select "image storage media (primary sd)", then select "( ) primary sd"
3d. Select "jffs2 rootfs image settings", then select "image storage media (primary flash)", then select "( ) primary flash"
3e. Select "dtb image settings", then select "image storage media (from boot image)", then select "from boot image"
  
上記を選択した後、configurationを終了する。
  
// ビルド. 10分程度かかる
$ petalinux-build
  
// BOOT.BINの作成
$ petalinux-package --boot --fsbl images/linux/zynq_fsbl.elf --uboot
(FPGAのbitstreamがある場合は、以下のようにする)
$ petalinux-package --boot --fsbl images/linux/zynq_fsbl.elf --fpga <FPGA bitstreadm> --uboot
```

上記で作成されるBOOT.BINとimage.ubをmicroSDにコピーして起動すればよい。
 
起動した時に"U-Boot-PetaLinux>" で表示が止まり、以下でPetalinuxが起動する場合は "-*-Subsystem AUTO Hardware Settings—" あたりの設定が失敗しているのでpetalinux-configをやり直して設定を修正すること。
 
```
U-Boot-PetaLinux> setenv bootcmd 'run sdboot' ; saveenv ; reboot
```
PetaLinux / MicroZed > AH. PHYのトラブル (v2014.2)

```txt:動作環境
PetaLinux 2014.4
Vivado v2014.2
MicroZed
```

2014年のメモより。

[no PHY setup on Zedboard using petalinux 2014.2](http://zedboard.org/content/no-phy-setup-zedboard-using-petalinux-20142)
 
Petalinux-createでプロジェクトを作ってhdfを取り込んだものからBOOT.BINを作成した時、PHYがうまく動かないとのこと。
>bkamen on Wed, 2015-01-07 10:23. によると
 
>realized the Ethernet fixes that go in system-top.dts go OUTSIDE the top set of lines.
 
とのこと。
petalinux-createにて作成したプロジェクトにおいてsystem-top.dtsを見ると以下のようになっている。

```
/dts-v1/;
/include/ "system-conf.dtsi"
/ {
};
```

上記をprebuilt BSPから作成したプロジェクト(Ethernetが正常認識する)内のsystem-top.dtsを参考に以下のようにするとEthernetを認識するようになった。

```
/dts-v1/;
/include/ "system-conf.dtsi"
/ {
};
    &ps7_ethernet_0 {
        phy-handle = <&phy0>;
        phy-mode = "rgmii-id";
         
        mdio {
            #address-cells = <1>;
            #size-cells = <0>;
            phy0: phy@0 {
                compatible = "marvell,88e1510";
                device_type = "ethernet-phy";
                reg = <0x0>;
                marvell,reg-init = <3 16 0xff00 0x1e 3 17 0xfff0 0x00>;
            };
        };
    };
```

この問題はv2014.4では修正されている。
PetaLinux / MicroZed > AG. BOOT.binの作成の仕方 (Petalinux Tools使用による)

```txt:動作環境
PetaLinux 2014.4
Vivado v2014.2
MicroZed
```

### 準備
PetaLinux Toolsのpetalinux-packageコマンドを使用する。
ただし、petalinux-package --bootを実行するには、XSDKに含まれるbootgenというコマンドが必要となる。
CentOSにてXSDKをインストールし、bootgenがあるフォルダに環境変数PATHを設定しておく必要がある。
 
### 実行
（参照) ug980-XXX.pdf p12
Petalinuxのルート (e.g. Avnet-MicroZed-z7010-v2014.2/)においてpetalinux-buildを完了したのち、以下を実行する

```bash
$petalinux-package --boot --fsbl images/linux/zynq_fsbl.elf --uboot
```
BOOT.BINが作成される。 このBOOT.BINファイルとimages/linux/image.ub をmicroSDにコピーすればmicroSDブートできる。
 
FPGA bitstreamも含める場合は --fpage <FPGA bitstream>をオプションに追加する

```bash
$petalinux-package --boot --fsbl image/linux/zynq_fsbl.elf --fpga <FPGA bitstream> --uboot
```
 
### メモ
v2014.2からPetaLinux ToolsでBOOT.binまで作成できるようになったとのこと。
v2013.12などの説明ではXSDKを起動してBOOT.binを作成するように説明されていた。 v2014.2でもXSDKを起動してBOOT.binを作成できるが、PetaLinux Toolsを用いて作成する方が短時間の作業となる。
PetaLinux / MicroZed > AE. XSDK > Unable to load license rights into trusted storage エラー

```txt:動作環境
PetaLinux 2014.4
MicroZed
Vivado v2014.2
```

2014年のメモより。

＜症状＞
XSDKのライセンス形態が最近変更になったらしい
それにともない、Virtual machine上でのXSDKでのライセンス認証でこの問題が起きている
VirtualBox上のUbuntsuに入れたXSDKでは問題が起きないという例もある
 
[link](https://forums.xilinx.com/t5/Installation-and-Licensing/Vivado-license-load-failed-Unable-to-load-License-Rights-into/td-p/532491) – It workedという返答があるが、どうやったかの詳細がよくわからない
[link](http://svenand.blogdrive.com/archive/206.html#.WKueTG-LSUm) – Martinによるコメント > Activation Based Licensing currently does not seem to work on Virtual Machines
[link](http://svenand.blogdrive.com/archive/206.html#.WKueTW-LSUl) – コメントで「As you can see I am using VirtualBox to run Vivado and there it works for me.」
iPadから帳票を印刷したい！！

iPadから帳票を印刷するための方法を検討中。
今回は、Webアプリで作る予定。

***
**ASP.NETで帳票の印刷機能を実現しよう**
参考サイト：http://codezine.jp/article/detail/5910?p=4
　　　　　　http://aspnet.keicode.com/basic/reporting-basic.php
　　　　　　http://okwave.jp/qa/q8486358.html
　　　　　　http://lab.fine-net.com/?p=159

ASP.NETで帳票イメージページを作って、「PDF出力」機能を利用して印刷イメージをそのままPDFファイルに出力する

![image](https://qiita-image-store.s3.amazonaws.com/0/67341/c3e8fd72-f264-3d48-e27c-55c2e6a9f93b.png)



***
**レポートをプログラムで印刷する方法**
LocalReport オブジェクトおよび CreateStreamCallback コールバック関数を使用して、レポートを表示せずにプログラムによって印刷する方法があるらしい
参考サイト：https://msdn.microsoft.com/ja-jp/library/ms252091.aspx

.NET ASPで帳票を出力して、画面にプレビューを出して、ＯＫならばプログラムで印刷する方法をとれば、サーバーから印刷出来るんじゃないだろうか？？？

***
**JasperReportsで帳票出力してみた**
参考サイト：http://dev.classmethod.jp/server-side/java/jasperreports-tutorial/
　　　　　　http://ja.wikipedia.org/wiki/JasperReports
　　　　　　http://d.hatena.ne.jp/toshiyuki_saito/20080324/1206338866

ASP.NETと同様にPDFファイルを出力することができる。
多分、サーバー側に。
しかも.NETから起動できるみたい。

***
**JasperReportsで直接プリンターに印刷**
参考サイト：http://blog.livedoor.jp/nse21_user/archives/50125175.html
　　　　　　http://d.hatena.ne.jp/toshiyuki_saito/20080328/1206625226

JasperReportsからプリンターに直接印刷できるなら、PHPとはこっちの方が相性がいいかも。

***
**サーバーからの Web ベースのレポートの印刷**
参考サイト：https://msdn.microsoft.com/ja-jp/library/aa290045(v=vs.71).aspx

***
**Adobe Readerをサーバーにはインストールできないので**
参考サイト：http://www.sumatrapdfreader.org/free-pdf-reader-ja.html

オープンソースの「Sumatra PDF」を利用するのはどうだろう？？？
一応提案の中に含めてみようかなぁ…

***
**ASP.NET 実行環境に関するあれこれ**
参考サイト：http://d.hatena.ne.jp/PoohKid/20060511/p1

***
**Windows 8/7/Vista に IIS をインストール**
参考サイト：http://awoni.net/personal-site/iis
ライセンスについて調査

サーバーから帳票を出力する為に使用するツールを検討している。
その中で、候補にあがったのが「JasperReportsLibrary」

参考サイト：http://dev.classmethod.jp/server-side/java/jasperreports-tutorial/
　　　　　　http://forum.samuraiz.co.jp/cfjasper/01.html

ダウンロード
　JasperReprtsLibrary：http://community.jaspersoft.com/project/jasperreports-library
　JaspersoftStudio:http://community.jaspersoft.com/project/jaspersoft-studio

***
オープンソースなので、幅広く使われている帳票出力ツールらしいが、懸念事項はライセンスの問題。「JasperReprtsLibrary」のライセンスは「LGPL」になっている。

参考サイトでは
>JasperReports LibraryはLGPL、Jaspersoft StudioはEclipse Licenseで利用できます。したがって、通常の利用範囲であれば業務用途に利用しても問題ありません。

と記載されているのが一応調査することに。

***
まずは、ウィキペディアで記載されていた下記の文章の意味から調べる

>ライセンス CE版：LGPL/EE版：商用

CE版とは、無償版の事、EE版とは、有償版の事だそうです。

>無償のコミュニティ版と有償のエンタープライズ版がある

違いは、下記のサイトにまとめてある。
http://community.jaspersoft.com/wiki/komiyuniteiban-toshang-yong-ban-nobi-jiao
※無償版のライセンスが「GPL」になっているが、ダウンロードサイトでは「LGPL」になっているので誤記か、情報が古い可能性がある。

***
**LGPLとは(GNU Lesser General Public License)**

参考サイト：http://jehupc.exblog.jp/9618283/
　　　　　　http://itmemolog.blogspot.jp/2010/12/gpllgpl.html
　　　　　　http://matome.naver.jp/odai/2135907643207445801
　　　　　　http://d.hatena.ne.jp/kaiseh/20080517/1211053976
　　　　　　http://oshiete.goo.ne.jp/qa/2982240.html

>GPLの制約を緩めたもの。
動的リンク(Windowsでいう.dllなど)として使用した場合は、呼び出し元のプログラムにはLGPLを適応させる必要がありません。
主にライブラリやモジュールなどに使用されます。

**GPLとは(GNU GPL / GNU General Public License)**
>「フリーソフトウェア」の精神にもとづく代表的なライセンスで、2次的著作物（派生物）にも自由を保証する（コピーレフト）点が特徴です。
すなわち、GPLのコードを含むソフトウェアはGPLで配布しないといけません。また、配布の際にはソースコードの公開が必須となります。
こういった特徴から、開発者の間では「GPL汚染」などと呼ばれ敬遠されることも多いです。

>誤解されやすい点ですが、GPLなソフトウェアを作成したら必ずソースコードを全世界に公開しなければいけないわけではありません。
ソースコード公開条件はソフトウェアを配布する際につくものであり、すなわち、ソフトウェアを使う人にだけ公開されていればよいことになります。

***
**動的リンクって？？？**

>プログラムの実行に必要なライブラリやモジュールなどを、実行時にリンク(連結)すること。動的リンクにより利用するよう想定・設計されたライブラリファイルを動的リンクライブラリ(DLL：Dynamic Link Library)という。

***
**結論として、LGPLライセンスのライブラリーを使ってもいいの？？？**

解釈がたくさんあって、ダメという人もいれば、いいんじゃないという人もいる。

参考サイト：http://www.iplatform.org/develop/oss/oss_tech.htm
>LGPLのもとに配布された著作物Ａを改変して派生物Ａ'を作成し、Ａ'を再配布するときにはＡ'にもLGPLを適用しなければならない。ただしＡを改変することなく、Ａ'に１ライブラリとしてＡを含めて再配布する場合は、Ａ'にLGPLを適用しなくても問題ないと解釈されている。

参考サイト：http://www.gnu.org/licenses/lgpl-java.html
>FSFの立場は、一貫して不変のままです: LGPLは意図したとおりに、Javaを含めて、すべての知られているプログラミング言語で機能します。LGPLのライブラリとリンクするアプリケーションはLGPLでリリースされる必要はありません。アプリケーションはLGPLの第6節の要求事項に従うことだけが必要とされます。すなわち、新しいバージョンのライブラリがアプリケーションとリンクできるようにすること、および、アプリケーションをデバッグできるようにリパースエンジニアリングを認めることです。

**リパースエンジニアリングとは**
>ソフトウェアやハードウェアなどを分解、あるいは解析し、その仕組みや仕様、目的、構成部品、要素技術などを明らかにすること。プログラムの分野では、モジュール間の関係の解明やシステムの基本仕様の分析といった行為を含む。
JasperReports覚書

**JasperReportsを使って帳票を出力するために、色々と試して調査中!!**
***
参考サイト：http://dev.classmethod.jp/server-side/java/jasperreports-tutorial/
　　　　　　http://www.atmarkit.co.jp/ait/articles/1012/01/news143.html

***
**①帳票デザインツールの「JaspersoftStudio」をインストールする**
ダウンロードサイト:http://community.jaspersoft.com/project/jaspersoft-studio

　インストールの手順は特に問題ないと思います。

**②JRXMLの作成**
　こちらも、参考サイト様「JasperReportsで帳票出力してみた」の手順通り進める
　
　初めてだったので、操作を間違っていたのかここでのフォント設定がうまくいっていなかった事が原因で、プレビュー表示時に日本語が文字化けする現象が発生した。

最終的に、フォント設定をやりなおす事で正常に表示されるようになったが…
ちょっと腑に落ちない。

**③Eclipseのインストール**
　参考サイト：http://www.javadrive.jp/eclipse3/


**④JasperReports Libraryによる帳票出力**
　この工程はまだ試してない。

**⑤データベースをMySQLに変更して帳票出力**
　最終的に本番では、データベースをMySQLにする予定なので、ここまで稼働できる事を確認しておきたい。
PetaLinux / MicroZed > AD. PetaLinux Custom BSPの作成 (XSDK)

```txt:動作環境
PetaLinux 2014.4
MicroZed
Vivado 2013.10 / 2014.2
```

2014年のメモより。

~~[Zynq design from scratch. Part 41. @ svenand (tutorial)](http://svenand.blogdrive.com/archive/202.html#.WKudbW-LSUl)にある手順をもとにPetaLinux BSPを作成する~~
VIVADOで作成する .hdf ファイルをimportするようだ
 
上記のsvenand記載の方法はV2013.10のやり方。V2014.2以降はXSDKを使わないでPetaLinux toolでcustom BSPを作るようになったようだ。

```bash
$ petalinux-create --type project --template zynq --name zynq_proj
にてプロジェクトを作成し
$ petalinux-package --bsp -p zynq_proj -o custom.bsp
にてcustom BSPを作成できた。
  
あとは、.hdfファイルやbitstreamなどのファイルをpetalinux-create時に指定するようであるが、詳細は未調査。
```

[link](https://forums.xilinx.com/t5/Embedded-Linux/How-generate-custom-BSP-for-Petalinux/td-p/551097) – petalinux-package --bsp ...の記載あり
Oracle覚書

**Windows7のtnsnames.oraの置き場所**

2015/7/28現在で使用している開発機のtnsnames.oraの置き場所は下記の通り。
(すぐに忘れてしまうので、メモしとこうと思います^^;)

C:\app\User名\product\11.2.0\client_1\network\admin

**同一のSERVICE NAMEを使用している場合**
参考サイト：http://qiita.com/tajihiro/items/13322c89ac5904d0ce2f

使用中のＤＢをテスト用に別サーバーに移行したので、tnsnames.oraの接続先を変更して、他の項目は同じ内容で設定した。その後、ObjectBrowserを起動したら…「リスナーは接続記述子でリクエストされたサービスを現在認識していません」とエラーが出て接続できず(>_<)

困っていた時に、参考サイト様を発見！！
同じ様に、片方はSERVICE_NAMEを設定し、もう片方はSIDの設定をしたらエラーが出なくなった。

原因は、落ち着いたら調べようと思います^^;
はてブボタンが黒背景でダサい問題を解決する

はてなブックマークボタンが新しくなりました。

![image](https://qiita-image-store.s3.amazonaws.com/0/6117/584e2122-e3bf-5085-7b16-07795217b9aa.png)

これが

![image](https://qiita-image-store.s3.amazonaws.com/0/6117/2b7767e9-3b17-37df-495f-65fe68328237.png)

こう変わったのですが、

黒背景では、

![image](https://qiita-image-store.s3.amazonaws.com/0/6117/13fe015d-60d8-9133-dbd5-9dab708d04fb.png)

これが

![image](https://qiita-image-store.s3.amazonaws.com/0/6117/48a7904f-6c53-4119-83c6-140b31920b4b.png)

こうなってしまいます！ダサい！

# 解決策

```css:common.css
.hatena-bookmark-button-frame {
  border-radius: 4px;
}
```

角丸のCSSを追加。

![image](https://qiita-image-store.s3.amazonaws.com/0/6117/b2b81f7c-0f2d-b70d-cbc3-ef88a5d4fd99.png)

これで万事解決！
Access覚書

**アクションクエリ実行時の確認メッセージを非表示にする**
参考サイト様：http://hamachan.info/win7/Access/message_d.html

忘れてしまうので、覚書に追加。
Accessのオプションの[クライアントの設定]→[確認]→[アクションクエリ]のチェックボックスをオフ

* * *
**Accessのクエリで、文字列のバイト数をカウントする**
参考サイト様：http://pckowaza.web.fc2.com/html/access_access2007_query_byte_count.html

LenB(StrConv([対象フィールド],128))で、バイト数を取得できる

* * *
**Access クエリで抽出条件として日付を使用する**
参考サイト様：https://support.office.com/ja-jp/article/Access-%E3%82%AF%E3%82%A8%E3%83%AA%E3%81%A7%E6%8A%BD%E5%87%BA%E6%9D%A1%E4%BB%B6%E3%81%A8%E3%81%97%E3%81%A6%E6%97%A5%E4%BB%98%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B%E4%BE%8B-aea83b3b-46eb-43dd-8689-5fc961f21762?ui=ja-JP&rs=ja-JP&ad=JP

システム日付：Date()
昨日の日付：Date()-1
明日の日付：Date() + 1

固定で日付を指定する時(2015/4/1の場合)：#4/1/2015#   

* * *
**VBAでクエリーを開く**
参考サイト様：http://www.happy2-island.com/access/gogo03/capter60004.shtml

DoCmd.OpenQuery "クエリー名"

* * *
**AccessからOracleに接続/切断(OO4O)**
参考サイト様：http://www.sanryu.net/acc/tips/tips237.htm
　　　　　　　http://mitene.or.jp/~rnk/TIPS_VB_oo4o.htm
　　　　　　　http://www.red.oit-net.jp/tatsuya/vb/Oracle.htm#OpenDatabase

![image](https://qiita-image-store.s3.amazonaws.com/0/67341/ccbe7c0b-b3bc-411e-b388-28aa7aabf8c5.png)

**AccessからOracleにSQL実行 - 削除(OO4O)**
参考サイト様：http://www.sanryu.net/acc/tips/tips244.htm
![image](https://qiita-image-store.s3.amazonaws.com/0/67341/03199a6d-b1c6-003a-4604-c08b7282a5c4.png)

**TRUNCATEで削除する場合**
参考サイト様：http://luna.gonna.jp/oracle/ora_delete.html
　　　　　　　http://oracle.se-free.com/ddl/A2_trancate.html

TRUNCATE TABLE "削除するテーブル名";

* * *
**エラー時処理**
参考サイト様：http://jutememo.blogspot.jp/2009/04/access-vba.html

* * *
**マウスポインターの変更**
参考サイト様:http://www.k-sugi.sakura.ne.jp/windows/vb/1350/

![image](https://qiita-image-store.s3.amazonaws.com/0/67341/20ea8c7d-67a8-f55b-12fd-9106faf80785.png)

* * *
**メッセージ表示**
参考サイト様:http://www.moug.net/tech/exvba/0100033.html

■メッセージを表示するだけなら

　MsgBox "処理が終了しました！"

■アイコンを付けたいなら

　MsgBox "処理が終了しました！", vbOK + vbInformation

![image](https://qiita-image-store.s3.amazonaws.com/0/67341/cc7e64f7-ea70-7bca-efd4-58fef5a91c2f.png)

■タイトルも付けたいなら

　MsgBox "処理が終了しました！", vbOK + vbInformation,"処理終了"

* * *
**月末日を取得する方法**
参考サイト様：http://www.office-kitami.com/lesson/afunction/dateserial.html

DateSerial関数を利用して、月末日を取得する。
日付を「0」に設定すると、設定した月の前月の末日を取得できる。
なんて便利なんだ！！

![image](https://qiita-image-store.s3.amazonaws.com/0/67341/7cc4cf11-59b1-3888-558d-189b435b1837.png)

今回、偶然？にも編集前のデータベースが、年・月・日に項目が分かれていたので使いやすかった！！

* * *
**VBAのInteger型**

移行元のSQLSeverの型がintだったので、加工するためのプログラムで用意した変数も
Integer型でいいのでは～と思ったら大誤算でした^^;

VBAでのInteger型の扱える範囲は「-32,768 ～ +32,767」
ちなみにLong型の扱える範囲は「-2,147,483,648 ～ +2,147,483,647」

SQLServerのint型の場合は「-2,147,483,648～2,147,483,648」
PetaLinux / MicroZed > AC. TCPでの大容量データの送信

```txt:動作環境
PetaLinux 2014.4
MicroZed
```

2014年のメモより。


TCPでzynqからPCへ大容量データ (e.g. 1MB) を送信する場合の考慮点としては、データの終端をPC側にどのように知らせるか？
関連情報としては、 FTPでは EOR(End of Record)=0x01, EOF(End of File)=0x02 という終端用マークがある ( [7key.jp](http://www.7key.jp/nw/technology/protocol/ftp.html) )。
 
処理方法としては以下の、１、2-a、2-b の方法がありそう。

1. サイズ情報をPCへ送り、PC側ではサイズ情報をもとにブロック受信を終了する
2. 終端マークをPCへ送り、PC側では終端マークをもとにブロック受信を終了する
   - a. FTP 終端マークの EOR や EOF を使う > データ部分はEOR, EOFにかぶらないようにBCDにする
   - b. データを固定長(サイズ: X-1)に分割して、Xの部分にEOF情報を付加 (stackoverflowの質問 の質問部分 After Answers... ) 
       - XにEOFの位置情報 [1..X-1] を入れるのだろう
       - そのレコードがEOFを含まない場合は 0 とするのだろう
PetaLinux / MicroZed > AB. Resource temporarily unavailableエラー

```txt:動作環境
PetaLinux 2014.4
MicroZed
```

2014年のメモより。

/bin/myappを実行しようとすると以下のエラーが出た

```bash
# /bin/myapp
Default stack size 8388608[8M]; guard size 4096 minimum is 16384[16K]
set stack size is 1023410176 [976M] pthread_create error. [11][Resource temporarily unavailable]
memory allocate is 1023410176 [976M] malloc error. [12][Cannot allocate memory]
inner thread : [0xb6bfee54]
inner thread : [0xb63fde54]
```

理由は image.ub ファイルを更新し忘れていたということだった。

image.ubを更新していなかったため、[T. POSIXスレッド > 設定などの情報](http://qiita.com/7of9/items/2a376f23b38aaa89fe83)で作業していた標準スタックサイズを調べるプログラムが実行されていたということだった。
PetaLinux / MicroZed > X. ramdisk (initrdとinitramfs)

```txt:動作環境
PetaLinux 2014.4
MicroZed
```

2014年のメモより。

ramdiskとは、ブート時に最小限のドライバを組み込む機能とのこと [[initrdは...]](https://staff.aist.go.jp/k.suzaki/RAMDISK_Linux/)。
Linuxでrootfsをマウントする時に使われるramdiskには以下の２種類がある。

- initrd (Initial RAM Disk)
- initramfs

従来はinitrdが使われてきたが、kernel 2.6からinitramfsが使われるようになってきた。
 
Zynq関連の場合、 [Build and Modify a Rootfs](http://www.wiki.xilinx.com/Build+and+Modify+a+Rootfs) に置かれている arm_ramdisk.image.gz はinitrdのようだ。
一方で、PetaLinuxをビルドした場合、 ビルドされるファイル image.ub にinitramfsが組み込まれているとのこと　

- [This file includes initramfs also](http://unix.stackexchange.com/questions/124296/replacing-default-initramfs-with-my-own)
- [The old initrd was always a separate file, while the initramfs archive is linked into the linux kernel image](https://www.kernel.org/doc/Documentation/filesystems/ramfs-rootfs-initramfs.txt)
 
本ページの「B.」項目にて arm_ramdisk_image.gz を使うように書いているが、これは不要のようだ。


(補足 2017/02/21)
リンク切れがいくつか見られる。
PetaLinux / MicroZed > W. Flash Partition Tableの設定

```txt:動作環境
PetaLinux 2014.4
MicroZed
```

2014年のメモより。


以下の手順でFlash Partition Tableの設定を見ることができる。

1. petalinux-configを実行
2. -- Subsystem AUTO Hardware Settings – をSelect
3. Flash SettingsをSelect

Avnetのprebuild BSPで見たところ、boot / bootenv / kernel / spare というのが設定されている。これが「[U. MTDの中身](http://qiita.com/7of9/items/ebed9ef3f473e6dc0ea9)」と対応しているようだ。
PetaLinux / MicroZed > V. Device Tree Blob関連

```txt:動作環境
PetaLinux 2014.4
MicroZed
```

2014年のメモより。

### V-1. DTBからDTSへの戻し方
以下のようにしてDTBからDTSへ戻すことができる [link](http://masahir0y.blogspot.jp/2014/05/device-tree.html)
```$ fdtdump foo.dtb```

fdtdumpはPetaLinuxのソースの components/linux-kernel/xlnx-3.14/scripts/dtc/fdtdump.c にあるのはわかっているが、ビルドされていない。

### V-2. DTSファイルの書き方
DTS: Device Tree Source
[とあるエンジニアの備忘録](http://masahir0y.blogspot.jp/2014/05/device-tree.html)