OmniAICreator/Qiita-1.07M huggingface dataset:
fabricを使用したjbossへのデプロイスクリプト


fabricによるjbossへのデプロイ用スクリプト。
ビルド後の成果物が作られていることを前提とする。

### スクリプト

```python
from fabric.api import run, env, put

env.use_ssh_config = True

def deploy():
    put("./trunk/project/build/libs/app.war", "/home/ec2-user/app.war")
    run("sudo chown jboss:jboss /home/ec2-user/app.war")
    run("sudo /opt/jboss7/bin/./jboss-cli.sh -c --command='undeploy app.war'")
    run("sudo /opt/jboss7/bin/./jboss-cli.sh -c --command='deploy /home/ec2-user/app.war'")
    run("sudo /etc/init.d/jboss restart")
```

### 実行

```
fab -H {ホスト名} deploy
```

## おまけ
踏む台サーバを使用する方法。
引数に指定して使用する方法とconfigファイルに記述して使用する方法の２つを紹介。

### 引数で指定
.ssh/configに各サーバの設定を記述する。

```
Host           proxy                         #踏み台サーバの名前
HostName       XXX.XXX.XXX.XXX               #踏み台サーバのホスト
User           deploy                        #SSH接続のユーザー名
IdentityFile   /home/ec2-user/.ssh/key.pem   #SSH接続の鍵ファイル

Host           remote                        #接続先の名前
HostName       XXX.XXX.XXX.XXX               #接続先のホスト
User           deploy                        #SSH接続のユーザー名
IdentityFile   /home/ec2-user/.ssh/key.pem   #SSH接続の鍵ファイル
```

「-g」オプションで踏み台サーバのホスト名を指定してコマンドを実行する。

```
fab -H remote -g proxy deploy
```

### configに指定

下記のように直接configに指定する。
```
Host           proxy                         #踏み台サーバの名前
HostName       XXX.XXX.XXX.XXX               #踏み台サーバのホスト
User           deploy                        #SSH接続のユーザー名
IdentityFile   /home/ec2-user/.ssh/key.pem   #SSH接続の鍵ファイル

Host           remote                        #接続先の名前
HostName       XXX.XXX.XXX.XXX               #接続先のホスト
User           deploy                        #SSH接続のユーザー名
IdentityFile   /home/ec2-user/.ssh/key.pem   #SSH接続の鍵ファイル
ProxyCommand   ssh -W %h:%p proxy            #踏み台サーバを指定
```

ホスト名を指定してコマンドを実行する。
```
fab -H remote deploy
```
fabricの導入方法と基本的な使い方


python製のデプロイツールfabricの導入方法と使い方。
CentOSなどyumが使えるOSが前提。

## 導入方法

必要なパッケージをインストール。

```
yum install gcc python-devel python-setuptools
easy_install pip
pip install fabric
```

インストールされたことを確認。

```
fab -V
```

## コマンド実行
リモートサーバーに対してコマンドを実行してシステム情報を取得する。
sshでホスト名を指定して接続ができることが前提。
(./ssh/configファイルを設定するなど）

fabfileを作成する。

```python
from fabric.api import run, env

env.use_ssh_config = True

def uname():
    run("uname")
```

fabコマンドを実行する。
(hostnameにホスト名を指定)

```
fab -H hostname uname
```

## おまけ

```python
#リモートサーバーでコマンド実行
run("コマンド")

#ローカルサーバーでコマンド実行
local("コマンド")

#リモートサーバーにファイル送信
put("{送信元のファイルパス}", "{送信先のファイルパス}")

#リモートサーバーからファイル受信
get("{送信元のファイルパス}", "{送信先のファイルパス}")

```

各コマンドを実行する際にモジュールを先に指定する。

```
from fabric.api import run, env, local, put, get
```
UbuntuServer 16.04 LTSでJupyter Notebookを使った機械学習環境を手っ取り早く作る手順

# はじめに

pyenv + Anacondaでもっと簡単にできる手順を別の記事にまとめました。
pyenvを使うことに抵抗のない方は以下のURLをご参照下さい。

http://qiita.com/mix_dvd/items/29dfb8d47a596b4df36d

また、別の方法をまとめてみたので、以下のリンク先もあわせてご参照下さい。

[Ubuntu 16.04で機械学習の環境をさくっと作る手順](http://qiita.com/mix_dvd/items/4bf7f6e7fa19068ea1d4)

# UbuntuServerのインストール

以下のURLからisoファイルをダウンロードして、実機でも仮想環境でも構わないのでインストールします。

http://www.ubuntu.com/download/server

詳しい手順は、詳細を説明したサイトがあったので、こちらをご参照下さい。

http://webkaru.net/linux/ubuntu-14-04-lts-install/

# 初期ユーザーでログイン

インストール中に作成した初期ユーザーでログインします。
※ rootではログインできません。

# 特権ユーザー(root)になる

以下のコマンドを実行し、初期ユーザーのパスワードを入力するとrootになれます。

```
$ sudo su
```

# ひたすらコマンドを打つ！

必要なものをインストールするコマンドや多少出てくるエラーに対処するためのコマンド群です。

```
# apt install -y build-essential
# apt install -y python3-dev
# apt install -y python3-setuptools
# easy_install3 pip
# pip install numpy
# pip install scipy
# apt install libfreetype6-dev
# ln -s /usr/include/freetype2/ft2build.h /usr/include/
# pip install matplotlib
# pip install seaborn
# pip install scikit-learn
# pip install jupyter
```

以上で必要なソフトウェアのインストールが終わります。
rootでの作業はこれで終わりなので、以下のコマンドで初期ユーザーに戻ります。

```
# exit
```

## IPアドレスの確認

Jupyter NotebookはWebブラウザでアクセスすることから、UbuntuのIPアドレスを確認しておきます。
ちなみに、以下のコマンドで確認できます。

```
$ ifconfig
```

# Jupyter Notebookの環境設定

Jupyter Notebookは初期設定のままだと外部からアクセスできないので、設定ファイルを作って修正する必要があります。

```
$ cd
$ jupyter notebook --generate-config
$ vi ~/.jupyter/jupyter_notebook_config.py
```

初期設定ファイルはほとんどがコメントアウトしてあるので、必要なものを見つけて修正していきます。

## 外部からアクセスできるようにする設定

```
c.NotebookApp.ip = '*'
```

## ローカルのブラウザを自動起動しないようにする設定

```
c.NotebookApp.open_browser = False
```

## ポート番号を変更して、既存のWebサーバーと競合しないようにする設定

```
c.NotebookApp.port = 8888
```

# Jupyter Notebookの起動

初期ユーザーのホームディレクトリで以下のコマンドを実行。

```
$ jupyter notebook
```

いろいろ動いてそうに見えたら、別のマシンのWebブラウザを起動して以下のURLにアクセスする。

http://xxx.xxx.xxx.xxx:8888

「xxx.xxx.xxx.xxx」はIPアドレスに置き換えて入力して下さい。

Jupyter Notebookのページが表示されたらO.K.！
CocoaPods を1.0.0 link_with` in the Podfile is now unsupported エラー時にやったこと

### CocoaPods を1.0.0 
``` link_with` in the Podfile is now unsupported ``` エラー時にやったこと！


------

### 原因
※ version 1.0.0で、``` link_with ``` deprecatedされた。

------

### 対策

以前バージョンの``` link_with ```　部分を

```
link_with ['KokaruFramework']  
```

以下に変更


```
target 'KokaruFramework' do
    available_pods
end
```


------


http://blog.cocoapods.org/CocoaPods-1.0-Migration-Guide/
``` :exclusive => true and link_with have been removed in favour of the above. ```
ハイパフォーマンスDjango - Model


[High Perfomance Django](https://highperformancedjango.com/)を読んでとても勉強になったので、備忘録メモ。


### クエリの数を減らせ
+ [select_related](https://docs.djangoproject.com/en/dev/ref/models/querysets/#select-related)
+ [prefetch_ralated](https://docs.djangoproject.com/en/dev/ref/models/querysets/#prefetch-related)

これをちゃんと使ってね。
開発中は、Django Debug Toolbarで発行クエリを確認。

### クエリの実行時間を短く
+ indexをきちんと張る
+ でかいJoinは避ける
+ でかいテーブルにはall()はやめて、LIMITかける
+ 存在チェックは`spam.count() > 0`じゃなくて、`spam.exists()`で

### Foreign Keys
Generic Foreign Keysは便利だけど、裏でパフォーマンス悪いクエリ投げてることある。
自分で外部キー張った方がいい場合も。

### cached_propety
実行コストがかかる & 何度も呼ばれるプロパティに対しては、キャッシュが有効。
https://docs.djangoproject.com/ja/1.9/ref/utils/

### 扱うオブジェクトは小さく
+ [defer](https://docs.djangoproject.com/ja/1.9/ref/models/querysets/#defer)
+ [only](https://docs.djangoproject.com/ja/1.9/ref/models/querysets/#only)
+ [values](https://docs.djangoproject.com/ja/1.9/ref/models/querysets/#values)
+ [values_list](https://docs.djangoproject.com/ja/1.9/ref/models/querysets/#values-list)

得られる結果がでかい場合は、これらを使ってパフォーマンスあげよう。

### クエリキャッシュ
+ [Johnny Cache](https://pythonhosted.org/johnny-cache/)
+ [Cache Machine](http://cache-machine.readthedocs.io/en/latest/)

この2つが書籍の中では紹介されてたけど、Jonny Cacheは開発止まってた。
(Django1.5以上では使えなそう...)

自作するなら、gumiのブログで紹介されてるAbstructCachedModelが参考になる。
[Djangoでキャッシュ機能付きモデル - gumi Engineer’s Blog](http://d.hatena.ne.jp/gumilab/20101020/1287540570)

### その他

+ [レプリDB](https://docs.djangoproject.com/en/dev/topics/db/multi-db/)
+ [rawクエリ](https://docs.djangoproject.com/en/dev/topics/db/sql/#performing-raw-queries)
+ 非正規化
+ NoSQL
+ Sharding


## 勉強になったその他の資料
+ [Pycon Jp 2014 - Djangoアプリケーション、パフォーマンスチューニング](https://www.youtube.com/watch?v=1aLAZG4Udg0)
+ [DjangoCon 2014- A Nice Problem to Have: Django Under Heavy Load](https://www.youtube.com/watch?v=gukzap2BU2M)
+ [DjangoCon 2014- Performant Django](https://www.youtube.com/watch?v=nhBGuf_KGGc)
c++ builder / TTreahd > スレッド終了後の処理

```txt:動作確認
C++ Builder XE4
```

TThreadインスタンスを作成した側(例: Main.cpp)でTThreadインスタンス終了後の処理をする場合、スレッドの終了を検知する必要がある。

TThreadにはIsTermiantedプロパティがあるが、これはTerminate()をコールした時点でtrueになるので、実際にTThreadが終了したわけではない。

代わりの方法として3つ提案されている。

http://stackoverflow.com/questions/21190562/delphi-check-if-tthread-is-still-running

- WaitForを使う
- MsgWaitForMultipleObjectsを使う
- OnTerminateを使う

http://qiita.com/7of9/items/0b78b5ef45cf0a09a6cd
で実装したようなことはしなくても良いのかもしれない。
Linuxでパッケージのインストールの有無を調べるコマンドのmemo

このパッケージ入れてたっけ…？と調べたくなるので。

## rpm

完全なパッケージ名が分かっていれば、rpmコマンドに `` -q `` オプションで。

````
rpm -q [パッケージ名]
````


#### まだインストールされていないパッケージであった場合
````

rpm -q man-pages-ja

# -> インストールされてなければ以下のように返ってくる
パッケージ man-pages-ja はインストールされていません。 

````

#### 既にインストールされていたパッケージであった場合
````

rpm -q iptables

# -> インストールされていれば以下のように帰ってくる
iptables-1.4.7-16.el6.x86_64

````

#### より詳細のパッケージ情報が欲しい場合
````
rpm -qi iptables

# -> インストールされていればパッケージの詳細情報が返ってくる
Name        : iptables                     Relocations: (not relocatable)
Version     : 1.4.7                             Vendor: CentOS
Release     : 16.el6                        Build Date: 2015年07月24日 11時10分22秒
Install Date: 2016年02月10日 09時13分18秒      Build Host: c6b8.bsys.dev.centos.org
Group       : System Environment/Base       Source RPM: iptables-1.4.7-16.el6.src.rpm
Size        : 861645                           License: GPLv2
Signature   : RSA/SHA1, 2015年07月25日 05時40分14秒, Key ID 0946fca2c105b9de
Packager    : CentOS BuildSystem <http://bugs.centos.org>
URL         : http://www.netfilter.org/
Summary     : Tools for managing Linux kernel packet filtering capabilities
Description :
The iptables utility controls the network packet filtering code in the
Linux kernel. If you need to set up firewalls and/or IP masquerading,
you should install this package.

````


## yum

grep で絞り込みをすれば、パッケージ名が不完全でも検索してくれるから、便利。

````
yum list installed | grep [パッケージ名]
````

#### まだインストールされていないパッケージであった場合
````

yum list installed | grep man-pages-ja

# -> インストールされてなければ何も返ってこない

````

#### 既にインストールされていたパッケージであった場合
````

yum list installed | grep tables

# 一致する候補があれば一覧が出る
iptables.x86_64       1.4.7-16.el6      @base
iptables-ipv6.x86_64  1.4.7-16.el6      @base

````

#### より詳細のパッケージ情報が欲しい場合
````

yum info iptables

# パッケージがあれば以下のように詳細情報が返ってくる
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp.iij.ad.jp
 * extras: ftp.iij.ad.jp
 * updates: ftp.iij.ad.jp
インストール済みパッケージ
名前                : iptables
アーキテクチャ      : x86_64
バージョン          : 1.4.7
リリース            : 16.el6
容量                : 841 k
リポジトリー        : installed

（省略）

````
Bashでいろいろループする

# 配列をハードコーディングしてループ

```bash
items=(
    "altair"
    "betelgeuse"
    "canopus"
)

for item in "${items[@]}" ; do
    echo "[ ${item} ]"
done
```

## ハードコーディング パターン2

```bash
items[0]="altair"
items[1]="betelgeuse"
items[2]="canopus"

for item in "${items[@]}" ; do
    echo "[ ${item} ]"
done
```

# 連番を生成してループ

```bash
for i in {1..10} ; do
    echo ${i}
done
```

```bash
for i in `seq 1 10`; do
    echo ${i}
done
```

# ファイル一覧をループ

```bash
for file_name in * ;do
    echo ${file_name}
done
```

```bash
files=(`ls -1 somedir/`)
for file_name in "${files[@]}"; do
    echo ${file_name}
done
```


# 引数をすべてループ

```bash
for arg; do
  echo ${arg}
done
```

```bash
for arg in "$@"; do
  echo ${arg}
done
```

```bash
$ ./hoge.sh altair betelgeuse canopus
```

Thanks to: @akinomyoga, @mpyw

# ファイルを読み込んで1行づつループ

```bash
while read line ; do
    echo ${line}

done < ${DATAFILE}
```

# 二次元表

```bash
#!/usr/bin/env bash

# iOS 公開用に PNG 画像のアイコンサイズを変更するスクリプト

sizes=(
"29 29"
"40 40"
"50 50"
"57 57"
"58 29@2x"
"60 60"
"72 72"
"76 76"
"80 40@2x"
"87 29@3x"
"100 50@2x"
"114 57@2x"
"120 60@2x"
"144 72@2x"
"152 76@2x"
"167 83.5@2x"
"180 60@3x"
)

if [ ! "${1}" ]; then
    echo "usage: ${0} <image-file>"
    exit 1
fi

bn=`basename ${1}`
bn=${bn%.*}
DN=`dirname ${1}`
for size in "${sizes[@]}"; do
    s=(${size})
    out_file=${bn}_${s[1]}.png
    echo ${s[0]} ${out_file}
    # sips --resampleWidth ${s[0]} --out ${out_file} ${1}
    convert -resize ${s[0]}x ${1} ${out_file}
done
```


### zsh の場合
```zsh
#!/usr/bin/env zsh

# ↓これを書いておく
setopt SH_WORD_SPLIT

servers=(
  "1 user@server1.example.com"
  "2 user@server2.example.com"
)

for row in "${servers[@]}"; do
  echo '========================'
  s=(${row})
  echo ${s[1]}
  echo ${s[2]}
done
```

#### 結果

```text
========================
1
user@server1.example.com
========================
2
user@server2.example.com
```
森田森吾のおもしろゲームサイトjavaまとめ

Dgo ver1.2
http://dan-ball.jp/javagame/dgo/

四川省【二角取り】 ver1.6
http://dan-ball.jp/javagame/shisensho/

リムロケット ver1.8
http://dan-ball.jp/javagame/lim/

クロスウイルス ver1.3
http://dan-ball.jp/javagame/crossvirus/

粉遊び2 ver8.5
http://dan-ball.jp/javagame/dust2/
Arduinoをはじめて一人で使ってみる

#とりあえずLEDを光らせる

二つのLEDを交互に光らせました！

![IMG_3216 2.JPG](https://qiita-image-store.s3.amazonaws.com/0/113499/8c8064b7-d494-d82e-e2d6-849e9b7fc067.jpeg)


**参考**

- [Arduinoを始めよう](http://www.ez0.net/2010/11/arduino/)
- [ArduinoでLEDを光らせよう](http://www.ez0.net/2010/11/arduinoled/)
- [Arduinoのポートが認識されない時の対処法](http://qiita.com/ryusukefuda/items/5b2edea6b62794069209)
- [Arduinoとブレッドボードで始める電子工作](http://qiita.com/mio_k/items/e600723dda7334bded69)

#人感センサーを使ってみる

人感センサ型番：**秋月電子の焦電型赤外線センサユニット(SE-10)を使う**

人感センサーを使ってみました！
反応前
![IMG_3222.JPG](https://qiita-image-store.s3.amazonaws.com/0/113499/e2ec1134-6612-b2cc-02b4-30fff0149284.jpeg)
反応後
![IMG_3223.JPG](https://qiita-image-store.s3.amazonaws.com/0/113499/2e505122-83e6-01d5-98f0-3f4fe8ef3354.jpeg)



**参考**

- [人感センサーをつかう](http://n.mtng.org/ele/arduino/tutorial022.html)
- [人感センサ型番詳細（秋月電子)](http://akizukidenshi.com/catalog/g/gM-02471/)
森田森吾のおすすめプログラミング学校・資料

あまり文章が得意では無いのでまとめをお作りします。

Webデザイン・Webデザイナースクール　INTERNETACADEMY
https://www.internetacademy.jp/course/engineer.html?utm_source=yahoolisting&utm_medium=cpc&utm_campaign=kouza

クレモ
http://qremo.jp/lp/pc14001/?utm_source=yahoo&utm_medium=cpc&utm_term=b03_0000264&utm_campaign=qremo_B_ikebukuro

NexSeed
http://nexseed.net/engineer-course/

ハピネステクノロジー
http://www.it-careus.link/

TechAcademy
https://techacademy.jp/briefing-lp?utm_source=yahoo&utm_medium=cpc&utm_campaign=101_bootcamp_pg

ヒューマンアカデミー
http://haa.athuman.com/lpo/web_5/?code=051062&xadid=051062


神田ITスクール
http://www.kanda-it-school.com/?utm_source=yahoo&utm_medium=cpc&utm_campaign=yahoo_listing
about xcode


![Kobito.rGaUJp.png](https://qiita-image-store.s3.amazonaws.com/0/56713/2981a725-992f-b186-c662-872f402e2e62.png "Kobito.rGaUJp.png")


- playground
- target
- project
- workspace

what and difference ?

关于项目结构, 有3点你需要了解清楚. target, project, workspace.
- [target]()https://developer.apple.com/library/ios/featuredarticles/XcodeConcepts/Concept-Targets.html#//apple_ref/doc/uid/TP40009328-CH4-SW1 声明一个产品或者二进制文件如何编译.包括编译的配置如编译器,链接还有大一了那些文件或者资源被包含进去.
- [project](https://developer.apple.com/library/ios/featuredarticles/XcodeConcepts/Concept-Projects.html#//apple_ref/doc/uid/TP40009328-CH5-SW1), 就是一个工程了,包含了所有文件.
- [workspace](https://developer.apple.com/library/ios/featuredarticles/XcodeConcepts/Concept-Workspace.html), 就是一系列工程的集合.可以用来组织很多工程.例如一个工程A. 它需要一个包 B. 但是 B 是以工程的形式提供的.这样workspace 就会在编译打包的时候先编译 B 然后链接到 A 上.通常都是在流行的 cocoapods 一起使用.


添加已有的 project 到 workspace.
在 xcode 的左侧项目浏览器窗口,按住 control, click 会呼出
![Kobito.fUhqJI.png](https://qiita-image-store.s3.amazonaws.com/0/56713/fd3717d2-690d-ca5b-f4e7-9a830a246680.png "Kobito.fUhqJI.png")

选择添加文件到 workspace, 然后在 finder 浏览器窗口中选择你想要添加的项目文件

![Kobito.HYmLhB.png](https://qiita-image-store.s3.amazonaws.com/0/56713/fe011233-2725-77f5-f9d4-eb4cce755748.png "Kobito.HYmLhB.png")


ref:

- https://developer.apple.com/library/ios/recipes/xcode_help-structure_navigator/articles/Adding_an_Existing_Project_to_a_Workspace.html
EC2 - Windows [AMI作成]

# 目的
WindowsServerのAMIを作成する
## 方法
EC2ConfigサービスでSysprepを使用する

# 設定
* "ec2ConfigService Settings"を検索

![ec2config2.JPG](https://qiita-image-store.s3.amazonaws.com/0/58788/cfae77c4-5d2a-4f0f-6925-146ba90203d5.jpeg)

* [Ec2 サービスプロパティ] ダイアログボックスで [イメージ] タブを選択
![ec2config1.JPG](https://qiita-image-store.s3.amazonaws.com/0/58788/047f2369-b107-feba-a65c-96a8b9bddbbc.jpeg)

* EC2Configは、選択したパスワードオプションに基づいて設定ファイルを編集する
    * [ランダム]：EC2Config はパスワードを生成してユーザーのキーで暗号化し、暗号化されたパスワードをコンソールに表示します。 この設定は初回起動後に無効になるため、インスタンスを再起動したり、停止して起動した場合でもパスワードは保持されます。
    * [Specify]：パスワードは、Sysprep 応答ファイルに暗号化されていない形式（平文）で保存されます。 Sysprep が次に実行されると、管理者パスワードに設定されます。ここでシャットダウンした場合、パスワードはすぐに設定されます。サービスを再開すると、管理者パスワードは削除されます。このパスワードは後で取得できないため覚えておくことが重要です。
    * [Keep Existing]：Sysprep が実行されたときや EC2Config が再起動したときに、管理者アカウントの既存のパスワードが変更されません。 このパスワードは後で取得できないため覚えておくことが重要です。

* OKをクリックするとsysprepの処理が始まり、サーバがシャットダウンされ、AMIを作成できるようになる。
EC2 - Windows [SQLSERVERの再インストール]

# SQLSERVERの再インストール

* SQLSERVERなどをCドライブ -> 他ドライブへ変更する場合、AWSサポートにリクエストが必要になります。

* 手順

1. AWSへリクエスト情報を送る
2. AWSからインストールメディアが含まれるEBSのスナップショットが共有される
3. 共有されたスナップショットをもとにEBSボリューム作成
4. EC2インスタンスにアタッチ
5. [Disk Management] ユーティリティを使用してEBSボリュームのストレージ領域を拡張する

```
■ SQL Server インストールメディアのリクエスト情報
　---
　・使用目的: ドライブを変更して再インストール
　・使用するリージョン:ap-northeast-1
　・インスタンス ID:i-*****
　・SQL Server のバージョン、エディション、および、言語: SQL Server 2014 SP1 Standard 日本語版
```

![os-recovery1.png](https://qiita-image-store.s3.amazonaws.com/0/58788/1850011e-511b-aaca-9509-ade26b6c4280.png)
IPv6対応期限目前!!アプリが対応しているか確認する方法


<img src="https://qiita-image-store.s3.amazonaws.com/0/25250/54fab0ef-343f-869c-8a39-e85449f83a15.png" width="480">

すでに確認済みの方が多いとは思いますが、備忘録として残しておきます。

# IPv6対応の概要

>
IPv6 is growing exponentially and carriers worldwide are moving to pure IPv6 APNs. Learn about new tools to test your apps for compatibility and get expert advice on making sure your apps work in all network environments. iOS 9 and OS X 10.11 now support the latest TCP standards. Hear from the experts on TCP Fast Open and Explicit Congestion Notification, and find out how it benefits your apps.


引用：https://developer.apple.com/videos/play/wwdc2015/719/

このこのようにAppleがIPv6を推していて、申請時にIPv6対応が必須になりました。
以下では、開発しているアプリがIPv6に対応しているか（IPV4に依存していないか）を確認する方法を記載します。

# 環境

- Mac OSX 10.11.4
- iOS 9.3.2

# 手順

ステム環境設定を開いて、共有アイコンをoptionを押しながらクリックします。

<img src="https://qiita-image-store.s3.amazonaws.com/0/25250/ca26d14c-c604-b837-a620-11d7379ecf44.png" width="480">

そうする事によって、普段は表示されていない、「NAT64ネットワークを作成」チェックボックスは表示されます。

<img src="https://qiita-image-store.s3.amazonaws.com/0/25250/f06a9e77-3168-c734-fcb6-280ad2c90c59.png" width="480">

インターネット共有を有効にする

<img src="https://qiita-image-store.s3.amazonaws.com/0/25250/709c3d32-cf2a-1f51-ea95-4b51de0e0293.png" width="480">


- 「NAT64ネットワークを作成」にチェックをいれる
- 「相手のコンピュータでのポート」で「Wifi」にチェックをいれる 
- 「共有する接続経路」は、LANをつかっているので「Thunderbolt Ethernet」を選択しました
- そして、「インターネット共有」にチェックをいれます

<img src="https://qiita-image-store.s3.amazonaws.com/0/25250/c2f52c86-16f5-24d1-b7d7-6f8499696797.png" width="480"> 

- Wi-Fiを入にするをクリック

<img src="https://qiita-image-store.s3.amazonaws.com/0/25250/e045d8f0-6b48-cdcf-850f-9ac5f451cdfd.png" width="480">

- 開始をクリックする

<img src="https://qiita-image-store.s3.amazonaws.com/0/25250/238ed5ac-d61d-0468-0a08-f58bc5bb4d35.png" width="480">

- そうすると「インターネット共有：入」の状態になり、IPv6の検証をする準備ができました。
- あとは、対象アプリがインストールされている端末のWifi設定で、該当のMacを選択すればOKです。

# 感想

特にIPv4に依存した実装をしていなければ、特に対応する必要もないきがしましす。実際の対応事例があれば、是非知りたいです。
間もなくWWDCが開催され、また色々な機能が発表になるかと思います。それに追従していくのは簡単ではありませんが、必死に追いかけて行きたいと思います。

# 2016/09/12 追記

世の中には、対応しているのにかかわらずRejectされるケースがでている様です。

- https://teratail.com/questions/40886

- https://forums.aws.amazon.com/message.jspa?messageID=726620

# 2016/10/3 追記

[iOS Developers Japan](https://www.facebook.com/groups/ios.dev.jp/)のFacebookページにて、「自分の環境ではテストしてもうまくいったよ」とアピールすると、審査が通る事例もあるようでした。謎ですね。

# 謝辞

- [iOS9 で必要な IPv6 only Network への対応](http://qiita.com/shao1555/items/4433803419dfc72bf80b)
- [[iOS]2015年9月16日リリースのiOS9対応とipv6移行対応について対応と参考資料まとめ]
(http://to-developer.com/blog/?p=2036)
- [WWDC 2015 - 719 | Your App and Next Generation Networks](https://developer.apple.com/videos/play/wwdc2015/719/)
HTML,CSS勉強メモ #25 ~parallaxについて調べてみた~

無料テンプレートをいじってみています。
その中にparallaxがあり、最初なんだかわからなかったのでちょっと調べてみました。

##**メモ**##
###**Parallaxとは**
直訳すると「視差」で、カーソルの動きに合わせて背景を動かせるJavaScriptのプラグインです。


###**導入方法**

####**ダウンロード**
まずはファイルをダウンロードします。
プラグインはたくさん出ていますが、今回のテンプレートではこちらが使われていました。
[parallax.js](http://pixelcog.github.io/parallax.js/)
解凍したら任意のディレクトリに保存してください。

####**読み込み**
`</body>`の前にこちらのソースを記述します。

```html
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script src="/path/to/parallax.js"></script>
```

＊テンプレートではjQueryのバージョンが2.2.0でした。
＊jsの保存場所の指定を間違えないようにしましょう。

####**HTML**
このパララックスを使う時はclassで指定します。

```html
<div class="parallax-window" data-parallax="scroll" data-image-src=""></div>
```
任意の画像などを指定します。

####**jQueryのソースを記述する**
以下のソースを`parallax.min.js`の次に記述します。

```html
$('.parallax-window').parallax({imageSrc: '/path/to/image.jpg'});
```

＊ここでもキチンと画像の指定を忘れないように！
　ここの書き換えを忘れてかなりの時間ハマっていました・・・

####**スタイルを整える**
あとはcssなどで要素のスタイルを整えれば完成です。
＊ちなみに、ページ自体がスクロールできないとこちらの画像も動かないので、ページがスクロールするようにしてください。

このプラグインではスクロールのみですが、他では色々できるみたいなのでもっと技術があがったら試してみたいと思います。
Android Instant Apps って何？

寝不足ながら方方からタイトルの質問を受けているエンジニアがこのリンクを渡すだけで安らかに眠れますように。

##何ができるの？
* 各[newsサイト](http://jp.techcrunch.com/2016/05/19/20160518google-takes-a-new-approach-to-native-apps-with-instant-apps-for-android/)が伝えている通り「インストール不要でアプリを実行できる」機能。

本家developer's blogより、

>We call it Android Instant Apps, and it evolves Android apps to be able to run instantly, without requiring installation.
>[Android Developers Blog](http://android-developers.blogspot.jp/2016/05/android-instant-apps-evolving-apps.html)

"インストールなしでアプリの簡易実行が可能"とのこと。

##Developerは何をすればいいの？

* アプリを作り直す必要はなく、既存のアプリをupdateするイメージ。アプリの構成にもよるが１日かからないことも。

>As a developer, you won’t need to build a new, separate app. It’s the same Android APIs, the same project, the same source code. You’ll simply update your existing Android app to take advantage of Instant Apps functionality. In fact, it can take less than a day to get up and running for some developers, though the effort involved will vary depending on how your app is structured.
>[Android Developers Blog](http://android-developers.blogspot.jp/2016/05/android-instant-apps-evolving-apps.html)

##いつから使えるの？
* "later this year"らしく、現在は一部developerにβ公開中。

>We’ll be gradually expanding access for developers and bringing Instant Apps to users later this year.
>[Android Developers Blog](http://android-developers.blogspot.jp/2016/05/android-instant-apps-evolving-apps.html)

##もっと詳しく知りたい!
* [Developers](https://docs.google.com/a/google.com/forms/d/1S3MzsMVIlchLCqyNLaFbv64llxWaf90QSeYLeswco90/viewform)で登録しておくと更新情報等配信してくれるそうです!
AndroidのViewでGIF動画を表示する


# Gif動画表示したいな
AndroidのImageViewでGif動画を表示したい。
ぐぐってみると、カスタムビューを作ろう、Movieクラスを使用する！  
等色々大変そう。。。  

## 神ライブラリGlide
なんと画像ライブラリGlideを使うと華麗、綺麗、簡単にImageViewにGifを表示できちゃうのだ。

# やってみよう
### 依存関係
``` build.gradle
dependencies {
        compile 'com.github.bumptech.glide:glide:3.6.1'
}

```
### gifをプロジェクトに入れとこう
gifを入れる場所は  
res/raw  
です。
### View を用意  
  
``` activity_main.xml
	<ImageView
            android:id="@+id/gifView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
```

### バインディングしちゃおう

``` java:MainActivity.java
ImageView imageView = (ImageView) findViewById(R.id.gifView);
        GlideDrawableImageViewTarget target = new GlideDrawableImageViewTarget(imageView);
        Glide.with(this).load(R.raw.lane).into(target);

```
# 完成
![device-2016-05-19-133805.mp4.gif](https://qiita-image-store.s3.amazonaws.com/0/93802/721a70c1-255d-46d7-d44b-c547d219d901.gif "device-2016-05-19-133805.mp4.gif")
capybara-webkitでエンターキーを押下する

Capybaraでは

```rb
find(:user_name).native.send_keys(:return)
```

といった形で`<input type="text" name="user[name]>`に対するエンターキーの押下をシミュレートできようだが、capybara-webkitでは`send_keys`メソッドが`NotImplementedError`だった。

ちょっと怪しいやり方だが、エンターキーの押下は以下でシミュレートできた。

```rb
fill_in(:user_name, with: "John Doe" + "\n")
```
OpenCVのインストール方法 2系３系対応 スクリプト付き

OpenCVのインストール方法 2系３系対応 スクリプト付き
-----
 
DebianOSでは、自動的にインストールされるスクリプトを組みました
https://gist.github.com/k4zzk/24919a662faf35efc7ca96f39110ad5a
分散マトリックス(spark)の種類

# sparkの分散マトリックスの種類

分散マトリックスについて、ざっくりまとめたページを探したが見つからなかった。色々見たが公式ドキュメントや[Reza Zadeh](https://twitter.com/Reza_Zadeh)さんの発表資料に書いてあることから情報を抽出しておく。あくまでもベースとなるガイドラインなので、細かなニーズについては個別にRDDを使って書くしかない。

### 3つの分散マトリックス
spark/MLlibには各マシンにどのように分散するかの方式により
 - RowMatrix(by rows)
 - CoordinateMatrix(by entries)
 - BlockMatrix(by blocks)
のように3パターンが用意されている。
それぞれ行、セル、ブロック（セルの塊）での単位で各マシンに保持する。


### RowMatrix
基本はRowMatrixで良いが、行番号を意識してインデックス化しておきたい時はIndexedRowMatrixにしておく。後者は他の行列への変換メソッドも実装されているので、プログラムの前半でこの形式で持たせておくことは多いかもしれない。

他とのJoinが必要なことも多く、行番号（ユニークID)が振ってあることも多いはずだ（行番号が特に必要なければ後でRowMatrixに書き換えれば良い）。このクラスは1行を1台のマシンでlocal Vector型で保持するためにカラム数の多い分散マトリックスは苦手。なお、Spark公式ドキュメントにも「分散されたマトリックスの異なる形式への変換はグローバルシャッフルを必要」とあるように気楽に変換していいものではないため数学的に等価でかつ効率のよい計算手順をちゃんと設計すべき。RowMatrixもzipWithIndexをすればインデックスを振れるが行方向の数は大きいことが多く、効率を考えるべき。


### CoordinateMatrix
CoordinateMatrixは疎行列専用で使う。行単位ではなくentry毎に分散したい時に使え、大規模でも良い。お馴染みの(i, j, value)の形をしたMatrixEntryのRDDとして実装されている(co-ordinateはi,jでアクセスする座標に似た概念)。
現状は計算をサポートしていないので、[ここのような](https://github.com/sadikovi/sbt-multi-project-example/blob/c51e80f5111dba956f5a9ee9da3162f1d10f433f/foo/src/main/scala/org/isa/linalg/distributed/RCoordinateMatrix.scala)拡張したクラスを作りたくなるのも頷けるが、どうもスケールしない計算処理はこのクラスに安易に入れたくないんだと思う。実際、このクラスに計算処理は実装されずに、新たにBlockMatrixが追加されたのでtoBlockMatrixを呼び出して問題が解決できないか先ずは考えるべき。

### BlockMatrix
BlockMatrixはそのものずばりBlock matrix行列という特定の形をした行列に用いる。
行列の性質は
https://www.wikiwand.com/en/Block_matrix
http://mathworld.wolfram.com/BlockMatrix.html
など

### ローカルマトリックスと仲良くする
分散型の行列同士だと許されていない操作がある。特に積を計算するときなど、片側をローカルマトリックスに収まるように分割してから計算することが多い。
Bluemixでデータ分析「dashDB」：ODBCツールで快適に活用の巻

ODBCツールが案外快適だったという備忘録。

WindowsのDOSコマンドで地味に色々いじるのも良かったのですが、そもそもコマンドに慣れてないので結構しんどく・・・。。ODBC接続できるGUIツール**「Aginity」**なるものを使ってみました。
dashDBのWEB UIにリンクが貼ってあるので、スムーズにインストールできました。

ちなみに見た目はこんなオシャレ感です。アイコンかっこいい。

**・SQL実行できる（結果も見れるし、時間も測定可能）**
**・テーブル定義等なども確認でき、見た目よし。**
**・SQLのEXPLAINが見れるので、トレースもできる。**

便利です。そして**無償！**
![スクリーンショット 2016-05-19 12.42.22.png](https://qiita-image-store.s3.amazonaws.com/0/119378/ee68f6e8-6138-53e8-e9c9-b4a201b006c6.png)


## 前提
WindowsにODBCドライバを入れます。

**(1)ODBCドライバをダウンロード**
dashDBのWEB画面から、ドライバをダウンロードします。
ダウンロード画面はこちら。exeがダウンロードされるので素直にそれをインストールすればOK。
![downwin.png](https://qiita-image-store.s3.amazonaws.com/0/119378/eacd4c85-6e29-28ab-0093-5169d7eab8d0.png)

**(2)以下のコマンドでODBC設定をします。**
以下で紹介するAginity以外でも、例えばSPSS Modeler等ODBC接続が必要になるものがある場合はDSNの設定が必要になるので、ここでちゃっちゃとやってみました。

①PATHを通します。
ドライバのインストール先（例→C:\Program Files\IBM\dash\bin）のパスを通します。Windowsでパスを通したい場合は、システムのプロパティから「環境変数」でできます。

②コマンドプロンプトを立ち上げて以下を実行します。

```console:非SSL通信で良いとき
db2cli writecfg add -database BLUDB -host hostname -port 50000
db2cli writecfg add -dsn alias -database BLUDB -host hostname -port 50000
```

```console:SSL通信したいとき
db2cli writecfg add -database BLUDB -host hostname -port 50001
db2cli writecfg add -dsn alias -database BLUDB -host hostname -port 50001
db2cli writecfg add -database BLUDB -host hostname -port 50001 -parameter "SecurityTransportMode=SSL"
```

hostnameはホスト名、aliasのときをは好きなDSN名を入れて下さい。
コマンドが問題なく通れば、以下のようにODBCツールから設定されていることが確認できます。

![スクリーンショット 2016-08-02 17.19.35.png](https://qiita-image-store.s3.amazonaws.com/0/119378/5bfae6fa-946d-046c-0f40-bad132b12d8f.png)


## Aginityをダウンロード＆インストール
dashDBにログインして、Connect→Connection Tools→Database administration softwareと飛び、下のほうにあるAginityのリンクへ進みます。
メールアドレスを登録すると、そのメールアドレスにダウンロード先のリンクが送られてくるので、それを実行してインストールです。
![スクリーンショット 2016-05-19 12.39.17.png](https://qiita-image-store.s3.amazonaws.com/0/119378/31f11b05-b5d4-11d3-1012-863698b62454.png)

## Aginityセットアップ
Connectionとして接続先情報を入れます
Serverには、ホスト名を入力します（ホスト名はdashDBのWEB画面のConnect→Connection Infoで出てきます。）。
何度も接続する環境であれば、Saveで保存しておいたほうが便利です。OKを押せば、冒頭のキャプチャのように画面が出てきます。
![スクリーンショット 2016-05-19 12.51.03.png](https://qiita-image-store.s3.amazonaws.com/0/119378/4f017f64-b6c4-b495-e983-229f0ad445a5.png)

## おまけ
・SQL実行するのは右上のエディタ部分にSQLを入れて、文字列を反転させた状態で「Execute」をクリック
・SQLアクセスプランを出すのは、同じくSQLを入力して文字列を反転させた状態で「Explain」をクリック。
CentOSでネットワークが繋がらなくてeth0とかいなくなったときにやること

メモ。

`/etc/udev/rules.d/70-persistent-net.rules`の中身を消す。
コメントアウトじゃなくて消す。
(気になる場合は`/tmp`とかにmvコマンドで退避)

VMwareで共有フォルダを設定したときに発生。(CentOS上でシンボリックリンク貼ったりとかそういうのはなし。あくまでVMWareの設定をして起動しただけ)
共有フォルダの仕方はとりあえず後回しにしておいて、戻すことだけ考えました。

1. 上記対応をする
2. シャットダウンする(`shutdown -r now`でやった)
3. 共有フォルダの設定を無効化
4. ｷｬｱｱｱｱﾅｵｯﾀｱｱｱｱｱヽ(´ｴ`)ﾉヾ(｡>﹏<｡)ﾉﾞ✧*。

おわり。
Bigquery | 値をCAST する

- `INTEGER()`
- `STRING()`
- `BOOLEAN()`
- `TIMESTAMP()`
- `FLOAT()`

が使える様子。

# 例

![image](https://qiita-image-store.s3.amazonaws.com/0/90607/1b3e7092-3e1b-7a59-e939-3fbb441d6e30.png)


# 注意

AS をつけないと別名のカラムになってしまうので、つけよう。

```sql
STRING(id) AS id
```

# 参考

 - http://stackoverflow.com/questions/22879669/can-we-cast-the-type-in-bigquery



<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ


# メンター受付


https://menta.work/user/5694

<!-- Update From Qiita API -->
UntityでTextureの書き込みを可能にしたい

# 背景

実行時にTextureの書き込みを可能にするために、Writableに設定したいがどこで設定すればいいかわからなかったのでメモ。

# 手順

## 1. 対象の画像を選択

![select.png](https://qiita-image-store.s3.amazonaws.com/0/15000/c6215e6e-3742-35cc-2336-23ce114acc0a.png)

## 2. TextureTypeをAdvancedにする。 & Read/Write EnabledをCheckする

![texturetype.png](https://qiita-image-store.s3.amazonaws.com/0/15000/13fce8df-012b-4b84-6b29-93f41873294a.png)

これでOK
unityでfbxをアニメーションさせる

備忘録

##読み込み方・動かし方
0. アニメーションがついているfbxをAssets 以下に配置。
1. Assets内で右クリックしてAnimator Controllerを作る。Animator ControllerオブジェクトをダブルクリックするとAnimatorウィンドウ的なやつが出る
2. fbxの中に再生マークがついたオブジェクトが入っているので、それをAnimatorウィンドウにドロップする。Entryってとこからnodeがつながれる。
3. fbxをHierarchyにいれるとAnimatorコンポーネントがくっついている。それのControllerって変数に1でつくったAnimator Controllerをリンクさせる


##スクリプトでの制御
Animatorウィンドウ内に、いくつかアニメーションを入れ込むと、そのアニメを表す四角ができる。その名前を使ってスクリプトで再生ができる。特にノードをつなぐ必要はなし。

```csharp
using UnityEngine;
using System.Collections;

public class AnimCtrl : MonoBehaviour {

	Animator anim;

	void Awake () {
		anim = GetComponent<Animator> ();
	}

	void OnGUI () {
		// "run"ボタンが押されたら
		if (GUI.Button (new Rect (20, 10, 80, 20), "run")) {
			anim.CrossFade("run",0);
		}

		// "walk"ボタンが押されたら
		if (GUI.Button (new Rect (20, 30, 80, 20), "walk")) {
			anim.CrossFade("walk",0);
		}
	}


}
```

##もっとちゃんと知りたい方はこちら

http://qiita.com/yando/items/601e6fd35002e77ae9c8
AndroidでExpressoによるテストを実行する前にアプリをアンインストールする方法


AndroidStudioでのテスト(Expresso)の実行方法
テストを実行する時に普通に実行すると過去ログインの設定がそのまま残ってしまっていて、初回起動時のテストができなかったのでテストを実行する前に毎回アンインストールするという荒技をしました。もっといい方法知っている方がいたらぜひ教えてください。


- Edit Configurations
- => + ボタンでAndroidTestsを追加
- => Moduleをappに
- => TestでClassを選択
- => Classで実行したいTestを選択
- => TargetDeviceをshow choose dialogにする
- => Before lunch で + ボタンを押す
- => Gradle-awake Makeを選択
- => Taskに :app:uninstallAll と設定してOK
- => あとは設定したものを選択して実行するだけ。
FirebaseでWebサイトを無料でサクッと公開してみる

Parse終了の衝撃からはや4ヵ月。
みなさまいかがお過ごしでしょうか。

近年、mBaaSは急速に進化を続けています。
今回はGoogleのmBaaSであるFirebaseを使って、Webサイトをサクッと立ち上げてみましょう。

# Googleアカウントを準備
FirebaseはGoogleアカウントがあれば無料で使えます。
事前にアカウントを取得し、ログインしておきましょう。

# FirebaseでWebサイト用のプロジェクトを作っておく
https://console.firebase.google.com/
にアクセスし、新規プロジェクトを作成しましょう。
プロジェクト名と国を選択するだけでOKです。

# Node.jsとnpmをインストールする
FirebaseでWebサイトをホスティングするためのツールは、npmでインストール可能です。
ってことで、先にNode.jsとnpmをインストールしましょう。

インストール手順はGoogle先生に聞けば沢山出てきます。
https://www.google.co.jp/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=node.js%20npm%20%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB


# firebase-toolsのセットアップ
```
$ npm install -g firebase-tools
```
でインストールします。

インストールが終わったら、

```
$ firebase login
```

をするとブラウザで認証フォームが開きますので、ボタンを押せばログイン完了です。
流石Google、超カンタン。


# プロジェクトの初期化とデプロイ
好きなディレクトリに入って、

```
$ firebase init
```

します。

DatabaseかHostingか聞かれるので、Hostingを選択。

```
? What Firebase CLI features do you want to setup for this folder? 
 ◉ Database: Deploy Firebase Realtime Database Rules
❯◉ Hosting: Configure and deploy Firebase Hosting sites
```

設定jsonとかpublicディレクトリとかはそのままでOKなので、Enter押下。
すべてのリクエストをindex.html経由にする設定にするかどうか聞かれるので、これもEnter押下。（デフォルトはNo）

どのプロジェクトを使うか聞かれるので、さっき作ったプロジェクトを選択

```
? What Firebase project do you want to associate as default? (Use arrow keys)
  [don't setup a default project] 
❯ test-project (project-000000000000000) 
  [create a new project] 
```


これでディレクトリ直下に設定jsonとpublicディレクトリが生成されるので、あとはpublic/index.htmlをいじってデプロイします。

```
$ firebase deploy
```


ほい、これでもうサイトが公開されましたよ。

# サイトを見てみる
Firebaseの管理画面からプロジェクトを選択後、左メニューからHostingを選択します。
URLが勝手に割り振られてるので、アクセスしてみましょう！
![firebase_ss.png](https://qiita-image-store.s3.amazonaws.com/0/74903/99af301b-d82e-1cbb-48f7-4b581a23f101.png)


# 料金について
2016年5月時点では、ファイルサイズ1GB、ファイル転送10GBまで無料です。
小規模なサイトならぜーんぜん問題なく使えちゃいますね。
https://firebase.google.com/pricing/
RaspberryPi3でKTV-FSUSB2/V3（K1508）を使った録画方法その2（recfsusb2i、cron）

#序
[RaspberryPi3でKTV-FSUSB2/V3（K1508）を使った録画方法その1](http://qiita.com/JHiyama/items/c5cdaeef9a054c24e164)ではSofcasとlibarib25のInstallを解説した。
今回は、recfsusb2iのInstallと録画設定、cronの設定を解説したい。
ただ、地デジ録画の設定のキモは前回紹介したSofcasとlibarib25だと思われる。

#recfsusb2iのInstall
Installの詳しい内容は、[なかゆきの気まぐれ日記](http://blog.nakayuki.net/linux/linux-recfsusb2i/)が詳しい。
ここでは、繰り返しになるが、解説していきたい。
まずは、ソースファイルを展開するフォルダーをカレントディレクトリに作成する。

```
$ cd ~/
$ mkdir recfsusb2i
```

recfsusb2iの入手に関しては、[BonDriver_FSUSB2i - KTV-FSUSB2/FSPCIEの改造まとめWiki](http://ktvwiki.22web.org/?BonDriver_FSUSB2i)のあるので、そちらから入手する。
ちなみに圧縮方法が7z式なので、一旦WindowsかMacで展開してから再度zip等で圧縮し、scp等でRaspberryPiに持っていく必要がある。

recfsusb2iの中に展開したら、srcフォルダーに移動する。

```
$ cd recfsusb2i/src
```

次にmakeして出来た成果物を/usr/local/bin/に移動する。
makeの際に`B25＝1`と明記する事を忘れないように。このoptionを入れることにより、recfsusb2iが前回入れたlibarib25を認識するようになる。

```
$ make B25=1
$ cp recfsusb2i /usr/local/bin/
```

これでInstall自体は終了だ。

#recfsusb2iでの録画方法
まずはrecfsusb2iの基本的な録画コマンドとoptionを紹介する。
まずは基本的なコマンドは以下の通りだ。

```
$ recfsusb2i 27 10 test.ts
```

上記のコマンドの解説だが、recfsusb2iはいいとして、次の27はリモコンに記載されている数字ではなく、地デジの伝送Chというユニークな数字を記載している。
伝送Chは各エリアで番組を割り当てている数字で、基本的に自分の地域にあった数字を選択しないと正しく録画出来ない。
詳細に関しては、Wikipediaのページにある[テレビ周波数チャンネル](https://ja.wikipedia.org/wiki/テレビ周波数チャンネル)を見てほしい。
次の10は録画時間であり、秒単位指定となっており、10と書かれた場合は10秒間という意味である（1時間録画したい場合は、60x60で3600となる）。
`test.ts`は出力ファイルである。
これで基本的な録画方法は解説したが、出力ファイルに関しては、NASかHDDをマウントし、そちらに保存する様にした方がいいだろう。SDカードは最近になって耐久度も上がってきたが、やはり壊れやすく、大容量なファイルを保存するには不向きであるからだ。
HDDのマウント、NASの設定はその3で解説する予定だ。

#cronでの録画方法
recfsusb2iの録画時間の設定だが、私の場合はコマンド関連をシェルスクリプトで書き、それをcronに登録する方法を取っている。

##シェルスクリプトの記載
まずはシュルスクリプトであるが、基本は以下のように記載してる。

```
#!/bin/sh
/usr/local/bin/recfsusb2i 16 1800 `date "+%Y%m%d_%H%M%S"`.ts
```

recfsusb2iの指定は、単に`recfsusb2i `でも構わないと思うが、一応安全をとって絶対パス指定で記載している。
また、出力ファイルは、``date "+%Y%m%d_%H%M%S"`.ts`として録画時間、そして録画日時を記載している。
この設定にしている理由は繰り返し設定の場合、ファイル名が被らないので、何かと便利である。
書き終わったら、[File name].shとして保存し、chmodで権限を与えておくことを忘れずにしておく。
キチンと動くかどうかシェルスクリプトを起動し、確認しておくことも忘れてはならない。

##cronの設定
cronの書き方は今更かと思うが、一応解説しておく。
参考にするのは、[server-memo.net](http://www.server-memo.net/tips/crontab.html)当たりがいいだろう。
取りあえず、まずはcronを起動する。

```
$ crontab -e
```

起動したら、以下のようにcronを書けば問題ない。

```
29 23 * * 4 /home/pi/script.sh
```

cronの書きかたは今更だろ思うので、ポイントだけ解説するが、基本は該当のシェルスクリプトまでは必ず絶対パスで記載する。
よく`~/script.sh`や`home/pi/script.sh`と解説しているところがあるが、RaspberryPiでは、この記載方法ではスクリプトファイルを見つけることが出来ない。
また、録画時間はぴったりの時間では必ず最初の1秒程度録画されない場合もあるので、1分前ぐらいから録画することをお奨めする。

#終（または結）
その2ではrecfsusb2iのInstallと録画設定、cronの設定を解説した。
基本的にはLinux経験者であれば、それほど難しい解説ではないはずだ。
window.openerで親画面が存在するか否かの分岐

恒例のIEで思うように動かなかったのでメモします。

**チェックしたブラウザ**
- IE11
- firefox
- chrome

# window.openerの値

## 親画面が存在する場合
全てのブラウザでオブジェクトが入る

## 親画面が存在しない場合
### firefox、chrome
null
### IE
undefined　もしくは　空オブジェクト

# IEでwindow.openerの値が空オブジェクトになる場面
子画面を出した後、親画面を閉じると、子画面においてwindow.openerの値が空オブジェクトになる

# IEにも対応した、window.openerで親画面が存在するか否かの分岐方法
```js
if ( !window.opener || !Object.keys(window.opener).length ) {
  // 親画面が存在しない
} else {
  // 親画面が存在する
}
```

if ( window.opener || Object.keys(window.opener).length ) {} とすると
Object.keys()にオブジェクト以外を渡してエラーになるので注意です。

# 一言
相変わらずですねIEさん・・・
Windows の Node.js 開発環境構築 最小手順

Node.js をの環境構築は Mac 環境だと割りとすんなり行くのですが、Windows 環境では `npm install` を行うとパッケージよってはビルドエラーが出まくって心がヘシ折れそうになります。

エラーが出ないようにするには事前の関連アプリケーションのインストールや環境設定が必要がありますが、ググってみると Visual Studio 2013 Express を入れろとか、いや、Visual Studio 2015 Community じゃないとダメだとか、64bit OS は Windows SDK いれろとか、npm のバージョンを上げろとか、いろんな方法が点在していて、必要最低限の設定がよく分からない状態でした。

そんな放浪の旅を続けていたら、いつの間にか Microsoft の公式ドキュメントができてました。
[Microsoft + Node.js Guidelines - Configuring your Windows development environment
](
https://github.com/Microsoft/nodejs-guidelines/blob/master/windows-environment.md#compiling-native-addon-modules)

ちょうど社内向けに gulp.js を利用した開発環境の構築手順をマニュアル化する必要があったのでここにも記録残していきます。（ほとんど公式ドキュメントの写しですが…）
Windows7 と Windows10 の仮想環境上で動作確認済みです。



# 1. Git のインストール
[公式サイト](https://git-scm.com/download/win) より最新版をダウンロード、インストールします。

- インストール前にコマンドプロンプトで `git --version` と入力してバージョンが返ってきたらその環境にはインストール済みです。インストール済みの環境ではこの項目はスキップしてください。
- インストール時にはデフォルト設定で良いです。"Use Git from the Windows Command Prompt" は必ず有効にしましょう。

# 2. Node.js のインストール
[公式サイト](https://nodejs.org/en/) よりLTS版（Ver.4.4.4 2016年5月19日現在）をダウンロード、インストールします。

- インストール前にコマンドプロンプトで `node -v` や `npm -v` と入力してバージョンが返ってきたらその環境にはインストール済みです。インストール済みの環境ではこの項目はスキップしてください。
- インストールはデフォルト設定でOKです。

# 3. .NET Framework 4.5.1 のインストール（Windows7 のみ）
 [公式サイト](http://www.microsoft.com/en-us/download/details.aspx?id=40773) よりダウンロード、インストールします。

- Windows7 以外の環境はこの項目はスキップしてください。

# 4. Visual C++ Build Tools のインストール
 [公式サイト](http://go.microsoft.com/fwlink/?LinkId=691126) よりダウンロード、インストールします。

- インストールはデフォルト設定でOKです。

# 5. Python のインストール
[公式サイト](https://www.python.org/downloads/) より 2.7 の最新版をダウンロード、インストールします。

- インストール前にコマンドプロンプトで `python --version` と入力して 2.7.x のバージョンが返ってきたらその環境にはインストール済みです。インストール済みの環境ではこの項目はスキップしてください。
- 3.x の最新版ではなく、2.7.x をインストールします。Node.js が参照するライブラリが 2.7 を前提としているためです。
- インストール時に "Add python.exe to Path" を有効にしてパスを通しておきましょう。

# 6. npm 標準オプションの変更
以下内容をコマンドプロンプトで入力します。

```sh
npm config set python python2.7
npm config set msvs_version 2015
```

以上で開発環境の事前準備は完了です。
エラーの出ない`npm install` をお楽しみください！
Application Loaderユーザー(特にXcode6ユーザー)必見！iTunes Connecetへバイナリをアップロード出来ない時の対応



## 事象
以下のエラーメッセージが表示され、iTunes Connecetへバイナリをアップロード出来ない

```
Cannot proceed with delivery:an existing transporter instance is currently uploading this package
```

## 原因
UploadTokens の中にアップロード情報およびバイナリファイルが残っていたため。
(以前、アップロードに時間が掛かり過ぎたため、途中で中断したことでアップロード情報が残ってしまっていた)

## 対策
UploadTokens の中のアップロード情報およびバイナリファイルを削除する

## 削除手順
**ターミナル移動が前提です。**

### 手順1.user配下の「.itmstransporter/UploadTokens」フォルダへ移動する

```
cd /Users/{userまたはユーザー名}/.itmstransporter/UploadTokens
```

### 手順2.lsコマンドでバイナリファイルがあるか確認する

```
ls -lta
```

上記コマンドを実行すると以下のようなファイルがあることが確認できます。

```
g08m11.local_SACYUXXXXX_924819999.itmsp.token
```

### 手順3.rmコマンドでバイナリファイルを削除する

バイナリファイル名(僕の場合なら「g08m11.local_SACYUXXXXX_924819999.itmsp.token」)
を指定して削除する

```
rm {バイナリファイル名}
```

### 手順4.Application Loaderでバイナリファイルファイルがアプロード出来るか確認する

手順1〜3を問題なく行えていればApplication Loaderでバイナリファイルファイルがアプロード出来るはず。
DigiCertでEV SSL証明書を取得するまでのステップ

# まえがき

日本ではあまり知られていないのですが、[DigiCert](https://www.digicert.com/) というSSL証明書の事業者があります。
[2016年4月度のCertificate Authority Market Share Report](http://www.securityspace.com/s_survey/data/man.201604/casurvey.html)によれば、DigiCertはGlobalSignやSymantec（旧Verisign）も大きい11％強のマーケットシェアを持っていて、GitHub, Facebook, Twitter, LinkedInなどが同社のSSL証明書を利用しています。

ものは試しと言うことで、関わっているサービスのEV SSL証明書をDigiCertで取得してみたときの記録です。
EV SSLなので発行までに2週間ぐらいかかるかなぁと覚悟していたのですが、3日で取得できました。早い！


# EV SSL証明書を発行してもらうためのステップ

EV SSL証明書の発行に当たっては、次の4つのステップがありました。

1. CSRの作成とアップロード
2. [D-U-N-S番号](https://duns-number-jp.dnb.com/)か[Google My Business](https://www.google.com/intl/ja_JP/business/)の情報を教える
3. DigiCertのサポートから電話がかかってきて、連絡先情報や企業の情報の確認をされる。
4. 証明書が発行されるので、ダウンロードしてサーバーに設定

## 1.CSRの作成とアップロード

これは、どの証明書事業者を使う際でも行う作業なので省略。

## 2.D-U-N-S番号かGoogle My Businessの情報を教える

EV SSLの取得に当たっては、発行対象の企業が実在していることを証明書事業者が確認する必要があります。そのために利用するのがこれらの情報。どちらを使ってもよいです。

D-U-N-S番号は、ダンアンドブラッドストリート社が企業一つ一つに対して一意に割り当てている番号で、[D-U-N-S番号検索](https://duns-number-jp.dnb.com/)で検索することができます（割り当てられていなければ申請して割り当ててもらえます）。

Google My Businessは、Google上に企業情報を掲載する際に使うツールで、掲載するに当たっては実在確認が行われます（Googleから認証コードが書かれている葉書が自社の住所宛に送られる or 自動音声電話による認証が行われる）。

## 3.DigiCertのサポートから電話がかかってきて、連絡先情報や企業の情報の確認をされる。

D-U-N-S番号かGoogle My Business情報をDigiCertに教えた後で、DigiCertの担当者から、申請時に記載した自社番号宛に電話がかかってきます。
ここでは、自分の名前や肩書きなど聞かれるので、適宜答えます。また、本人確認のため、上司に電話代わってと言われることもあります。

英語でのやりとりになりますが、そんなに難しい英語ではないのでがんばりましょう！
ちなみに、米国時間にやりとりすることになるかと思いきや、全世界にDigiCertの担当者が居るらしく、日本のビジネスアワーに電話してきてくれました。

## 4.証明書が発行される

電話確認が終わった後で1時間もすると、EV SSL証明書の発行が発行されます。

# DigiCertが良かった点
## とにかくサポートのレスが早い
24/365のサポート体制があるらしく、いつメール連絡しても30分以内ぐらいにレスが返ってきました。
日本のSSL事業者だと平気で半日とか数日待たされることもあるので、すごく早く感じました。

## 安い

EV SSLでは一番安い気がします。
1ドメインだけのEV SSL（[Extended Validation SSL Plus](https://www.digicert.com/ev-ssl-certification.htm)）だと1年間$295（約3.3万円）。
3ドメインまでの[EV Multi-Domain SSL](https://www.digicert.com/ev-multi-domain-ssl.htm)だと1年間$489（約5.4万円）。


# まとめ

海外のサービスにもかかわらず問い合わせメールも即レス対応で、なおかつお買い得な価格設定のため、大変満足しました。
SSL証明書というある意味コモディティー化した商品を、他社を圧倒する顧客サービスを武器に売っていて、商売の仕方としても参考になりました。
python sql文にパラメータを入れる方法

`k="%パン%"`

```
connector = MySQLdb.connect(host="＊", port=＊, db="＊", user="＊", passwd="＊", charset="utf8")
cursor = connector.cursor()
sql1="SELECT * from * where word like %s"
cursor.execute(sql1, (k,))
cursor.close()
connector.close()
```
ELBのAttributes(Cross-Zone Load BalancingとかConnectionDrainingとかをMarkdownで表示する)


```rb
#!/usr/bin/env ruby

require 'json'

elbs = `aws elb describe-load-balancers | jq '.LoadBalancerDescriptions[].LoadBalancerName'`

puts "| ELB Name | ConnectionDraining | ConnectionDraining Timeout | CrossZoneLoadBalancing | ConnectionSettingsTimeout | AccessLog |"
puts "| --- | --- | --- | --- | --- | --- |"
elbs.each_line do |elb|
  elb = elb.chomp
  attributes                = JSON.load(`aws elb describe-load-balancer-attributes --load-balancer-name #{elb}`)
  connection_during         = attributes['LoadBalancerAttributes']['ConnectionDraining']['Enabled']
  connection_during_timeout = attributes['LoadBalancerAttributes']['ConnectionDraining']['Timeout'] || '-'
  cross_zone                = attributes['LoadBalancerAttributes']['CrossZoneLoadBalancing']['Enabled']
  connection_setting_idle   = attributes['LoadBalancerAttributes']['ConnectionSettings']['IdleTimeout']
  access_log                = attributes['LoadBalancerAttributes']['AccessLog']['Enabled']
  puts "| #{elb.chomp} | #{connection_during} | #{connection_during_timeout} | #{cross_zone} | #{connection_setting_idle} | #{access_log} |"
end '.LoadBalancerDescriptions[].LoadBalancerName'
```

```
| ELB Name | ConnectionDraining | ConnectionDraining Timeout | CrossZoneLoadBalancing | ConnectionSettingsTimeout | AccessLog |
| --- | --- | --- | --- | --- | --- |
| "foo-elb" | true | 300 | true | 60 | false |
```

とかで出る
UNIXのリダイレクトについてのまとめ

#リダイレクトについてのまとめ
コマンドの実行結果をファイルなどに残す場合にリダイレクト（>）をよく使うと思うが、
使用方法について色々あり、毎回ググってる気がするのでまとめてみた。

##標準エラーと標準出力について
今更だがUNIXでは標準エラー出力と標準出力が存在する。
一般的に各コマンドのエラーなどは標準エラーに吐かれる。

##リダイレクトについて
``` lang:下記は既にファイルが存在する場合、上書きする。
>
```

```lang:下記は既にファイルが存在する場合、追記する。
>>
```

###標準出力を記録する
```lang:csh,tcshなど
test.sh > file.log
```

```lang:sh,bashなど
test.sh > file.log
```

###標準エラー出力も記録する
```lang:csh,tcshなど
test.sh >& file.log
```

```lang:sh,bashなど
test.sh > file.log 2>&1
```

###画面でもみて、標準エラー出力を含めてログにもはきたい
teeを使えば実現できる

```lang:csh,tcshなど
test.sh  |& tee file.log
```

```lang:sh,bashなど
test.sh 2>&1 | tee file.log
```

###パイプで標準エラー出力も渡したい
moreは例

```lang:csh,tcshなど
test.sh |& more
```

```lang:sh,bashなど
test.sh 2>&1 | more
```
Windowsでファイルから文字列検索するコマンド、findstr


# 常用

`findstr /s "検索文字列" ./*  | more`

現在のディレクトリ以下のすべてのファイルから、 `検索文字列` を検索する。
たくさんある場合、ページングする。（ `more` コマンド)


# フォーマットとオプション

`findstr  [オプション]  検索する文字列  ファイル名`

### 注意点

> 複数の文字列を検索する場合には、引数 /C を使わず、各文字列をスペースで区切ります。
> たとえば、FINDSTR "hello there" x.y と指定した場合は、ファイル x.y で "hello" または "there" が検索されます。
> これに対して、FINDSTR /C:"hello there" x.y と指定した場合はファイル x.y で "hello there" が検索されます。

らしいです。

## よく使うやつ

* `/S`: サブディレクトリを全部、再帰する。（シンボリックリンクも辿るかは未検証）
* `/I`: アルファベットの大小文字を区別しない。（デフォだと区別する）
* `/X`: 完全一致する行だけ。
* `/N`: 行番号も表示する。（デフォだとファイル名だけ）



##  完全版（`findstr /?` のコピペ）

> ファイルから文字列を検索します。
> 
> FINDSTR [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/P]
>         [/F:ファイル] [/C:文字列] [/G:ファイル] [/D:ディレクトリ一覧]
>         [/A:色属性] [/OFF[LINE]] 文字列 [[ドライブ:][パス]ファイル名[ ...]]
>   
>   /B           行の先頭にあるパターンを検索します。
>   /E           行の末尾にあるパターンを検索します。
>   /L           検索文字列をリテラルとして使用します。
>   /R           検索文字列を正規表現として使用します。
>   /S           現在のディレクトリとすべてのサブディレクトリから一致するファイルを検索します。
>   /I           検索するときに大文字と小文字を区別しません。
>   /X           完全に一致する行を出力します。
>   /V           一致しない行のみを出力します。
>   /N           一致する各行の前に行番号を出力します。
>   /M           ファイルに一致する行があるときに、ファイル名のみを出力します。
>   /O           一致する各行の前に文字オフセットを出力します。
>   /P           印刷不可能な文字を含むファイルをスキップします。
>   /OFF[LINE]   オフライン属性が設定されたファイルをスキップしません。
>   /A:属性      2 桁の 16 進数で色属性を指定します。"color /?" を参照してください。
>   /F:ファイル  指定したファイルからファイル一覧を読み取ります (/ を指定するとコンソール)。
>   /C:文字列    指定された文字列をリテラル検索文字列として使用します。
>   /G:ファイル  指定されたファイルから検索文字列を取得します (/ を指定するとコンソール)。
>   /D:ディレクトリ   セミコロンで区切られた検索されるディレクトリ文字列テキストの一覧を検索します。
>   [ドライブ:][パス]ファイル名    検索するファイルを指定します。
> 
> 複数の文字列を検索する場合には、引数 /C を使わず、各文字列をスペースで区切ります。
> たとえば、FINDSTR "hello there" x.y と指定した場合は、ファイル x.y で "hello" または "there" が検索されます。
> これに対して、FINDSTR /C:"hello there" x.y と指定した場合はファイル x.y で "hello there" が検索されます。
> 
> 正規表現クイック リファレンス:
>   .            ワイルドカード: 任意の文字
>   \*            繰り返し: ゼロ個以上の直前の文字またはクラス
>   ^            行位置: 行頭
>   $            行位置: 行末
>   [class]      文字クラス: セットの任意の 1 文字
>   [^class]     逆クラス: セット以外の任意の 1 文字
>   [x-y]        範囲: 指定した範囲の任意の文字
>   \x           エスケープ: メタ文字 x のリテラル使用
>   \<xyz        単語位置: 単語の先頭
>   xyz\>        単語位置: 単語の終わり
S先輩にきいてみたっ！ - Amazon Web Serviceの原価計算 - 第３話 お金

[第１話](http://qiita.com/ukiuni@github/items/c82cf2b0b3d16ab7c2a0)、[第２話](http://qiita.com/kazuqqfp/items/1e326e1452468c33800b)はご覧になっていただけましたか？
第３話のテーマは「原価計算」です。
なお、ストーリーはフィクションであり、実在の人物・団体とは一切関係ありません。

# ３話 お金

『つぎは、、、、』
[2. 原価計算]とある。
『原価計算、、、、、お金？』
『この前S先輩からも「コスト面も大事よ」と教わったばかりだし。』

『AWSの課金に関するページはっと、、、あった』
https://aws.amazon.com/jp/how-to-understand-pricing/
『課金体系の資料があるぞ、見てみよう。』ぽち
http://media.amazonwebservices.com/jp/cost/AWS-RatesSystem-JP_201310.pdf
サーバ１時間２円から！ストレージ１GB10円！
や、安い。『これじゃあ、勝負にならないわけだ。』
ECサイトの提案をした資料を思い出して口に出してしまった。頭を振り、一旦忘れることにした。
利用料の大部分(約80%)はサーバ利用料なんだ、ほー、大量のトラフィックが発生する場合はデータ転送量が増えるんだ。なるほど。
１時間単位で課金されるんだ。これは聞いたことがあったな。月次バッチとかいいよね。数時間分のコストだけですむわけだ。
おー、リザーブドインスタンス。予約金の支払いで大幅に安くできるんだ。最大70%引き！スゴイ！
見積もりのポイント。今必要な分だけど見積もればいいのか。これぞクラウドって感じ。オンプレミスの時のように将来を予測しなくていいんだね。うん、うん。
おっ、[リザーブドインスタンスの資料](http://www.slideshare.net/AmazonWebServicesJapan/aws-16524731)があるな。こっちも見てみよう。
スポットインスタンスってのもあるのか。入札？どういうことだ？
へー、空いているインスタンスを入札で使えるのか。げげっ、高い入札が入ると使ってるインスタンスがTerminateされちゃうんだ。使い方を注意しなきゃだな。月次バッチ中にTerminateされたら、しゃれにならん。

ふと時計を見ると『また３時だ。』
今日も頑張りすぎた。
『明日こそS先輩にほめられるぞ！』

***

「60点」
「えっ」
「60点ね」
「うっ、そうですか。。」
またダメだった。
「クラウドの利点って例えばどんなことがある？」
「っそうですね。えっと、、、いつでも好きなだけ使える、、とか。」
「ほかには？」
「。。簡単にはじめられて、簡単にやめられるとか。。。。」
「そうね、じゃあ、リザーブドインスタンスを使った場合、簡単にやめられる？」
「予約金があるのでやめるには勇気がいりそうですね。」
「せっかくクラウド使ってるのに、残念ね。」
「はい、もったいないです。」
「どうしたらいいと思う？」
「そ、それはリザーブドインスタンスのリスクなんじゃ。。」
「確かにそうだけど、リスクを減らす方法があってもいいんじゃない？」
「！！！」
「変化があった時に対応できないと怖くてなかなか使えないわ。」
その通りだった。
S先輩は対応方法として３つの方法を教えてくれた。

１つ目は、一括請求によるリザーブドインスタンスの共有だ。
AWSには複数のアカウントの利用料金をまとめて請求する機能がある。
１つの会社で複数のサービスを提供しているような場合、アカウントを分けて運用していることもあるし、１つのサービスであっても本番環境と開発環境でアカウントを分けることもある。
AWSには、それらをまとめて請求する機能がある。
一括請求のメリットは決済をまとめるだけではない。リザーブドインスタンスの権利を共有することができる。
例えば、あるアカウントでリザーブドインスタンスを購入したが、残念ながらサービスを終了してしまったとしよう。その場合、残ってしまったリザーブドインスタンスの権利を別のアカウントで適用することができるのだ。
さらに、一括請求にすると、ボリュームディスカウントも全てのアカウントを合算して適用されるので、１つ１つのアカウントではボリュームディスカウントにならない場合でも合算によって、ボリュームディスカウントが適用され、さらなるコストダウンが可能になる。

２つ目は、インスタンスタイプの変更だ。
最初は小さいインスタンスタイプでよかったので、小さいインスタンスタイプでリザーブドインスタンスを購入していたが、サービスが始まり状況を見ると大きなインスタンスタイプで稼働させたいような場合がある。
全てではないが、リザーブドインスタンスのインスタンスタイプを変更することができるのだ。
変換レートは[ここ](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ri-modification-instancemove.html)にある。

３つ目は、リザーブドインスタンスの売却だ。
上の２つの方法も取れない場合、そのリザーブドインスタンスの権利を使う機会がなくなってしまう。
最終手段として、リザーブドインスタンスの権利を売却できる。
条件がいろいろあるのだが、marketplaceに売り出すことができる。
そうすれば、全額の回収はできないが、一部を回収することは可能だ。

「単なる割引だけじゃなく、きちんと利用するためにはいろいろなことを知っている必要があるんですね！ありがとうございます！勉強になりました！」
「A君が勉強した資料にも少し書いてあったと思うよー。」
「ぐっっ」

『つ、次こそはS先輩にほめられるぞー！』

次回、A君は「3.デプロイメントマネジメント」を勉強します。
来週の公開を予定しています。
コントロールパネル項目をコマンドラインから開く

https://msdn.microsoft.com/ja-jp/library/windows/desktop/cc144191(v=vs.85).aspx

| Task | Command |
|:-:|:-:|
|プログラムと機能|control.exe /name Microsoft.ProgramsAndFeatures|
|モビリティセンター|mblctr.exe /open|
|電源オプション|control.exe /name Microsoft.PowerOptions /page pagePlanSettings|
|イベントビューア|eventvwr.exe|
|システム|control sysdm.cpl|
|デバイスマネージャ|devmgmt|
|(デバイスとプリンタ)|control.exe printers|
|ネットワーク接続|control.exe NETCONNECTIONS|
|ディスクの管理|diskmgmt.msc|
|コンピュータの管理|compmgmt.msc|
|コマンドプロンプト|cmd.exe|
|コマンドプロンプト（管理者）|http://qiita.com/jTakasuRyuji/items/12a0582e085ed91698ab|
|タスクマネージャ|taskmgr.exe|
|コントロールパネル|control.exe|
|(Windows Update)|control.exe /name Microsoft.WindowsUpdate|
|エクスプローラ|explorer.exe|
|検索| ? |
|ファイル名を指定して実行|(keyboardshortcut:<kbd>Win</kbd>+<kbd>R</kbd>)|
|デスクトップ|(keyboardshortcut:<kbd>Win</kbd>+<kbd>D</kbd>)|


yatta-yatta-