OmniAICreator/Qiita-1.07M huggingface dataset:
Intel Edison セットアップ、Wifi設定、ssh接続でつまずいたとこ 2016/8

いろいろあって、小型監視カメラ的なのを作ることになり、

IoTおっかない病の私がつまずきまくりながらセットアップした覚書。(mac) 2016年8月


#1.Edisonの初期化とファームアップデート

Edisonを最新にしよう
http://edison-lab.jp/flash/mac/

まずはこれを見ながら頑張る。

*5.次に、ウェブブラウザでEdisonソフトウェア・ダウンロードページにアクセス。リストの中から、Edisonの最新イメージファイル「Release 2.1 Yocto* complete image」をダウンロードする。

ここで躓くと思う、、、。

リンク先の最新イメージファイルは容量が大きすぎて、Edisonにコピー不可だった。。。

どはまりした、、、。

http://downloadcenter.intel.com/download/24910/Intel-Edison-Software-Release-2-1 
ここの edison-image-ww18-15.zip なら容量たりるので、とりあえずこれ使う




#2. Wifiやデバイスネームの設定


こちらの
http://qiita.com/nenjiru/items/efa78b6685a4f62d3f7e
Edisonを設定する


項目を参考に設定していく！
この辺はつまずかなかった。


#3.ssh接続

デフォルトでは接続できなかった、、、、。

http://dev.classmethod.jp/hardware/edison-ssh/
これ参考に、
/lib/systemd/system/sshd.socketを次のように編集。

```shell-session:sample
[Unit]
Conflicts=sshd.service
 
[Socket]
ExecStartPre=/bin/mkdir -p /var/run/sshd
ListenStream=22
# restrict access to wired access for security reasons
# comment this line to remove restriction
#BindToDevice=usb0  <-これ！！#でコメントアウト->
Accept=yes
 
[Install]
```



レッツ　パワフルなクリエイション！！
２０ｘｘ年問題　まとめ

#2017年問題
4 月 11 日 Windows Vistaのサポート終了

#2020年問題
1 月 14 日 Windows 7のサポート終了

#2038年問題
日付をInteger管理している場合オーバーフローする

#2100年問題
うるう年ではない問題（n/4しかしていない場合問題に）

#2200年問題
うるう年ではない問題（n/4しかしていない場合問題に）

#2300年問題
うるう年ではない問題（n/4しかしていない場合問題に）

#3000年問題

#10000年問題
年が4桁表現できない
Keyboardの開閉でRecyclerViewのスクロール位置を調整する


CustomのRecyclerViewのonSizeChangedをOverrideして、キーボードの開閉に応じたスクロールの調整を行います。


```Java:CustomRecyclerView.java
@Override
public void onSizeChanged(int w, int h, int oldw, int oldh) {
    if (!canScrollVertically(View.SCROLL_INDICATOR_BOTTOM) && oldh > h) {
        /* 最後までスクロール */
    } else if (computeVerticalScrollRange() - computeVerticalScrollExtent() - computeVerticalScrollOffset() < oldh - h) {
        layout(getLeft(), getTop(), getRight(), getBottom());
        scrollBy(0, oldh - h);
    } else {
        scrollBy(0, -h + oldh);
    }
}
```

### 調整方法
縦のScrollのRange、Extent、Offsetを計算してくれる各メソッドの結果から、あとどれくらい下にスクロールできるかを算出し、oldhとhの大小でキーボードが閉じたか開いたかを判断しています。
Range、Extent、Offsetの関係に関しては下のリンクがわかりやすいです。

[Android の Custom View で Scrollbar を使用する](http://kokufu.blogspot.jp/2012/07/android-custom-view-scrollbar.html)


このコードでは横画面に切り替わった時や、キーボード開閉以外でサイズが変わった時などの対応も必要になるため、キーボード開閉のイベントが標準で実装される日が待たれますね。
chromium-browserのタイトルバーを消す

chromeはタイトルバーがないのに・・・と思っていたら外せた。

![スクリーンショット_2016-08-03_15-07-24.png](https://qiita-image-store.s3.amazonaws.com/0/25728/b8b1dbb9-da52-d6ef-707b-7920d2f5eb1c.png)

Settings -> Appearance -> `Use system title bar and borders`

のチェックを外せばよい。

![スクリーンショット_2016-08-03_15-11-22.png](https://qiita-image-store.s3.amazonaws.com/0/25728/e5e5a597-d5d5-07a3-4ad1-cf29c87dc8ac.png)

他のブラウザより縦に広くて良い

メモ: 起動オプション

* [List of Chromium Command Line Switches « Peter Beverloo](http://peter.sh/experiments/chromium-command-line-switches/)
Android周りで気になった記事-2016/04

#Android周りで気になった記事

日々のAndroid周りの記事で気になったものをとりあげています。
情報元は、[juggly.cn](http://juggly.cn/) と[Android developers blog](http://android-developers.blogspot.jp/) がメイン。
日付はちょっとずれてたりすることもあります。
2016/4月分の記事。

## 2016/4月
### 7日
* [ソフトバンク、Xperia Z4に28.0.C.4.146ビルドへのアップデートを配信開始](http://juggly.cn/archives/183714.html)

### 13日
* [Android N Developer Preview 2, out today!](http://android-developers.blogspot.jp/2016/04/android-n-developer-preview-2-out-today.html)

### 14日
* [モバイル型ロボット電話『RoBoHoN(ロボホン)』の販売を開始](http://www.sharp.co.jp/corporate/news/160414-a.html)

### 15日
* [Android Studio 2.0 ](http://android-developers.blogspot.jp/2016/04/android-studio-2-0.html)
Bash on Ubuntu on Windows を使ってみた

# インストール

[Anniversary Update](http://qiita.com/nishimura/items/c62451701f3f706091bd) を実行したあと、
でコントロールパネルから「プログラムと機能」で「Windowsの機能の有効化または無効化を選び

![aniv3.png](https://qiita-image-store.s3.amazonaws.com/0/43406/ddffedeb-5389-d0c9-d915-824f84f69975.png)
Windows Subsystem for Linux (Beta) にチェックを入れる。


その後Windowsキーを押してbashと入力して実行するとインストーラーが起動する。


新しいユーザー名とパスワードを入力して完了したら閉じても良い。スタートメニューに「Bash on Ubuntu on Windows」のプログラムが入っている。
Ubuntu の `/` は `C:\Users\user\AppData\Local\lxss\rootfs` にあり、`home`や`mnt`は`C:\Users\user\AppData\Local\lxss\home` などにある。
作成したユーザーはsudoグループに入っているので、`sudo -i`でrootになれる。




# 設定

ホスト名の名前解決ができませんというエラーが出るので、/etc/hostsにホスト名を追記する。
まず最初はセオリー通りに `apt update` と `apt upgrade` を実行する。Ubuntu本家からDLしていることが分かる。

`ip`コマンドや`ifconfig`コマンドは失敗する。ネットワークはWindows側で設定しろということだろう。


## zsh

`apt install zsh` で `zsh` をインストールする。
「Bash on Ubuntu on Windows」の「ファイルの場所を開く」で開いて、実行ファイルをコピー。
プロパティのリンク先で`bash.exe ~` となっている部分を `bash.exe ~ -c "exec /bin/zsh -l"` に変更する。ファイル名はzshなどとしておいて、スタートメニューにピン留めする。
これでスタートメニューからzshを起動できる。
オプションの「簡易編集モード」にチェックを入れるとコピペがしやすい。

一応 `chsh` で Ubuntu環境下でのシェルも`/bin/zsh`に変更しておく。


## 日本語

表示は出来る。文字幅の対応がイマイチで右側が切れることがよくある。
入力は厳しそう。

いっそのこと sshd を立ち上げて、puttyのようなものをローカル端末の代わりに使った方が良いのかもしれない。
cakephp>ルーティング(Routes)

CakePHP のルーティングは、 /app/Config/routes.php の中にあります。 デフォルトのトップページのルートをコメントアウトするか、削除します。 この行です:
http://book.cakephp.org/2.0/ja/getting-started.html
```php
<?php
Router::connect(
    '/',
    array('controller' => 'pages', 'action' => 'display', 'home')
);
```
Lalavelのインストール

[laravel5で顧客管理webアプリを作成したのでメモ](http://qiita.com/ryo2132/items/769968fcf28a7333eda6)の続きです。

#インストールの流れ
1. MAMPのインストール
2. composerのインストール
3. MAMP htdocsへのlaravelプロジェクト作成

#1.MAMPのインストール
ローカルでlaravelプロジェクトを開発するにはいろいろ方法はあるようなのですが、今回はphp、mysql等の設定が簡単なMAMPで行いました。
MAMPのインストールは下記記事を参考に行ってください。
[誰でもできる！MAMPのインストール方法【初心者向け】](http://techacademy.jp/magazine/5102)

#2.composerのインストール
laravelプロジェクトを作成するにはcomposerなるものが必要なようです。composerは「phpのパッケージ管理システム」というものらしいのですが私もよく理解しておりません。理解せずとも開発はできるので大丈夫です。（それでいいのか・・？）
インストールにはまず、ターミナル（黒い画面）で下記コマンドを実行してください。場所はどこでも大丈夫です。
```
$ curl -sS https://getcomposer.org/installer | php
```
それでcomposer自体がインストールされるので、さらに簡単に使えるように下記コマンドでパスを通します
```
 $ sudo mv composer.phar /usr/local/bin/composer
```
これで$ composer より使えるようになります。
一応確認で下記コマンドを入力してください。
```
$ composer -v
```
下記のような画面がでたらインストール成功しています。
<img width="612" alt="スクリーンショット 2016-08-03 14.27.56.png" src="https://qiita-image-store.s3.amazonaws.com/0/114396/755b1aa4-f1c0-0518-ac68-4642ca9bbe81.png">


#3.MAMP htdocsへのlaravelプロジェクト作成
MAMPのhtdocsフォルダに移動します。だいたい下記のようなコマンドだと思いますが、ご使用の環境に合わせて変更してください。
```
$ cd Applications/MAMP/htdocs
```
そこで、下記コマンドを実行します。プロジェクトネームの部分に、作成プロジェクト名を入力してください。
```
$ composer create-project laravel/laravel プロジェクトネーム  --prefer-dist
```
通信環境によりますがイントールに5分ほどかかりますので、落ち着いて待ちましょう。（私は待てずエラーかと思いターミナルを再起動してしまいした。。）

finderで確認しhtdocsにプロジェクトネームのフォルダが作成されていればlaravelのインストール完了です。

http://localhost:8888/laravel-test/public/

にアクセスしてみましょう。下記画面が表示されるはずです。
<img width="1203" alt="スクリーンショット 2016-08-03 14.47.18.png" src="https://qiita-image-store.s3.amazonaws.com/0/114396/08979c0c-2fe2-0b84-b54c-12fd41ffe9b9.png">
Jenkinsサーバーを作る

# まずはローカル作業

## JDKのrpmをダウンロードする（サイト→自PC）
[Java SE Development Kit 8 Downloads](http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html)

## JDKのrpmをアップロードする（自PC→サーバー）
```:rpm_upload.bat
put ~/Downloads/jdk-8u91-linux-x64.rpm
```
```bash
sftp -b rpm_upload.bat -i hogehoge.pem user@hostname
```
# サーバー作業
## JDKをインストールする
```bash
sudo rpm -ivh jdk-8u91-linux-x64.rpm
```
Amazon Linuxの場合はこちら（未確認）

```bash
sudo yum install -y java-1.8.0-openjdk.x86_64
```
## Javaリンクを切り替える
念のためバージョン確認。Amazon Linuxだと`1.7.0_101`になっている。

```bash
java -version
```
```shell-session:実行結果
java version "1.7.0_101"
OpenJDK Runtime Environment (amzn-2.6.6.1.67.amzn1-x86_64 u101-b00)
OpenJDK 64-Bit Server VM (build 24.95-b01, mixed mode)
```
javaへのリンクを切り替える。

```bash
sudo su -
export JAVA_HOME=/usr/java/latest
/usr/sbin/alternatives \
  --install /usr/bin/java java $JAVA_HOME/bin/java 18091 \
  --slave /usr/bin/keytool keytool $JAVA_HOME/bin/keytool \
  --slave /usr/bin/orbd orbd $JAVA_HOME/bin/orbd \
  --slave /usr/bin/pack200 pack200 $JAVA_HOME/bin/pack200 \
  --slave /usr/bin/rmid rmid $JAVA_HOME/bin/rmid \
  --slave /usr/bin/rmiregistry rmiregistry $JAVA_HOME/bin/rmiregistry \
  --slave /usr/bin/servertool servertool $JAVA_HOME/bin/servertool \
  --slave /usr/bin/tnameserv tnameserv $JAVA_HOME/bin/tnameserv \
  --slave /usr/bin/unpack200 unpack200 $JAVA_HOME/bin/unpack200
```
切り替わったか確認する。

```bash
java -version
```
```shell-session:実行結果
java version "1.8.0_91"
Java(TM) SE Runtime Environment (build 1.8.0_91-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.91-b14, mixed mode)
```
## Jenkinsをインストールする
```bash
wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key
yum install -y jenkins
```

## Jenkinsを起動する
```bash
service jenkins start
```

# 起動できたか確認する
http://hostname:8080
%matplotlib inlineを毎回書かなくて済む方法

#はじめに
jupyter notebookを使っていて、毎回```
%matplotlib inline
```
と書いていましたが、
どうせいつも使うなら最初に設定しておくべきだと思いました。
本当の動機は、.ipynbを.pyとして使用したいときに、
get_ipythonのerrorが出るので、それを回避するための方法としてこのやり方を使いました。

#解決方法

matplotlibのグラフを表示する

```py
%matplotlib inline
```

を自動的に以下のようにして有効にします。


notebookのプロファイルを設定します。
もし設定をしていないようでしたら、以下のcommandで作成します。

```shell-session
ipython profile create
```

これでできた```~/.ipython/profile_default/ipython_config.py```を編集します。

```py
# lines of code to run at IPython startup.
# c.InteractiveShellApp.exec_lines = traitlets.Undefined
c.InteractiveShellApp.exec_lines = ['%matplotlib inline']
```

```c.InteractiveShellApp.exec_lines = ['%matplotlib inline']```の行を追加します。
あとはいつも通りnotebookを起動させれば自動的に```%matplotlib inline```が有効になります。
centos6.6+munin install

# 概要

監視Toolの[munin](http://munin-monitoring.org/)理解のため使ってみた。

* 読み方は「ムニン」。『悪の教典』の冒頭でこの説明があった気がする。

> フギン（古ノルド語: Huginn, 英: Hugin）とムニン（古ノルド語: Muninn, 英: Munin）は、北欧神話に登場する神オーディンに付き添う一対のワタリガラス。フギンは「思考」を、ムニンは「記憶」を意味する。
> （wikipedia「[フギンとムニン](https://ja.wikipedia.org/wiki/%E3%83%95%E3%82%AE%E3%83%B3%E3%81%A8%E3%83%A0%E3%83%8B%E3%83%B3)」より）

* http://munin.jp/
    * 日本語コミュニティ Munin User Group Japan。Wikiの日本語訳がある。
* server監視Toolの一つ
* 単体では通知機能を持たないため、mail通知機能を持つToolと組み合わせて使われる事もある
* install、設定が簡単

# Install

さくらのナレッジを参考にinstallする。
http://knowledge.sakura.ad.jp/beginner/3669/

当然だけどmunin以外にhttpdもinstallしないと動きません

```{shell}
# yum install -y httpd　munin
# htpasswd -m /etc/munin/munin-htpasswd munin
# ln -s /usr/share/munin/plugins/apache_accesses /etc/munin/plugins/apache_accesses
# ln -s /usr/share/munin/plugins/apache_processes /etc/munin/plugins/apache_processes
# ln -s /usr/share/munin/plugins/apache_volume /etc/munin/plugins/apache_volume
# emacs /etc/httpd/conf/httpd.conf
# emacs /etc/httpd/conf.d/status.conf
# service httpd restart
# service munin-node restart
```

# 結果

* 超簡単にinstallと設定ができた
* UIはちょっと古臭い感じ
* どのserverにもとりあえず入れておけばいいんじゃないでしょうか

![munin.png](https://qiita-image-store.s3.amazonaws.com/0/107806/ce503d0f-814e-acc4-aad6-47a4886474fc.png)
シェルのaliasを無視したい

```sh
$ \cp a b
```

このコマンドの意味分かりますか？


実はcpコマンドとかは初めからaliasにされてることがあります。

```sh
$ alias cp 
alias cp='cp -i'
```

なので、cpコマンドの-iオプションが有効になり、毎回上書き確認をされます。

```sh
$ cp a b
cp: `b' を上書きしてもよろしいですか(yes/no)?
```

そこでコマンドの前にエスケープ文字を入れるとエイリアスを無視します。

```sh
$ \cp a b
$
```

ちなみに、commandコマンドでも同じです。

```sh
$ command cp a b
$
```
バリデーション要件

http://book.cakephp.org/2.0/ja/getting-started.html

```php
<?php
class Post extends AppModel {
    public $validate = array(
        'title' => array(
            'rule' => 'notEmpty'
        ),
        'body' => array(
            'rule' => 'notEmpty'
        )
    );
}
```
LetsencryptのSSL証明書の更新をする


LetsencryptのSSL証明書が期限切れになっていることをATSをやっている時に気づいき、
適当に更新したらできたので共有

```bash
$ cd /path/to/letsencrypt/
$ ./letsencrypt-auto --renew-by-default certonly -a standalone --server https://acme-v01.api.letsencrypt.org/directory --agree-dev-preview -d example.com -d aaa.example.com
```

特にNginxの設定ファイルなどの変更することなくできたのでとても楽でした。
ただサーバが貧弱なのでとても時間がかかりました。
[AWS][WordPress] WordPress のコアソースが改竄されていないかを CloudWatch のカスタムメトリクスで検知しよう

[wp-cli](http://wp-cli.org/) の ```core verify-checksums``` コマンドを使うと、コアソースに改竄があるか確認できます。
それを元に CloudWatch のカスタムメトリクスに改竄されたファイル数を送って監視してしまおうというお話。

こんな感じのシェルスクリプトを作って、cron で5分ごとに回すといいんでないかなと思います。

```bash:wp-verify-checksums.sh
#!/bin/bash

# WordPress の Web ドキュメントルートディレクトリへのパス
wp_path='/path/to/wordpress'

# EC2 のインスタンス ID を取得
instanceid=$(curl -s http://169.254.169.254/latest/meta-data/instance-id)

# region を取得
az=$(curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone)
_length=$(echo $((${#az} - 1)))
region=$(echo ${az} | cut -c 1-${_length})

# WP verify checksums
tmpfile=$(mktemp)
wp --path=${wp_path} core verify-checksums 2>&1 > /dev/null | grep -v "Success" > ${tmpfile}
err_count=$(cat ${tmpfile} | grep "Error" | wc -l)
warn_count=$(cat ${tmpfile} | grep "Warning" | wc -l)
rm -f ${tmpfile}

# put metric data
aws cloudwatch put-metric-data \
 --region ${region} \
 --namespace "WordPress" \
 --dimensions InstanceId=${instanceid} \
 --unit Count \
 --metric-name "WordPress verify checksums(Error)" \
 --value "${err_count}"
aws cloudwatch put-metric-data \
 --region ${region} \
 --namespace "WordPress" \
 --dimensions InstanceId=${instanceid} \
 --unit Count \
 --metric-name "WordPress verify checksums(Warning)" \
 --value "${warn_count}"
```
Heroku でLaravel系列使う時の環境変数管理俺的ベスト・プラクティス


Laravelで使ってる変数とか諸々あって、面倒で、どうしようか悩んだ時に結局一番コレが楽そうな気がする。 


## 1. `heroku config` で環境変数を吐き出して,`.herokuconfig`に書き出す。

````
$ heroku config -s > .herokuconfig
````

## 2. Laravel の.env読み込みを多重化する。

`bootstrap/app.php`とかで、

````
try {
    (new \Dotenv\Dotenv(__DIR__.'/../'))->load();
} catch (\Dotenv\Exception\InvalidPathException $e) {
    throw $e;
}
try {
    (new \Dotenv\Dotenv(__DIR__.'/../',".herokuconfig"))->load();
} catch (\Dotenv\Exception\InvalidPathException $e) {
    throw $e;
}
````

みたいな感じにして二重に.envファイルを読み込む。

Dotenvでは第二引数にファイル名を指定して、`.env`以外のファイル名も読み込みに利用する事が可能なよう。

ちなみにDotenvはデフォルトでは **既存の環境変数を上書きしない** ため、`.env`側にキーのエントリを加えておけば`.herokuconfig`の値をローカル環境では無視する事が可能。

## 運用

アドオンやHeroku configの追加などは基本Heroku側に充当して、メンバーには`$ heroku config -s > .herokuconfig`叩いて貰えばOK

今まで`.env`とかの環境構成いじる度にSlack とかで`.env`のリレーしていたので、それをしなくて良くなったのは嬉しい。

およそ推測の付くキー名を採用しておけば何に使われている値なのかもわかりやすいので、メンバーは自由にそれを上書きすることも可能。

運用時には.env 同様、composerのpost-install等でtouch .env .herokuconfig　すればよい。
laravel5で顧客管理webアプリを作成したのでメモ

#概要
webアプリ開発初心者ながら、試行錯誤で顧客管理データベースを制作しました。その備忘録です。私自身の仕事は肉体系の地方公務員で全くwebに関係ないです。なので知識はほぼ独学です。そのため、間違っている箇所、効率の悪いプログラム等多々あると思いますが、ご了承ください。その点コメント等でご指摘いただけると大変助かります。

#開発目的
妻が自宅で鍼灸院を営んでいて、今までは患者様の情報をエクセルで管理していました。しかしレコードが増え動作が重くなったので、代替としてwebアプリを作ってみようと思い開発を始めました。

#開発環境
-laravel5.2
- ローカル
 - mac osx yosemite
 - mamp
 - sublimetext
- リモートレンタルサーバー
 - xserver

#完成版
[githubリンク](https://github.com/kawamataryo/patient_db)
###機能
・患者情報登録（名前、電話番号、住所 etc）
・来院履歴登録（来院日、売り上げ etc）
・患者情報検索（名前、電話番号、idより検索）
・患者情報一覧
・来院履歴一覧
・グラフ表示（月別売り上げ高、男女比等々）
・履歴入力で偉人の名言をランダムに表示
・最終入力日からの経過日数を表示

#目次（予定）
- [laravelのインストール](http://qiita.com/ryo2132/items/bf3b5263f3b6781877c0)
- [データベースの接続、マイグレーションによるテーブル作成](http://qiita.com/ryo2132/items/a1c8119b00799d3aed00)
- [bootstrap + scss + gulp の利用](http://qiita.com/ryo2132/items/42a94a0642930f73e6ba)
- ディレクトリ構成の理解
- bladeのメモ
- Controllerのメモ
- eloquentのメモ
- ホーム画面の作成
- 患者登録の作成
- 履歴登録の作成
- 患者検索の作成
- 一覧表示の作成
- チャートの作成
- 認証の設定
- ID検索の追加
- xserverへのアップロード
Device Connectとは？

## Device Connectって？

Device Connectはスマートフォン上に仮想のHTTPサーバを立てて、それを介してスマートデバイス（Pebble、THETA、Hue、スマートグラスなどなど）をWeb APIで操作できるGotAPIの一実装です。[Got APIはOpen Mobile Allianceが仕様を策定](https://device-webapi.org/gotapi.html)しています。

[DeviceConnect](https://github.com/DeviceConnect)

簡単に言うと、次のような実装になっています。

![deviceconnect-webapi.png](https://qiita-image-store.s3.amazonaws.com/0/135927/a3145ae5-d632-8445-b256-df4ae2c9955f.png)

Webブラウザはスマートフォン自身のブラウザはもちろん、デスクトップブラウザからも利用できます（Androidのみ）。iOSではアプリからしか使えません。

## 何が嬉しいの？

スマートデバイスを操作するソフトウェアを作ろうと思うと、BluetoothやWiFi、BLEなどを使うことになります。それぞれ仕様がまちまちで、ドキュメントを読み込んで使わないといけませんでした。Device Connectを使えば、その辺りの面倒な部分はすべてDevice Connectにまかせて、Web APIだけでスマートデバイスから値を取得したり、逆にデータを送ることができるようになります。

Web APIなのでWebブラウザも使えますが、普通にREST APIとしてSwiftやJava、他のプログラミング言語から操作できます。

## 主に送受信できるデータ

デバイスによって色々なのですが、30種類以上あります。カメラ、バイブレーション、温度、湿度、赤外線、タッチ、電話、通知、メディアプレイヤー、ファイル、ライトなどなどです。

詳しくは[スコープについて - DeviceConnect Users](http://deviceconnectusers.github.io/webapi/scope/)をご覧ください。

## 操作できるデバイス

どんなデバイスでも操作できる訳ではなく、Device Connect用のプラグインが必要です。[対応デバイスについて - DeviceConnect Users](http://deviceconnectusers.github.io/devices/)に詳しく載っていますが、主なところとしてはPebble/THETA/F-PLUG/IRKit/Hue/ChromeCast/Android/iOS端末などがあります。


## 使い方は？

一番簡単な使い方は[Device Web API Manager - Google Play の Android アプリ](https://play.google.com/store/apps/details?id=org.deviceconnect.android.manager&hl=ja)（Android）または[DeviceWebAPIBrowserを App Store で](https://itunes.apple.com/jp/app/devicewebapibrowser/id994422987?mt=8)（iOS）をインストールすることです。細かい使い方は次の記事以降で紹介します。


[DeviceConnect Users](http://deviceconnectusers.github.io/)
Virtual Studio Code の Integrated Terminal で Windows Ruby を動かすようにする

Virtual Studio Code の Integrated Terminal で以下のバッチを実行しましょう。

32bit Ruby を使いたい場合（デフォルトでインストールした場合です。）
`C:\Ruby23\bin\setrbvars.bat`

64bit Ruby（デフォルトでインストールした場合です。）
`C:\Ruby23-x64\bin\setrbvars.bat`
RDP中のWindows EC2インスタンスのネットワークアダプタを無効にしてしまった時

「あ、」と焦った時の対処法
デフォルトのネットワークアダプタのみがアタッチされている場合、Windows内部からネットワークアダプタを無効にするとRDP接続も切断され、再度接続も出来なくなってしまう。

###環境
・EC2 Windows系のインスタンス
・RDP接続にはElasticIPで割り当てたグローバルIPを使用


以下、AWSのWebコンソールからの操作
##ElasticIPの関連付け解除
・EC2管理画面の「インスタンス」から「インスタンス」を選択しインスタンス一覧から、でタッチするインスタンスを選択

・「アクション」から「ネットワーキング」->「ElasticIPアドレスの関連付け解除」からElasticIPの関連付け解除を行う

##ネットワークインターフェイスの作成
・EC2管理画面の「ネットワーク&セキュリティ」から「ネットワークインターフェイス」を開き、「ネットワークインターフェイスの作成」を選択

・「サブネット」にはアタッチ先のインスタンスのサブネットを選択


##作成したネットワークアダプタをアタッチ
・EC2管理画面の「インスタンス」から「インスタンス」を選択しインスタンス一覧から、アタッチ先のインスタンスを選択

・「アクション」から「ネットワーキング」->「ネットワークインターフェイスのアタッチ」を選択

・先ほど作成したネットワークアダプタをアタッチ

##ElasticIPの関連付け
・最初の手順でデタッチしたElasticIPアドレスを、新たに作成したネットワークアダプタに関連付ける

##動作確認
元のIPアドレスでRDP接続できる...はず
kintone とクローバ PAGEの連携（アンケート）

#kintone とクローバ PAGEの連携（アンケート）

少し実用的な例として、kintone ストアのアンケートアプリとクローバ PAGEの連携を試してみます。
結果は、PC とスマホからのアンケート入力ができました。

#kintone アンケートアプリの作成

- kintone ストアからアンケートアプリを作成
- URL、日時の項目追加
- アプリ数の項目を「文字列（１行）」に変更（クローバ PAGEで数字タイプが未サポートのため）
- フィールドコードの変更(name,email,field_1,field_2...)
- APIトークンの発行

![image](https://qiita-image-store.s3.amazonaws.com/0/100572/f1f4150a-7a7b-8dec-6ea0-32e35bc074e2.png)


#クローバ PAGEでページ・フォーム設定

![image](https://qiita-image-store.s3.amazonaws.com/0/100572/073bafcd-b590-ae21-e8ec-ac9a7a038ed6.png)

#項目の追加設定

kintone アンケートアプリに合わせて、項目を設定します。
ラジオボタン、チェックボックスなどが使用できます。

<img width="1684" alt="[無料]でホームページ作成 - クローバ PAGE-001.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/100572/186f3b1f-afe9-05d7-7ab6-dd5c00ab0590.jpeg">

#サービス連携

kintone アプリ連携の設定を行います。

![image](https://qiita-image-store.s3.amazonaws.com/0/100572/b183454d-8730-b72e-38b0-740251480e22.png)


#アンケート入力

ページを表示し、アンケートボタンをクリック

![image](https://qiita-image-store.s3.amazonaws.com/0/100572/7733cd77-5073-58b1-44c3-2a6aa411e8c8.png)


#アンケートダイアログ表示

アンケートに入力して、送信します。

![image](https://qiita-image-store.s3.amazonaws.com/0/100572/c28ad41a-eb87-7688-7d65-a30ca6ba6551.png)

#入力内容表示

![image](https://qiita-image-store.s3.amazonaws.com/0/100572/1acecab4-7c27-ae5d-2f38-c1313c6dfa86.png)

#kintone アンケートアプリ

アンケート入力の内容が反映されています。

![image](https://qiita-image-store.s3.amazonaws.com/0/100572/b2181b96-2485-706c-39da-e482d532f6b6.png)

#Android からの入力

スマホからのアンケート入力も可能です。

![Screenshot_2016-08-03-14-05-20.png](https://qiita-image-store.s3.amazonaws.com/0/100572/650a513d-dd1c-effd-4b14-3a6921557228.png)
MongoDBのデータの保存先

* /usr/local/etcにmongod.confがあって、中には

```
systemLog:
  destination: file
  path: /usr/local/var/log/mongodb/mongo.log
  logAppend: true
storage:
  dbPath: /usr/local/var/mongodb
net:
  bindIp: 127.0.0.1
```

と書いてある
Vagrantでdefault: Warning: Authentication failure. Retrying...が出てくる問題

Vagrantを1.8.5にアップデートし、`vagrant up`をしたら、`default: Warning: Authentication failure. Retrying... `というエラーの後で、time outになるエラーに遭遇した。

以下のissueに答えが書いてあった。
・[Authentication failure after inserting new key with Vagrant 1.8.5. [PATCH] ] (https://github.com/mitchellh/vagrant/issues/7631)

Vagrant 1.8.5によるエラーだったようなので、1.8.4にすることで解決した。
ここが分かればTensorflowを使い始めれる！

# Tensorflowとは

## データフローグラフ

Tensorflowではデータフローグラフと言われる、データの流れ(フロー)を定義したグラフで処理が実行されます。
円（定数）と楕円(数学的な操作)の部分がノード(オペレーション)で、ノードを結ぶ線がエッジでtensor(多次元データ配列)を表します。
※ 円（定数）はプログラム上では定数を表しているように見えますが、Tensorflowでは値を出力するオペレーションです。

![スクリーンショット 2016-08-03 12.24.27.png](https://qiita-image-store.s3.amazonaws.com/0/51849/3b33702e-f3c3-059e-af85-7f84a2cbb43a.png)

## Tensor(テンソル)

Tensor(テンソル)とはn次元の多次元配列を意味しますが、具体的には以下の通りです。

| Rank(階数) | Math Entity | 例 | 
|:---------:|:-:|:---------|
|0     |Scalar<br>(0次元)|s = 483|
|1     |Vector<br>(1次元)|v = [1.1, 2.2, 3.3]|
|2     |Matrix<br>(2次元)|m = [<br>[1, 2, 3], <br>[4, 5, 6], <br>[7, 8, 9]<br>]|
|3     |3-Tensor<br>(3次元)|t = [<br>[[2], [4], [6]], <br>[[8], [10], [12]], <br>[[14], [16], [18]]<br>]|
|n     |n-Tensor<br>(n次元)|　・・・ |

- https://www.tensorflow.org/versions/r0.10/resources/dims_types.html

## 実行

上記で定義した各ノードのオペレーションを実行し結果を得るには、Sessionオブジェクトを作成し、その中で実行する必要があります。

例えば以下のように単なる定数を定義しますが、Sessionを実行するまでは、Tensorオブジェクトですが、Sessionを実行するとスカラー値「**1**」が取得できます。

```py:sample.py
import tensorflow as tf
one = tf.constant(1, name='one')
print(one) # Tensor("one:0", shape=(), dtype=int32)
sess = tf.Session()
result = sess.run(one)
print(result) # 1
```

## 足し算と掛け算を用いたサンプル(python 2.7系)

以下は、1と2を足した結果に3を掛けると言うデータフローグラフを表しています。
※ Tensorflowに付属の[Tensorboard](https://www.tensorflow.org/versions/r0.10/how_tos/summaries_and_tensorboard/index.html)を使ってコードで記述した定義を生成

![スクリーンショット 2016-08-03 12.23.22.png](https://qiita-image-store.s3.amazonaws.com/0/51849/5a0d6aee-ee6c-f065-1faf-a42950bbf8f0.png)


```py
# coding: utf-8
import tensorflow as tf
one = tf.constant(1, name='one') # 定数を定義(nameはTensorboard上で見やすいようにつけているだけ付けなくても大丈夫です)
two = tf.constant(2, name='two')
three = tf.constant(3, name='three')
add = tf.add(one, two, name="add") # 足し算を定義
mul = tf.mul(add, three, name="multiply") # 掛け算を定義
init = tf.initialize_all_variables() # 定数初期化用

with tf.Session() as sess:
  sess.run(init) # すべての変数を初期化
  sess.run([add, mul])
  tf.train.SummaryWriter('events', sess.graph)　# グラフの可視化用
```

## TensorBoardの起動

### 手順

手順1. sample.pyを実行

```
python sample.py
```

手順2. tensorboard実行

上記のサンプル(sample.py)で指定した`events`をtensorboard実行時に指定します。

```py:sample.py
  tf.train.SummaryWriter('events', sess.graph)　# グラフの可視化用
```

```
tensorboard --logdir=events
```

あとはコンソールに表示されたURLにアクセスして`Graphs`メニューをクリックすると

```
(You can navigate to http://0.0.0.0:6006)
```

# 以下参考までにTensorflowのインストール方法です

## Install

### Python

```
brew install pyenv-virtualenv
PYTHON_CONFIGURE_OPTS="--enable-unicode=ucs2" pyenv install 2.7.11
pyenv rehash
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
```

### Tensorflow

TensorflowをMacにインストールする場合は以下のリンクを参照してください

* https://www.tensorflow.org/versions/r0.10/get_started/os_setup.html#virtualenv-installation


- ~/.matplotlib/matplotlibrc

 
```yml:matplotlibrc
backend : TkAgg
```
atomでphpデバッグ設定


```php:php.ini
[xdebug]
zend_extension = C:\php\ext\php_xdebug-2.4.0-5.6-vc11-x86_64.dll
xdebug.remote_enable=1
xdebug.remote_handler="dbgp"
xdebug.remote_mode="req"
xdebug.remote_host="localhost"
xdebug.remote_port=9000
xdebug.remote_log="C:\php\logs\xdebug.log"
xdebug.manual_url = http://jp2.php.net
xdebug.collect_params = On
xdebug.dump.GET = *
xdebug.dump.POST = *
```

chrome拡張
https://chrome.google.com/webstore/detail/xdebug-helper/eadndfjplgieldjbigjakmdgkmoaaaoc

IDE keyは
Eclipse用で大丈夫
Windows 10 Anniversary Update を適用する

Windows 10 Anniversary Update が使えるようになったので更新した。
普通のユーザーの自動更新ではまだ配布されていないようだ。

手動でダウンロードして実行すれば更新できる。


![aniv1.png](https://qiita-image-store.s3.amazonaws.com/0/43406/92a1bbad-e2d0-c510-048a-21a2d9c991b2.png)
Windows Updateの詳細情報をクリックして


![aniv2.png](https://qiita-image-store.s3.amazonaws.com/0/43406/867cf3e3-0f17-cf9f-03bf-46293d9fa3f4.png)
更新プログラムをダウンロードして実行する。
UbuntuにRuby環境インストールする手順

# rbenvのインストール

## zsh の場合

```
git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(rbenv init -)"' >> ~/.zshrc
```

## bash の場合

```
git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
```

# rubyのインストール

```
rbenv install 2.3.0
rbenv rehash
```
Swift環境でFirebase Analyticsを設定してみる

# 環境設定
前回の[Swift環境でGoogle Analyticsを設定する](http://qiita.com/doosan_t/items/3fddde7ee9d3e74deb82)を踏まえて、
今回はFirebase Analyticsを設定します。

基本的には[Googleの公式ページ](https://firebase.google.com/docs/ios/setup)を参考に。

## CocoaPodsの設定
プロジェクトのPodfileに`pod 'Firebase/Core'`を追記します

`$cd PJ名`
`$vi Podfile`

```Podfile.
# Uncomment this line to define a global platform for your project
platform :ios, '8.0'
# Uncomment this line if you're using Swift
use_frameworks!

target 'PJ名' do
pod 'GoogleAnalytics'
pod 'Firebase/Core'
end

target 'PJ名Tests' do

end

target 'PJ名UITests' do

end
```
※記述はこんな感じ

`$pod install`

```処理内容.
Updating local specs repositories

CocoaPods 1.1.0.beta.1 is available.
To update use: `gem install cocoapods --pre`
[!] This is a test version we'd love you to try.

For more information see http://blog.cocoapods.org
and the CHANGELOG for this version http://git.io/BaH8pQ.

Analyzing dependencies
Downloading dependencies
Installing Firebase (3.4.0)
Installing FirebaseAnalytics (3.3.0)
Installing FirebaseInstanceID (1.0.8)
Using GoogleAnalytics (3.14.0)
Installing GoogleInterchangeUtilities (1.2.1)
Installing GoogleSymbolUtilities (1.1.1)
Installing GoogleUtilities (1.3.1)
Generating Pods project
Integrating client project
Sending stats
Pod installation complete! There are 2 dependencies from the Podfile and 7 total
pods installed.
```
こんな感じになれば無事に完了。
Updating local specs repositories　からなかなか進まないので、根気よく待ちましょう。3分ぐらいかかりました。。

## プロジェクト側の設定

```Appdelegate.swift
import UIKit
import Firebase

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?


    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        // Override point for customization after application launch.
        
        // Firebaseの設定
        FIRApp.configure()

（略）
```

### GoogleService-Info.plistの更新
Firebaseにログインして、アプリの管理からGoogleService-Info.plistをDLする。
DLしたGoogleService-Info.plistをプロジェクト側で上書いて更新する。
※これをやらないとアプリ起動時にエラーって落ちます。けっこうハマりました、、、
JavaScriptでundefinedを比較したまとめ

`node test.js`ってな感じで動かしたまとめ。

## 結論から
nullとundefinedは厳密に(`===`)比較しような。


## ANDとOR
最後に評価されたものが返ってくる。

### AND
`true && undefined`
左がtrueなので右のundefinedが最後に評価される。undefined。

`undefined && true`
undefinedはfalse扱いのため、左で短絡評価される。undefined。

`false && undefined`
左で短絡評価される。false。

`undefined && false`
左で短絡評価される。undefined。

`null && undefined`
左で短絡評価される。null。

`undefined && null`
左で短絡評価される。undefined。

### OR
`true || undefined`
左で短絡評価される。true。

`undefined || true`
左がfalse扱いされるのでtrueが評価される。true。

`false || undefined`
左がfalseなので右のundefinedが最後に評価される。undefined。

`undefined || false`
左がfalse扱いされるので右のfalseが最後に評価される。false。

`null || undefined`
左がfalse扱いされるので右のundefinedが最後に評価される。undefined。

`undefined || null`
左がfalse扱いされるので右のnullが最後に評価される。null。


## 等値比較
特に書いてないものは、`==`と`===`で結果が変わらないもの。

`true == undefined`
順当にfalse。ひっくり返しても同じ。

`false == undefined`
**undefinedはfalse扱いされるけど、これはfalse。**
なお、`0 == false`と`"" == false`はtrue。

`true != undefined`
`false != undefined`
上記二つをひっくり返した結果になるだけ。true。

`null == undefined`
**true**。

`null != undefined`
上記をひっくり返しただけ。false。

`null === undefined`
厳密に比較すると**false**になる。

`null !== undefined`
上記をひっくり返しただけ。true。

`undefined == undefined`
trueになってくれないと困る！ true。

## 大小
なにとどう比較してみてもfalseになるっぽい。

## 付録
`!(undefined)`でtrueに、`!!(undefined)`でfalseに変換できる。
Boostnoteで適当にソースコードを保存しておく → 後でコピペする　(記憶に頼るな、記録に頼れ！)


[Boostnote](https://b00st.io/jp/)
===

### なんか管理しやすくなってる。

![p1.PNG](https://qiita-image-store.s3.amazonaws.com/0/99308/b0466153-af3e-4953-6c4a-a657b1d46075.png)
MacにanyenvでPHP5.6.8入れた話


下記を参考にやったけど、Macだと差分がわりとハマった話
[anyenvで開発環境を整える](http://qiita.com/luckypool/items/f1e756e9d3e9786ad9ea)
[rbenv,pyenv,plenv,phpenvで統一した言語のインストールとバージョン切り替えを行う](http://www.bunkei-programmer.net/entry/2015/04/26/012742)

インストールはHomebrewで。

```
$ git clone https://github.com/riywo/anyenv ~/.anyenv
```

zshrcの設定を追加(or修正)

```
$ vi ~/.zshrc
```

viの使い方が微妙にわからないけどなんとかした。

```~/.zshrc
export PATH="$HOME/.anyenv/bin:$PATH"
eval "$(anyenv init -)"
```

で、phpenvインストール
```
$ anyenv install phpenv
```

## PHPをインストール

参考) [rbenv,pyenv,plenv,phpenvで統一した言語のインストールとバージョン切り替えを行う](http://www.bunkei-programmer.net/entry/2015/04/26/012742)

phpenvのインストールと、zshrcの設定は終わっているので飛ばして、
rehashとシェルを再起動。これは問題なし。

```
phpenv rehash
exec $SHELL -l
```

依存ライブラリのインストールで説明には `yum`とあるがMacだと `yum` がないので Homebrewでやる。
(ここでhomebrewが古い状態だったので `brew update`した)

```
brew install mcrypt libpng readline libxml2 jpeg freetype
```

php5.6.8を入れようとしたらビルド時にcomposerのエラーがでた。

```
[Success]: Built 5.6.8 successfully.
Download composer.phar ...
/Users/XXXX/.anyenv/envs/phpenv/plugins/phpenv-composer/libexec/composer: line 27: /Users/XXXX/.anyenv/envs/phpenv/versions/5.6.2/bin/php: No such file or directory
```

ので、先に php 5.6.2を入れてから再度 5.6.8をいれたら成功した。
[iOS]  メソッドを呼ぶだけでContainerに子どもを追加できるUIViewControllerのエクステンション

コンテナに子どもを追加するのを、IBからではなくコードから設定する時に簡単に設定できるようエクステンションを書いてみました。
指摘事項あればどんどん言っていただけると幸いです。

```swift:UIViewController+Container.swift

import UIKit

extension UIViewController {
    
    /**
     コンテナに子どもビューを設定する
     - parameter childStoryboardName: 子どものストーリーボードのファイル名
     - parameter childStoryboardId: 子どものストーリーボードID
     - parameter containerView: 子どもを設定したいコンテナ
     */
    func addChildrenToContainer(childStoryboardName: String, childStoryboardId: String, containerView: UIView) {
        
        let storyboard = UIStoryboard(name: childStoryboardName, bundle: nil)
        let controller = storyboard.instantiateViewControllerWithIdentifier(childStoryboardId)
        
        self.addChildViewController(controller)
     
        let view = controller.view
        
        // AutoLayoutを解除する
        view.translatesAutoresizingMaskIntoConstraints = false
        
        var viewBindingsDict = [String: AnyObject]()
        viewBindingsDict["subView"] = view
        
        // 制約を付与する前に追加すること
        containerView.addSubview(view)
        
        // コンテナに子どもをセットしたからといってコンテナ内にきれいに収まるわけではない
        containerView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat(
            "H:|[subView]|",
            options: [],
            metrics: nil,
            views: viewBindingsDict))
        containerView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat(
            "V:|[subView]|",
            options: [],
            metrics: nil,
            views: viewBindingsDict))
        
        controller.didMoveToParentViewController(self)
    }
}
```
MSC-MOD20 > Link > 英語ドキュメント

関連 http://qiita.com/7of9/items/1a4ceb8d32ddff8a6070

SDカードモジュールMSC-MOD20。

使用してみると、日本語資料と通信内容の整合性が取れない条件がある。

英語ドキュメントはどうか。

https://www.ghielectronics.com/docs/114/f40-developers-guide
> Instructions are found in [the File System User Manual](https://www.ghielectronics.com/downloads/man/File_System_User_Manual.pdf).

v3.0 2016-06-16とあり、最近のドキュメントとなっている。

問題のIコマンドはp4にあり、応答(!00など)が返ってくるように`!{R}`として記載されているが、実際のI2C通信ではSDカード非搭載時に応答がないようだ。

UART通信時とI2C通信時の応答が違う可能性もあり、そのあたりから調べないと開発が進みそうにない。
cakePhp>コンポーネント

http://book.cakephp.org/2.0/ja/controllers/components.html
```php
<?php
class PostsController extends AppController {
    public $components = array(
        'Auth' => array(
            'authorize' => array('controller'),
            'loginAction' => array(
                'controller' => 'users',
                'action' => 'login'
            )
        ),
        'Cookie' => array('name' => 'CookieMonster')
    );
```
あたらしく作るwebappをgithubにあげる(リモートを作ってローカルにクローンするまで)

しばしば忘れるし、なんかミスって訳のわからないことにもなるので

備忘録的なアレとして書いておこうかなと思う訳です。


・書いてあることをざっくりと

新しいwebappを作る時に

1人で作っているけど

なんかエンジニアっぽい雰囲気が欲しくてgithubを使うことがあって

そんな時にローカルとリモートにリポジトリを出現させるためのあれこれ

・使うもの

1.ソースツリー
<img width="120" alt="スクリーンショット 2016-08-03 11.35.29.png" src="https://qiita-image-store.s3.amazonaws.com/0/117128/78657ed9-2d4e-2ebb-9a57-5d643b38a526.png">

2.github

<img width="120" alt="スクリーンショット 2016-08-03 11.44.06.png" src="https://qiita-image-store.s3.amazonaws.com/0/117128/424d4f76-cbc9-03e7-8af7-abe2ade27653.png">

・実際にやってみよう！

1.githubにリポジトリを作る

githubの右上の方に

<img width="200" alt="スクリーンショット 2016-08-03 11.46.16.png" src="https://qiita-image-store.s3.amazonaws.com/0/117128/9df3b7b2-74c3-f8c1-e86e-93ac883e2847.png">

こんなのがあって

真ん中の「＋」を押すと

<img width="276" alt="スクリーンショット 2016-08-03 11.48.14.png" src="https://qiita-image-store.s3.amazonaws.com/0/117128/bb34cb08-4302-ab84-c908-c43299274545.png">

こんな感じに開かれるので

一番上の「New repository」をクリック

![スクリーンショット 2016-08-03 11.53.39.png](https://qiita-image-store.s3.amazonaws.com/0/117128/09650727-f9ec-f02e-3f71-6d816e2c3d01.png)

好きな名前を入力して

お金をかけたくない方はpublic

リッチすぎて金を使いたい人はprivate

学生特権を使って2年間無料でprivateを使える方はどちらでも
(学生は2年間無料でプライベートリポジトリが使えるって話は<a href="http://qiita.com/nekononeko_53/items/6deee36143f8cd45c525">ここ</a>を見てもらえば申請方法とか書いてます)

で、ざっと画像みたいな感じにしたら下にある緑色の

create repositoryをクリックすると完成

あとはupload fileからアップロード

ドラックアンドドロップでも出来るよ。

2.ソースツリーにクローン

![スクリーンショット 2016-08-03 12.01.00.png](https://qiita-image-store.s3.amazonaws.com/0/117128/e4d926bc-df19-7295-d9ee-c49784b434f2.png)




新しく作ったリポジトリのページがこんな感じだと思うんですけど

「clone or download」をクリックすると
<img width="434" alt="スクリーンショット 2016-08-03 12.06.14.png" src="https://qiita-image-store.s3.amazonaws.com/0/117128/4a819a18-e3a7-efc6-76a8-1417163aacd3.png">

こんな感じで出てきて写真では切れてますけど

下に出てくるやつをコピーします。

次にソースツリーへ

<img width="478" alt="スクリーンショット 2016-08-03 12.07.48.png" src="https://qiita-image-store.s3.amazonaws.com/0/117128/0facabd8-1eb6-913e-12e6-144941adb307.png">

<img width="241" alt="スクリーンショット 2016-08-03 12.08.02.png" src="https://qiita-image-store.s3.amazonaws.com/0/117128/ec666ba7-387d-ba6e-4769-7dd78da6856b.png">

URLからクローンを選んで

<img width="545" alt="スクリーンショット 2016-08-03 12.09.10.png" src="https://qiita-image-store.s3.amazonaws.com/0/117128/7c1ffcde-df33-84b8-8873-977cfec76720.png">

ソースURLのとこにさっきコピーしたやつを貼り付けて

保存先のパスは空っぽのファイルを用意してそこを指定してやって

あとはクローンボタンを押せばOK

リモートを作る時にアップロードしたのと同じフィルができているので

アップロードしたファイルはいらないかば消去して

クローンしたやつで新しくappを作ればOKっぽい。

なんか色々試しながら書いたので

ここ違くないか？とかあったら教えてください。
Maker Faire Tokyo 2016の出展作品、森のタクトについて

# はじめに
Maker Faire Tokyo 2016にマジュニアというサークル名で”森のタクト”という作品を出展することになりました。
私はこの作品の中でハードウェア全体とRaspberryPi上で動くソフトウェア部分を担当しました。
この記事では自分が関わった部分についての技術的な中身について説明していきます。
(ちなみに私はハードウェアエンジニアということもありソフトウェアに関しては素人なので、ソフトウェアに関しては温かい目で見守ってください...)

ソースコードや回路図はこちら
https://github.com/shozaburo-shimada/mft2016

# 森のタクト概要
## 何ができるか？
森のタクトは、まるで自分が指揮者になったかのように体感できるシステムです。
まず曲が楽器毎にスピーカーから流れ、またスピーカーの音に合わせて各モニタの絵がアニメーションします。
このとき指揮者は、

- 右手の振り方で曲の再生速度が変化させる
- 右手を止めると曲も止める（正確にはいま出ている音を伸ばし続ける）
- 左手で各演奏者の演奏をストップ、再開させる

といった操作をすることが可能です。

<img width="800" alt="スクリーンショット 2016-08-03 12.05.41.png" src="https://qiita-image-store.s3.amazonaws.com/0/95321/244b0018-d939-27bc-f750-65e2be373a9b.png">

## HW仕様概要
右手の振りを検知する方法として、おもちゃの[テルミン](https://www.amazon.co.jp/dp/4057002138/ref=cm_sw_r_tw_dp_KKxOxb0KVGC78 )を利用しました。
音の再生に関しては、RaspberryPiを７台を使用し、手前の１台がMIDIデータ（.mid）を読み込み、LANを通して音の情報（音色、音程、音の強さなど）を各RaspberryPiに送信することで実現しています。
アニメーションはスマホの画面をUSB-HDMI経由でモニタに表示しているのですが、それによって再生速度を伝える口にUSBが使えなくなってしまったので、スマホの静電タッチインターフェースを利用することで再生速度情報を伝送しています。

下記がHW構成図で、赤字部分が自作しているところです。
<img width="８００" alt="スクリーンショット 2016-08-03 12.20.11.png" src="https://qiita-image-store.s3.amazonaws.com/0/95321/b612759e-e3f3-8cc9-0cc9-eb9e742ab6c9.png">

## SW仕様概要
下記がSWの構成図で、赤字部分が自作しているところです。
HWの部分でも記載しましたが、音の情報をLAN上で送信しているので、サーバー/クライアントの概念で構成しています。
サーバー側は音の情報が来るのをひたすら待ちます。来たら即座に音を鳴らします。また、再生速度変更の情報を受けるとGPIOを通してスマホに伝えます。
一方クライアント側は.midファイルを解析し、その内容に合わせて音のデータを送信していきます。従って、音と音の間隔（再生速度）などは全てクライアント側が管理しています。

<img width="８００" alt="スクリーンショット 2016-08-03 14.04.41.png" src="https://qiita-image-store.s3.amazonaws.com/0/95321/b95e3c9d-e123-be5b-2bb7-3536812e35f9.png">

## 各機能ブロックごとの詳細
HW,SWについての詳細を全て一つの記事に書いてしまうと長くなってしまうので機能ブロック毎に別記事にしました。
詳細をご覧になりたい方は下記リンクをご参照ください。

- [[森のタクト] 曲を楽器ごとに複数のスピーカーから鳴らす](http://qiita.com/shozaburo/private/5413be31c38329d5f676)
- [[森のタクト] テルミンを使って手の振りを検出する](http://qiita.com/shozaburo/private/2433e59e41e87ea4edb9)
- [[森のタクト] アニメーションを再生速度に合わせて変化させる](http://qiita.com/shozaburo/private/09e802947ebb14bc13c4)
- [[森のタクト] 各スピーカーを個別にONOFFするためのハードウェアボタンの作成する](http://qiita.com/shozaburo/private/23d43375fad0cb312947)
さくっとプロセスの Rss と Shared_Clean + Shared_Dirty  のサイズを計算

```sh
echo $(( $(cat /proc/6941/smaps | grep ^Rss | awk '{print $2 "+"}') 0 ))
echo $(( $(cat /proc/6941/smaps | grep ^Shared | awk '{print $2 "+"}') 0 ))
```

ついでに、まとめて Rss と Shared\_Clean + Shared\_Dirty とその比率を出力。

```sh
for pid in $(pgrep http); do
    rss=$(( $(cat "/proc/$pid/smaps" | grep ^Rss | awk '{print $2 "+"}') 0 ))
    shared=$(( $(cat "/proc/$pid/smaps" | grep ^Shared | awk '{print $2 "+"}') 0 ))
    name=$(cat "/proc/$pid/cmdline" | tr '\0' ' ')
    printf "%d\t%d\t%d\t%d%%\t%s\n" "$pid" "$rss" "$shared" "$(($shared*100/$rss))" "$name"
done
```

次のように結果が表示される。

```
6932    455596  444156  97%     /usr/sbin/httpd 
6933    455964  444164  97%     /usr/sbin/httpd 
6935    455308  444228  97%     /usr/sbin/httpd 
6939    455812  444184  97%     /usr/sbin/httpd 
6940    455968  444176  97%     /usr/sbin/httpd 
6941    455968  444228  97%     /usr/sbin/httpd 
6942    455960  444192  97%     /usr/sbin/httpd 
6943    455756  444180  97%     /usr/sbin/httpd 
8092    455960  444184  97%     /usr/sbin/httpd 
13370   451436  445800  98%     /usr/sbin/httpd 
24533   455964  444292  97%     /usr/sbin/httpd 
```
[gcc][gdb]デバッグシンボルを別ファイルに分離してgdbで読み込ませる方法

実験用のソースコードはこちら：
https://github.com/aoyama-val/gcc-gdb-separate-debug-symbols

デバッグシンボル付きでビルドする：

```
gcc -g a.c
```

デバッグシンボルを別ファイルに分離する：

```
objcopy --only-keep-debug a.out a.debug
```

a.outからデバッグシンボルを除去する：

```
cp a.out a.stripped
strip a.stripped
```

a.strippedをgdbで読み込ませてみる：

```
gdb a.stripped
（中略）
Reading symbols from /tmp/gdb/a.stripped...(no debugging symbols found)...done.
```

`no debugging symbols found`と出ている通り、デバッグシンボルが読み込まれなかった。
下記の通り、ブレークポイントを張ることも出来ない。

```
(gdb) b a.c:21
No symbol table is loaded.  Use the "file" command.
Make breakpoint pending on future shared library load? (y or [n])n
```

先ほど分離したシンボルファイルを読み込ませる：

```
(gdb) symbol-file a.debug
Reading symbols from /tmp/gdb/a.debug...done.
```

今度はブレークポイントを張れる：

```
(gdb) b a.c:21
Breakpoint 1 at 0x40058e: file a.c, line 21.
(gdb) run
Starting program: /tmp/gdb/a.stripped

Breakpoint 1, main (argc=<error reading variable: can't compute CFA for this frame>, argv=<error reading variable: can't compute CFA for this frame>) at a.c:21
21        printf("start\n");
Missing separate debuginfos, use: debuginfo-install glibc-2.17-106.167.amzn1.x86_64
(gdb) n
start
22        ret = hoge(a, b);
(gdb) n
23        printf("ret = %d\n", ret);
(gdb) n
ret = 6
25        return 0;
```

## --symbols=SYMFILE

manや`gdb --help`によると

```
--symbols=SYMFILE  Read symbols from SYMFILE.
```

というオプションがあるようだが、`gdb --symbols=a.debug a.stripped`では読み込めなかった。

## debug link

シンボルファイルのパスをバイナリの中に埋め込んでおく「debug link」という仕組みもあるらしい。

`--with-separate-debug-dir`
`show debug-file-directory`
`objcopy --add-gnu-debuglink=foo.debug foo`

## 参考

Debugging with GDB: 18.2 別ファイルにあるデバッグ情報
http://www.geocities.jp/harddiskdive/gdb/gdb_178.html 
debugging - How to generate gcc debug symbol outside the build target? - Stack Overflow
http://stackoverflow.com/questions/866721/how-to-generate-gcc-debug-symbol-outside-the-build-target
Chalice管理のソースをGit管理する場合の.gitignore

Chaliceとは
-----------

AWS Lambda向けのPython用フレームワークです。

https://github.com/awslabs/chalice

発展途上だけど、めっちゃ簡単にAPI Gateway+Lambdaの構成がくめるので、おすすめです。

クラスメソッドさんの記事を読むのが手っ取り早いです。
[【新機能】Python Serverless Microframework for AWS(プレビュー版)が登場！ ｜ Developers.IO](http://dev.classmethod.jp/cloud/aws/preview-the-python-serverless-microframework-for-aws/)

早速.gitignore
-------------

プロジェクトのルートに以下のファイルを置いておけばいいです。

```gitignore:.gitignore
.chalice/deployments/*
.chalice/venv/*
```

参考：Chaliceで管理する場合のディレクトリ構造
------------------------------

以下のコマンドで、新しいプロジェクトを生成出来ます。この際virtualenv環境でやりましょう。

```bash
$ chalice new-project hello
```

すると、このようなディレクトリ構造になります。

```bash
$ cd hello && ls -a
./                ../               .chalice/         app.py            requirements.txt
```

`.chalice`ディレクトリは隠しディレクトリなので見落としがちなのですが、Git管理する場合、**とても**重要になります。無いとビルドできなくなるよ。

ただし、一度`chalice deploy`をしたあとに出来る、`deployments`ディレクトリと、`venv`ディレクトリはそれぞれ一時ファイルを生成するためのディレクトリなので、あんまり重要じゃありません。
重要じゃないというより管理するにはとても邪魔なので、上記の`.gitignore`になります。
Gitで「HEAD detached at」の洗礼を受けました

# **はじめに**
Git初心者のぼくが`HEAD detached at`の洗礼を受けたので解決させるまでの経緯をメモします。
ちなみに**なんで直ったのかはちゃんと理解できていません**ので誰か教えて下さいお願いしますorz

# **なにが起きていたか**
ぼく「ちょっと前のコミットの状態に戻してみよう」

ぼく「まず、もどりたいコミットの確認と・・・、よし`a0ae096`だな！」

```shell-session
[root@centos project]# git log --oneline
577021b apply v70ms_Linux64
a0ae096 customized httpd/data/j60/submenu.js
b3d982f apply hotfix_160609
c132e85 apply hotfix_160531
c900cd8 apply hotfix_160530
88a660e apply hotfix_160509
f8c1c31 exclude crond dir
78c4d24 modified gitignore & apply hotfix_160314
c632311 initial commit
```

ぼく「`a0ae096`に`checkout`してと・・・！」

```shell-session
[root@centos project]# git checkout a0ae096
```

ぼく「ブランチの状態はと・・・（HEAD detached at？　まぁ、大丈夫やろ）」

```shell-session
[root@centos project]# git branch
* [HEAD detached at a0ae096]
  master
  develop
```

ぼく「よし、確認したい部分の確認もできたからまたmasterブランチに戻そうかな」

```shell-session
[root@centos project]# git checkout master
```

ぼく「ブランチの状態はと・・・！！！？ ブランチが移動しない？？？」

```shell-session
[root@centos project]# git branch
* [HEAD detached at a0ae096]
  master
  develop
```


**というわけでブランチを元に戻すことができなくなってしまいました**

# **なにをしたか**
**以下のステップで解決することができました**

1. 新しいブランチの作成
2. 新しく作成したブランチへの`checkout`
3. `.git/HEAD`の編集
4. `master`ブランチへの`checkout`

## 新しいブランチの作成
[gitのHEADがブランチから外れてしまう現象とその直し方](http://d.hatena.ne.jp/nishiohirokazu/20110513/1305290792)の記事にとりあえず新しいブランチ作れみたいに書いてあったので新たにブランチを作成

しかし、作成後`master`ブランチへ移動みたいなこと書いてあるけどそれができないという＼(^o^)／

```shell-session
[root@centos project]# git branch test
[root@centos project]# git branch
* [HEAD detached at a0ae096]
  master
  develop
  test
```

## 新しく作成したブランチへの`checkout`
新しく作成したブランチへ`checkout`してみたらできました
そして**なぜか`[HEAD detached at a0ae096]`も消えていました**

しかし、masterブランチへ`checkout`できないのは相変わらず・・・＼(^o^)／

```shell-session
[root@centos project]# git checkout test
[root@centos project]# git branch
  master
  develop
* test
```


```shell-session:masterへのcheckoutはなぜかできない
[root@centos project]# git checkout master
[root@centos project]# git branch
  master
  develop
* test
```

## `.git/HEAD`の編集
**なぜか`.git/HEAD`の編集を試みようと思い**、以下のように編集を実施

```shell-session:修正前
[root@centos project]# cat .git/HEAD
ref: refs/heads/test
```

```shell-session:修正後
[root@centos project]# cat .git/HEAD
ref: refs/heads/master
```

## `master`ブランチへの`checkout`
そしてその状態でmasterブランチへの`checkout`を試みたところ・・・

```shell-session
[root@centos project]# git checkout master
[root@centos project]# git branch
* master
  develop
  test
```

**きたきたきたきた～～～！！！！**

# **おわりに**
とりあえずかなり焦りましたがなんとか直せてよかったです。
しかし、**なんで直ったのかわからない**という状況なのでGitに詳しい人教えて下さい本当にお願います。
cakePHP>ctpファイル

ビューファイルは、 /app/View/ にあるコントローラ名のフォルダに、 関連するアクション名で保存されます。例えば、Products コントローラの “view()” アクションのビューファイルは通常、 /app/View/Products/view.ctp となります。
http://book.cakephp.org/2.0/ja/views.html
濁点・半濁点の処理(Excel for Mac)

MacのExcel VBAで、ブック名などに濁音（ば）半濁音（ぱ）が含まれていると、うまく扱うことができずエラーになります。

Windowsのファイルシステムでは「ば」「ぱ」を1文字として扱う文字コード体系 (NFC) を採用しているのに対し、MacOSでは2文字として扱う体系 (NFD) を採用しているのが理由だそうです。

これを回避するため、NFDの濁点半濁点つき文字列を、NFCに変換する関数を作ってみました。あまり変な文字列には対応していません（濁点記号が先頭にあるとか）。検証環境は Excel 2011 for mac です。

``` vb:ToNFC.bas
'NFDの濁点・半濁点つき文字列をNFCに変換
Function ToNFC(str) as string

    Dim i, nfdChrs, nfcChr
    
    Do
        i = InStr(str, ChrW(12441))             '濁点
        If i = 0 Then Exit Do
        nfdChrs = Mid(str, i - 1, 2)
        nfcChr = ChrW(AscW(Mid(str, i - 1, 1)) + 1) 
        str = Replace(str, nfdChrs, nfcChr)
    Loop
    Do
        i = InStr(str, ChrW(12442))             '半濁点
        If i = 0 Then Exit Do
        nfdChrs = Mid(str, i - 1, 2)
        nfcChr = ChrW(AscW(Mid(str, i - 1, 1)) + 2)
        str = Replace(str, nfdChrs, nfcChr)
    Loop
    
    ToNFC = str

End Function
```
できないSE用語

http://qiita.com/t_nakayama0714/items/478a8ed3a9ae143ad854

| 魔法の言葉 | 裏に秘めている何か |
|:-:|:-:|
| TBD | TBDのまま開発が完了する |
| とりあえず~する | 思考停止。「とりあえず」はカイゼンされない |
| TODO | TODOのまま開発が完了する |
| //動かないのでコメントアウト | 思考停止 |
| たぶん合ってる | 根拠なき場合危険 |
Wordpressで個人的によく使うプラグインまとめ

備忘録。
これは使える！ってのがあれば随時追加予定。

## SEO系
### All in One SEO Pack
恐らく一番メジャーなSEO系のプラグイン、というか僕はこれしか知らない。
【URL】https://ja.wordpress.org/plugins/all-in-one-seo-pack/

## セキュリティ系
### Login rebuilder
ログイン画面のURLを変更するプラグイン
【URL】https://wordpress.org/plugins/login-rebuilder/  

## バックアップ系
### WP-DBManager
以前はこちらを使ってた。「BackWPUp」よりは更新頻度は低い。
そしてこちらはDBのバックアップのみで、アップした画像ファイルなどの類はバックアップ出来ない。
【URL】https://ja.wordpress.org/plugins/wp-dbmanager/

### BackWPUp
こちらはDBの他、アップしたファイルの類もまとめてバックアップしてくれる。
【URL】https://ja.wordpress.org/plugins/backwpup/

## カスタム投稿タイプ系
###Custom Post Type UI
カスタム投稿タイプを作るのに便利。
ただ自分で `functions.php` を触って作る方法を「[Wordpress カスタム投稿タイプの作り方](http://qiita.com/nagasawaaaa/items/9501c0a2e544d85ee78d)」という記事にまとめたのでそちらで対応しても良い。
【URL】https://ja.wordpress.org/plugins/custom-post-type-ui/

## カスタムフィールド系
###Advanced Custom Fields
毎回と言っていいほどお世話になっています。
【URL】https://wordpress.org/plugins/advanced-custom-fields/
rpm自作 (pearの例)

## 目的

セットアップ手順書には`local-pear.rpm`をインストールしろと書いてあるが、
何が入っているの？ を知る方法

## pear listが見ているもの

pearは`/usr/local/pear/.registry/`以下の 〜.reg ファイルを読み込み、
`pear list`で一覧として返す。

* [pear list で表示される情報が .registry に格納されていた - bayanの<del>電波</del>日記](http://d.hatena.ne.jp/bayan/20150314/1426310532)

なお`pear/.depdb`と`pear/.filemap`は正しくなくても動く。

## 結果

```bash:確認
$ rpm -qal local-pear
(略)
/usr/local/pear/.registry/db.reg
/usr/local/pear/.registry/var_dump.reg
(略)
```

この例では`db.reg`, `var_dump.reg`が表示されたため、
[DB](https://pear.php.net/package/DB) と [Var_Dump](https://pear.php.net/package/Var_Dump)が含まれていることがわかった。

`Var_Dump`はなくても良さそうなので、DBだけが必要な様子。

## rpm自作

```bash:tar.gzで固めておく
cd /usr/local/pear
tar czf ~/local-pear.tar.gz \
  .registry/db.reg \
  .registry/var_dump.reg \
  DB.php \
  DB/ \
  Var_Dump.php \
  Var_Dump/ \
  data/Var_Dump/ \
  doc/DB/ \
  doc/Var_Dump/ \
  test/DB/ \
  test/Var_Dump/
```

```bash:
mkdir -p /root/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}
cd /root/rpmbuild/BUILD/
tar xzf ~/local-pear.tar.gz
```

```spec:/root/rpmbuild/SPECS/local-pear.spec
%define name local-pear
%define version 1.0
%define unmangled_version 1.0
%define release 1
%define _binaries_in_noarch_packages_terminate_build 0

Summary: PEAR DB, Var_Dump
Name: %{name}
Version: %{version}
Release: %{release}
License: GPL2
Source0: %{name}.tar.gz
Group: Applications/File
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-buildroot
Prefix: %{_prefix}
BuildArch: noarch

%define INSTALLDIR %{buildroot}/usr/local/

%description
local-pear

%prep

%build

%install
rm -rf %{INSTALLDIR}
mkdir -p %{INSTALLDIR}
cp -R . %{INSTALLDIR}

%clean
rm -rf %{buildroot}

%files
/usr/local/pear/
/usr/local/php/bin/pear
/usr/local/php/bin/peardev
/usr/local/php/bin/gen_php_doc.sh
```

```bash:build
cd /root/rpmbuild/
rpmbuild -ba SPECS/local-pear.spec
```

* /root/rpmbuild/SRPMS/local-pear-1.0-1.src.rpm
* /root/rpmbuild/RPMS/noarch/local-pear-1.0-1.noarch.rpm

が生成される。
Tableau PublicでUIの表示言語を変更する方法

Tableau Publicを日本語環境でインストールすると、UI表示、サンプル等が全て日本語になります。~~2016年8月時点で、使用言語を切り替えるUIは存在しません。~~ **2017年2月時点で、UIで切り替えられるようになっています。以下は、バージョン10.1.5での方法です。**

### UIの言語を切り替える方法

メニューの`ヘルプ(Help)`> `言語の選択(Choose Language)`から、使用する言語を選択します。選択すると、Tableauが再起動されます。

![UI言語](https://qiita-image-store.s3.amazonaws.com/0/10290/beec05bc-ad5d-cd04-c552-4bb5a1a84ad4.png)

### ワークブックのロケールを切り替える方法

メニューの`ファイル`> `ワークブック ロケール`で、使用する言語を選択します。言語がリストになければ、`詳細...`を選択します。

![ロケール](https://qiita-image-store.s3.amazonaws.com/0/10290/a6e67698-8513-7422-2aa7-5ebb2f04d1ab.png)

`詳細...`を選択した場合は、ロケールの選択ダイアログが表示されます。

![詳細](https://qiita-image-store.s3.amazonaws.com/0/10290/4d88609f-42c0-ab73-93d5-ec63f2da3300.png)
Windows上のMojolicious開発環境構築（ざっくり版）

# ActivePerlをインストール
他の選択肢もありますが、ActivePerlの知名度が高く、64Bitのバイナリファイルを提供してくれてますので、便利です。  
[ActivePerl](http://www.activestate.com/activeperl/downloads)

# Eclipseをインストール
Javaの開発で活用されているEclipseがPerlの開発にも適用します。システムになければインストールしましょう。  
[Eclipse](https://eclipse.org/downloads/)

# EPICをインストール
EPICがEclipseをPerl開発用IDEへ改装するためのプラグインです。  
[EPIC](http://www.epic-ide.org/download.php)

# PadWalkerをインストール
PadWalkerがPerlのモジュールです。PadWalkerがなければ、EPICのデバッグ機能が効きません。PadWalkerがPerl Package Manager（PPM）を通してインストールします。（検索すれば出てくるはずです）

# Mojoliciousをインストール
MojoliciousがPadWalkerと同じく、PPMよりインストール可能です。