OmniAICreator/Qiita-1.07M huggingface dataset:
【連載01】101.Vagrant-Ansible-Serverspecによるサーバ構築とサーバテスティング

<b><font color="#ff6633">当記事はケーススタディの連載となっています。目次は[【こちら】](http://qiita.com/CsFactoryitter/items/6b8308b96afafd61ce5f
)です。</font></b>
<b><font color="#ff6633">最新のソースコードは[【GitHub】](https://github.com/csfactorygihubblog001/blogvagrant)で公開中です。</font></b>

#開発環境全体構成
![image](https://qiita-image-store.s3.amazonaws.com/0/98085/ea1d6292-9c30-db91-9412-590743318543.png)

#OSバージョン情報
- Windows 8
- CentOS 7
- VirtualBox 5.0.8

#今回の主目的
自分のローカル環境に開発用サーバを構成し、<font color="tomato"><b>自由にサーバの設定変更/破棄できる</b></font>環境を構築することです。
構築にはサーバを直接操作するのではなく開発用サーバを準備し**Ansible**にて再現可能なインフラ設定コーディングを行います。
その上で、作成したAnsible実装コードを本番サーバに対して実行する事により開発サーバにて担保のとれた設定を本番にも適用します。これで開発サーバでは設定したが本番サーバでは設定していなかった等のよくあるミスをなくす事が可能になります。
また折角サーバ設定をプログラミングで行ったのでテストに関しても、ドキュメントによるサーバ設定の確認テストではなく、テスティングフレームワークを利用してデグレード(設定変更によるレベルダウン)の確認を行いたいと思います。

#使用するミドルウェア
主目的を達成する上で今回は「VirtualBox」、「Vagrant」、「Ansible」、「Serverspec」を使用します。

<dl>
<dt><font color="dodgerblue">仮想環境ミドルウェア</font></dt>
<dd>開発環境構築時は簡単にサーバの初期構築/破棄/コピーを行う為、今回は仮想サーバ基盤としてVirtualBoxを使用します。
Vagrantのデフォルト仮想サーバ基盤であるからでもあります。</dd>
<br>
<dt><font color="dodgerblue">プロビジョニングツール（サーバ設定実装ソフトウェア）</font></dt>
<dd>
Ansibleを使用します。<br>
Ansibleはサーバの設定をPythonとYUMLを使用して実装します。<br>
実サーバ(今回の場合adminserv、apserv01、dbserv01)にエージェントをインストールする必要がない為、不要なミドルウェアを入れサーバを汚す心配がありません。(chefは場合によりエージェント(Ruby含)を導入する必要があります。）<br>
これは厳密に管理された大規模開発では重要な要素になります。(不要/不明なミドルウェア/ソフトウェア/DIR/Fileはあってはならない）
</dd>
<br>
<dt><font color="dodgerblue">仮想環境構築ツール</font></dt>
<dd>
Vagrantを使用します。<br>
サーバ実装コーディングはプログラミングと違い、実行してしまうとサーバ自体に設定を加える為、サーバに設定した事をもどすことが容易ではありません。もし戻そうとするには戻すための実装コーディングが必要になります。<br>
これはサーバ設定はプログラミングと違い、設定のコミット/ロールバックという機能がない為です。一部はAnsibleの機能を使いますが、それだけでは十分でありません。<br>
そこでVagrant/VirtualBoxを使用し、サーバ自体のロールバック/コミットを実現します。実際はVirtualBoxのスナップショット機能を使用し、スナップショット前の状態に戻すという操作ですが、都度VirtaulBoxでスナップショットをとるのは手間なのでVagrantにて行います。また必要なサーバが増えた/不要になった場合はVagrantにて行います。
</dd>
<br>
<dt><font color="dodgerblue">サーバ設定テスティングフレームワーク</font></dt>
<dd>
RubyのServerspecを使用します。<br>
開発環境/本番環境は通常以下の点が異なります。<br>
- 通常環境依存情報（例えばホスト名やIP）<br>
- 同種(WEBサーバ/DBサーバ等の役割の違い）の役割をこなす台数<br>
通常のプログラミングでも開発環境と本番環境では、仕組み(プログラム)は同一で環境依存と台数の違いは設定ファイルの変更を差し替える事に
より対応する為、サーバ設定のテスティングも同様に「テストソースは一つ環境依存する設定は環境別に用意する。」で対応します。
</dd>
</dl>

次回は「[Windows上のVirtualBoxにVagrantのベースとなる最小構成CentOS7を作成](http://qiita.com/CsFactoryitter/items/282086f3c3fe4f34b003)」について。

<b><font color="#ff6633">連載の目次は[【こちら】](http://qiita.com/CsFactoryitter/items/6b8308b96afafd61ce5f
)です。</font></b>
CSSハックを!importantすると圧縮時にプロパティが消える

# 消えるpadding
さて、このような記述をしているSCSSがあったとします。

```test.scss
#test1 {
  padding: 5px;
  padding-right: 2em;
  padding: 5px\9 !important;
}
```

そもそも、なんでpaddingをいくつも指定してるんだよ…というツッコミは置いておいて、、、

このSCSSファイルをgulpでコンパイル・圧縮するとどのようなCSSが生成されるでしょうか。実行環境はこちらです。

Sass 3.4.13 (Selective Steve)
gulp CLI version 3.9.0
gulp-cssmin 0.1.7

わたしの予想では、

```test.css
#test1 {
  padding: 5px 2em 5px 5px;
  padding: 5px\9 !important;
}
```

となるのではないかと思ったのですが、実際に生成されたCSSは以下のような記述になっていました。

```test.css
#test1 {
   padding-right: 2em;
   padding: 5px\9!important
}
```

あれ？？```padding:5px;```が消えてる…？
でもデザインはSCSSファイルに記述されている通り``` padding:5px; ```がないと崩れてしまいます…。これは困った。。。

# CSSハック
さて、#test1のスタイルには、見慣れない設定があります。

```
padding: 5px\9
```

そもそもこれは何をしたいんじゃ…と思った方は、以下のリンク先を読んでみてください。

[Web制作者のためのSassの教科書](http://book.scss.jp/code/c5/02.html)
[コーダー必見、SCSS・Compassで開発効率アップ|SCSS対応IE向けCSSハック編](http://dev.classmethod.jp/ria/html5/scss-compass-fast-development-scss-css-hack/)

つまりは、IE9以下のみ適用されるCSSハックなんです。実はSCSSでも使うことができる。

```#test1``` に適用させたいスタイルを解釈すると

* 9以下のIE以外には ```padding: 5px 2em 5px 5px;```
* IE9以下には```padding:5px;```

ということになります。

SassのプリプロセッサはこのCSSハックを解釈できるようで、Sassでコンパイルしただけのgulpタスクを通すと、予想と同じCSSが生成されました。それがこちら。

```test.css
#test1 {
  padding: 5px;
  padding-right: 2em;
  padding: 5px\9 !important;
}
```

お！ ```padding: 5px;```がいるじゃありませんか！


# !importantとcssmin

Sassコンパイル時には問題ない…ということで、paddingが消えてしまう原因は圧縮時にありました。
CSS圧縮プラグインのgulp-cssminがCSSハックを解釈できないのか、!importantの解釈にクセがあるのかはわかりませんが、CSSハックの```!important```を外すことで、予想通りのCSSが生成されました。

```test.scss
#test1 {
  padding: 5px;
  padding-right: 2em;
  padding: 5px\9;
}
```

```test.css
#test1{
  padding:5px 2em 5px 5px;
  padding:5px\9;
}
```

ということで、CSSハックに!importantを使うときは要注意。そもそも、なるべく!importantやCSSハックをしない方向でスタイルを決めていきたいところです。
neologd install 止まる

```
[install-mecab-ipadic-neologd] : Do you want to install mecab-ipadic-neologd? Type yes or no.
yes
[install-mecab-ipadic-neologd] : OK. Let's install mecab-ipadic-neologd.
[install-mecab-ipadic-neologd] : Start..
[install-mecab-ipadic-neologd] : Sudo make install to /home/user/root/lib/mecab/dic/mecab-ipadic-neologd
[sudo] password for user:
user は sudoers ファイル内にありません。この事象は記録・報告されます。
[install-mecab-ipadic-neologd] : /home/user/root/lib/mecab/dic/mecab-ipadic-neologd can't be found. Install Failed.
```

というもの。sudoしなくていい場所にインストールしようとしているのに。
ひとまずの解決策としてはbuild/mecab...../に移動して、make installとする。
Dart SDK Roadmapの進捗状況を確認する


@laco0416です。久々にDartに触れます。

## Dart SDK Roadmap
![Kobito.pMvRyd.png](https://qiita-image-store.s3.amazonaws.com/0/20253/b6d7eca2-e8d6-7ada-595f-c1f84e83dfcf.png "Kobito.pMvRyd.png")

今年4月に開催されたDart Developer Summitで発表された来年の3月までのロードマップです。この中に登場する目標が現在どういう状況なのか、進捗を確認します。

## 2015 Q2
### v1.10
v1.10の公開は4/29でぎりぎり4月中に間に合いました。

https://github.com/dart-lang/sdk/blob/master/CHANGELOG.md#1100-2015-04-29

### v1.11
v1.11の公開は6/27、これまたギリギリでした。

https://github.com/dart-lang/sdk/blob/master/CHANGELOG.md#1110---2015-06-25

### Migration to GitHub
6/3にGitHubへ完全移行しました。えらい。

http://news.dartlang.org/2015/06/dart-is-now-on-github.html

### WebStorm as IDE
6/27のv1.11から配布パッケージ中にDart Editorを含まなくなっています。
## 2015 Q3

### v1.12
v1.12はこれまたギリギリの8/31に公開されました。

https://github.com/dart-lang/sdk/blob/master/CHANGELOG.md#1120---2015-08-31

### HTTP2 + gRPC
これは進捗がよくなさそう。

http2のパッケージはあるけどexperimentalだしあんまり進んでなさそう。
https://github.com/dart-lang/http2

gRPCに関してはパッケージすらない。
https://github.com/dart-lang/sdk/issues/22655

### v1.13
11/18、10月までには間に合わなかった。

https://github.com/dart-lang/sdk/blob/master/CHANGELOG.md#1130---2015-11-18

## 2015 Q4

### v1.14
現在開発中ですが12月中に来るのでしょうか。

https://github.com/dart-lang/sdk/blob/master/CHANGELOG.md#1140

### Dart Mobile Service
これはおそらく現在開発中の **Flutter** のことでしょう。

http://flutter.io/

Flutterは開発中ではありますがiOSやAndroid向けにアプリケーションが開発できるようです。

Qiitaでも実際に触ってみた記事がいくつもあります。

* [Dartでネイティブモバイルアプリ開発 - Qiita](http://qiita.com/zukkun/items/de9ffe78d1b607f6d432)
* [Flutter x Dartlang で Androidアプリ作成 - Qiita](http://qiita.com/kyorohiro/items/c478b98dd364050d23e5)
* [FlutterのGetting Started翻訳 - Qiita](http://qiita.com/takyam/items/4cfed5318da880276d98)
* [Dart x Flutter で、作成したAndroidアプリをGoogle Playに登録してみた - Qiita](http://qiita.com/kyorohiro/items/5981590797facb027725)

### Fletch
Fletch、これもはじめはモバイル向けだったはずですが、今はなんと組み込み向けのアプリケーション開発キットになっており、現在サポートしているのはRaspberry Pi2のみというだいぶロックな状況にあります

https://github.com/dart-lang/fletch

## 2016 Q1

### v2.0
GitHub上のマイルストーンは0%です。とはいえ2月までの期限ですからまだまだこれからでしょう。

https://github.com/dart-lang/sdk/milestones


### Dart Dev Compiler
鋭意開発中。
https://github.com/dart-lang/dev_compiler

Dart Dev Compiler(DDC)はDartからES6を吐き出すコンパイラです。dart2jsのように難読化されたJSではなくヒューマンリーダブルなJSを吐き出すことを目標にしています。

## 所感
下半期の進捗が危ういけどDDCはなんとか間に合わせてほしい。多分また4月にSummitあるだろうから1年間の集大成で、TypeScriptとNode.jsに染まりきった私をDartに引き戻してほしい。
Arduinoで赤外線温度センサ使ってみた

電子工作を始めると、使えるセンサーの種類の多さにびっくりします。
参考リンク（秋月電子さんのセンサーカテゴリ）：http://akizukidenshi.com/catalog/c/csensor/

見たことないセンサーを見ると使ってみたい！！って気持ちになるけど珍しいセンサー程お値段ががが・・・ってなるのがいつものパターン...
そんな中、ちょっと奮発して欲しかったセンサーをひとつ手に入れることができたので、早速Arduinoで使ってみました。

# 赤外線温度センサとは？
赤外線を使って非接触で測定対象の温度を測ることができるセンサーです。

![09570-01 (1).jpg](https://qiita-image-store.s3.amazonaws.com/0/38442/fbe8ccf2-8c81-7dbd-5842-1e48c855e4a0.jpeg)
>赤外線温度センサ MLX90614
https://strawberry-linux.com/catalog/items?code=18120
https://www.sparkfun.com/products/9570

お値段ひとつ¥2,280なり。ﾁｮｯﾄﾀｶｲ...

Arduino互換の評価ボードもあります。
>MLX90614搭載赤外線温度センサ評価ボード
https://www.switch-science.com/catalog/937/

こっちのほうが使いやすそうだけど、さらに高い👏ﾊﾟﾝ
さすがに諦めて前者を買いました。

# 回路例とサンプルスケッチ
## 回路例
>Is it hot? Arduino + MLX90614 IR Thermometer
http://bildr.org/2011/02/mlx90614-arduino/

![MLX90614_hookup.png](https://qiita-image-store.s3.amazonaws.com/0/38442/4be68022-1958-b8a5-7951-3091a55d413c.png)

## サンプルスケッチ
動作確認版をgithubに上げました
https://github.com/shanonim/arduino/tree/master/MLX90614

# 実際に測ってみた
結線した様子です。
![Photo 11-7-15, 5 09 12 PM.jpg](https://qiita-image-store.s3.amazonaws.com/0/38442/600a283b-cc82-25b3-d285-3524fb1ff1e4.jpeg)

試しに、スタバのカップにセンサーを近づけてみると・・
![Photo 11-7-15, 5 37 31 PM.jpg](https://qiita-image-store.s3.amazonaws.com/0/38442/7f82711c-e867-7173-2708-e4829b7dc257.jpeg)

温度が取れました！！👏ﾊﾟﾁﾊﾟﾁ
<img width="986" alt="スクリーンショット 2015-11-07 17.38.02.png" src="https://qiita-image-store.s3.amazonaws.com/0/38442/878bc874-9787-9d83-ced7-f59e8db9c0ae.png">

# 今後の計画
最近は<a href="http://johnny-five.io/">johnny-five</a>でArduinoを使うことが多いので、Node.js上でこのセンサーを使えるように試行錯誤中です。

温度センサネタだと、先日コーヒーの飲み頃を測る装置を作ったのですが、
>美味しいコーヒーの飲み頃を教えてくれるIoT // Speaker Deck
https://speakerdeck.com/shanonim/mei-wei-siikohifalseyin-miqing-wojiao-etekureruiot

また新しい活用例を思いついたら、今度はこのセンサーを使ってみたいと思います。

Happy IoTing!!
Haskell + Yesodで作ったアプリをHerokuにデプロイする

この記事は [Heroku Advent Calendar 2015](http://qiita.com/advent-calendar/2015/heroku) の 20 日目の記事です。

去年のHerokuAdventCalendar2014のネタは、実はHerokuにYesodを突っ込むというものだった。
だけど
[【Mac OS X 10.10】Haskell + Yesod + Heroku で webアプリ 1/3](http://qiita.com/gogotanaka/items/a9a2483c37935acf568a)と、ネタが被ってしまったのと、後、手元で試してみてもエラーがでてどうにもならなかった（後述）ので、放置しっぱなしだったが、今年の割と早い時期に解決したので1年越しに投下する。

## haskell本体の入手と設定

http://qiita.com/tacke_jp/items/83120e4b3cb4f866211f
を参考（ただしバージョンは読み替え）

```
ubuntu$ sudo su -
cd /tmp
mkdir haskell
cd haskell/ 
wget https://downloads.haskell.org/~platform/7.10.3/haskell-platform-7.10.3-unknown-posix-x86_64.tar.gz
tar -xvzf haskell-platform-7.10.3-unknown-posix-x86_64.tar.gz 
./install-haskell-platform.sh 
/usr/local/haskell/ghc-7.10.3-x86_64/bin/activate-hs

//ここでダウンロードしたパッケージは各々削除
```


次にcabalの設定をする。

```
cabal update
$ cabal install cabal-install
$ cabal update
$ cabal install yesod-bin alex happy
```

プロジェクトを作成
```
yesod init
```

プロジェクト名を決めるので
simple-yesod
と打つ。
プロジェクト構成を聞かれるけど、ここでは「simple」を選択。

```
cd simple-yesod
//パッケージをインストール
cabal install -j --enable-tests --max-backjumps=-1 --reorder-goals
```

起動する。

```
yesod devel
```

凄まじく時間が掛かる。。。

ここまでがローカルの作業。

## Herokuにデプロイ

ここからHerokuにデプロイするまでの作業。

とりあえずプロジェクトを作る。ビルドバックも合わせて設定する。

```
git init
heroku create simple-yesod-etmnk --buildpack https://github.com/begriffs/heroku-buildpack-ghc.git
```

### Procfileを作る

```
echo "web: ./dist/build/yesod-simple/yesod-simple " > Procfile
```

### keterの編集

Heroku用のビルドセッティングをやっておく。config/keter.ymlを編集する。

```
user-edited: false -> trueに変更
hosts: - simple-yesod-etmnk.herokuapp.com <- 自分の環境に合わせて変更(複数箇所全部)
```

直したら、yesod ketelを叩く。
すると、dist/build/hogehoge/hogehogeにビルドバイナリが出来る。

### heroku-anvil

Yesodのビルドはかなり時間がかかるので、heroku-anvilというツールを使う。

```
heroku plugins:install https://github.com/ddollar/heroku-anvil
```

これはビルドを別サーバー上で行ってビルドバイナリをHerokuにデプロイするというツール。

設定したらビルドする。

```
heroku build -r -b https://github.com/begriffs/heroku-buildpack-ghc.git
```

うまく行けばいつものごとく、「git push heroku master」で。

## 別の方法でHerokuにデプロイする

上記の最後でエラーが有った場合は、以下の方法を試す。
（ちなみに去年は上記の最後の手順で以下のエラーが出て先に進めなかったので断念した）

```
cabal: You need to re-run the 'configure' command. The version of Cabal being
used has changed (was Cabal-1.20.0.2, now Cabal-1.20.0.0).
ERROR: Build failed, exited 1
```

https://github.com/yesodweb/yesod/wiki/Deploying-Yesod-Apps-to-Heroku
この解決法だと要はNode.jsのアプリと認識させてデプロイするというものらしい。

手順に従ってpackage.jsonを作る

```
echo '{ "name": "simple-yesod", "version": "0.0.1", "dependencies": {} }' >> package.json
```

以下の手順でデプロイに不要なcabalを削除してからデプロイ

```
git checkout -b deploy
cabal clean && cabal configure -fproduction && cabal build
git add -f dist/build/appname/appname
git commit -m "binary"
git push -f heroku deploy:master
git checkout master
git branch -D deploy
```

これで上手くいくはず。
AngularJS勉強メモ 番外編1(filterに存在しないフィルターを指定してみた)

これはAngularJSを勉強した内容をまとめたものです。

# 今回したこと
* フィルターに未定義フィルターやらnullやら指定して動きを見てる！
 * 未定義なフィルター名を指定
 * nullを指定
 * フィルターを文字列で指定
 * なにも指定しない

# 環境
* Ubuntu 14.04 (VirtualBox)
* AngularJS 1.4.7

# フィルターに未定義フィルターやらnullやら指定して動きを見てる！
* フィルターの基本は勉強したので、フィルターにいろいろ指定してみて動きを見てみようと思う。

# 未定義なフィルター名を指定
１. 以下のようなhtmlを用意

```html
<!DOCTYPE html>
<html ng-app>
  <head>
    <title>filter_test</title>
    <script src="angular.min.js"></script>
  </head>
  <body>
    <ul ng-init="str = 'hoge huga'">
      <li>文字列 = {{ str | hoge }}</li>
    </ul>
  </body>
</html>
```

２. ブラウザでhtmlをみてみる
![未定義フィルター.png](https://qiita-image-store.s3.amazonaws.com/0/97052/1671637f-ee13-bbaf-381b-8a90e462d539.png)

## 結果
* エラーが出ている。
* Error: [$injector:unpr]
 * Error: $injector:unpr Unknown Provider
 * 提供されていないよってエラーっぽい。
* hogeFilterって名前のフィルターは提供されていないという予想通りのエラーが発生した。

# nullを指定
１. 以下のようなhtmlを用意

```html
<!DOCTYPE html>
<html ng-app>
  <head>
    <title>filter_test</title>
    <script src="angular.min.js"></script>
  </head>
  <body>
    <ul ng-init="str = 'hoge huga'">
      <li>文字列 = {{ str | null }}</li>
    </ul>
  </body>
</html>
```

２. ブラウザでhtmlをみてみる
![nullフィルター.png](https://qiita-image-store.s3.amazonaws.com/0/97052/349018d6-6b6d-540d-ba27-143f1e500ce1.png)


## 結果
* エラーが出ている。
*  Error: [$injector:unpr]
 * 未定義フィルターと同じエラー。
* nullFilterって名前のフィルターは提供されていないというエラー。
 * 違うタイプのエラーがでると思ったから少し意外。
* varを指定しても同じエラーだった。予約語とかは関係なく、指定された文字列のフィルターを探すのか。

# フィルターを文字列で指定
１. 以下のようなhtmlを用意

```html
<!DOCTYPE html>
<html ng-app>
  <head>
    <title>filter_test</title>
    <script src="angular.min.js"></script>
  </head>
  <body>
    <ul ng-init="str = 'hoge huga'">
      <li>文字列 = {{ str | "lowercase" }}</li>
    </ul>
  </body>
</html>
```

２. ブラウザでhtmlをみてみる
![文字列.png](https://qiita-image-store.s3.amazonaws.com/0/97052/1cfad3d8-efc5-55ae-5ac3-1df916fb026c.png)

## 結果
* エラーが出ている。
* Error: [$parse:syntax] 
 * Error: $parse:syntax Syntax Error
 * これはシンタックスエラーなのか。。タイプエラーになりそうと思った。

# なにも指定しない
１. 以下のようなhtmlを用意

```html
<!DOCTYPE html>
<html ng-app>
  <head>
    <title>filter_test</title>
    <script src="angular.min.js"></script>
  </head>
  <body>
    <ul ng-init="str = 'hoge huga'">
      <li>文字列 = {{ str | }}</li>
    </ul>
  </body>
</html>
```

２. ブラウザでhtmlをみてみる
![指定なし.png](https://qiita-image-store.s3.amazonaws.com/0/97052/4ccff5d7-5165-6a49-b6ce-991ebc2881ec.png)

## 結果
* エラーが出ている。
* Error: [$parse:ueoe]
 * Error: $parse:ueoe Unexpected End of Expression
  * 式の予期しない終了。ueoeって何だと思ったけど、納得のエラー内容。

# そのたメモ
* 結果はすべてエラー。予想通りだけどエラーの内容が思ったのと違っていた。
* こういう勉強をしていると、「これはこう指定したら動くのか。ふむ。」で満足してしまうことが多いけど、こういうことをいろいろ試してみるのも大事だなと感じた。
SpringFoxを試してみた

# SpringFoxとは
Springと組み合わせて使うライブラリ。
Rest APIのドキュメントを自動で生成してくれる。また、ドキュメント上からAPIをコールするクライアントを用意してくれる。

http://springfox.github.io/springfox/


# 試す
build.gradleに以下を追記

```groovy
repositories {
    jcenter()
}

dependencies {
    compile 'io.springfox:springfox-swagger2:2.2.2'
    compile 'io.springfox:springfox-swagger-ui:2.2.2'
    compile "com.google.guava:guava:17.0"
}
```

GuavaはAPIのエントリポイントの指定を正規表現で指定するときに使います。

Spring Bootで適当にAPIを作りました。

```java
@RestController
@RequestMapping("api/foo")
public class SampleController {
    @RequestMapping(value = "hoge", method = RequestMethod.GET)
    public Sample hoge(@RequestParam(value = "name") String name) {
        return new Sample(1, name, "hogehoge");
    }

    @RequestMapping(value = "fuga", method = RequestMethod.POST)
    public Sample fuga(@RequestBody Sample sample) {
        return sample;
    }
}

```

Spring BootのConfigurationクラスを以下のように書きました。

```AppConfig.java
package sample.springFox;

import com.google.common.base.Predicate;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

import static com.google.common.base.Predicates.*;


@Configuration
@EnableSwagger2  // Springfoxを使用可能にするためのアノテーション
 public class AppConfig {

    @Bean
    public Docket document() {
        return new Docket(DocumentationType.SWAGGER_2)
                .select().paths(paths()).build().apiInfo(apiInfo());
    }

    
    private Predicate<String> paths() {
        return or(containsPattern("/api*"));  //APIのエントリポイントを正規表現で指定
    }

    private ApiInfo apiInfo() {
        ApiInfo apiInfo = new ApiInfo("Sample API", "",
                "terms of service", "", "", "", "");
        return apiInfo;
    }
}

```



初回は以下を実行しましょう

```
./gradlew cleanIdea idea
```

次に以下でアプリケーションを起動しましょう。

```
./gradlew bootrun
```

以下のURLにアクセスすると・・・
http://localhost:8080/swagger-ui.html

![FireShot Capture - Swagger UI_ - http___localhost_8080_swagger-ui.htm.png](https://qiita-image-store.s3.amazonaws.com/0/19175/7023ac72-f323-ed1c-9c16-2bcc9d7c58e6.png)

ドキュメントが現れました！

ここからAPIをコールすることもできます。
パラメータのテンプレートをドキュメント上からワンクリックで入力してくれたりするのでとっても便利です。

ちなみにコードの変更時も再起動してくれたらドキュメントも更新されます。

ソースコードは以下に公開しています。
https://github.com/ftsan/SpringFox-Sample

APIのドキュメントが無くてお困りの方、ドキュメントはあるけどメンテナンスが面倒でお困りの方は試してみてはいかがでしょうか。
Jenkins活用方法

# ０．はじめに
HudsonでCIをはじめて、Jenkinsに切り替えてかれこれ６～７年。
CI導入初期は、Jenkinsマスタ環境１台でビルド・デプロイ・テストを行う小規模な環境でしたが、今ではスレーブ環境を２０台近く従えるやり手の執事に出世しています。

開発現場によってJenkinsの使い方はいろいろだと思いますが、うち（企業向けWebサービス開発）ではこんなプラグイン使ってます、ということを中心に紹介していきます。

# １．Categorized Jobs View
[Categorized Jobs View](https://wiki.jenkins-ci.org/display/JENKINS/Categorized+Jobs+View)

小規模でJenkinsを使っていたときにはこのプラグインを導入していなかったのですが、ビルドするアプリケーションの種類が増えたり、デプロイやテストの数が増えてくると、タブメニュー化するだけではジョブの実行状況把握が厳しくなってきたのでCategorized Jobs Viewの導入を決めました。

正規表現でジョブのグルーピングができるので、テストの種別（パフォーマンステスト、旧バージョンテスト、スローテストなど）やビルドするアプリケーションの種別（サーバ、クライアント、運用バッチなど）でグルーピングしてます。

# ２．Timestamper
[Timestamper](https://wiki.jenkins-ci.org/display/JENKINS/Timestamper)

Jenkinsコンソールにタイムスタンプを出力してくれるプラグインです。
地味に活躍してくれてます。
特にテストジョブが失敗したときに、テスト対象のサーバログとJenkinsコンソールを突き合わせて確認するときに便利さを感じています。

# ３．Configuration Slicing Plugin 
[Configuration Slicing Plugin ](https://wiki.jenkins-ci.org/display/JENKINS/Configuration+Slicing+Plugin)

複数のJenkinsジョブの設定を１画面で一括編集できる優れもののプラグインです。
これも、小規模でJenkinsを使っていたときには必要なかったものです。
デプロイジョブやテストジョブでほとんど同じ設定なのに、実行する環境だけが違うジョブが増えてきたときに試しに導入してみました。

結果、ジョブ実行のスケジュール設定変更やジョブの中で使うシェルスクリプトの追加・修正など、いちいち各ジョブの設定画面を開いて編集していた作業が１つの画面でできるようになって、作業の効率化だけでなく、設定ミスも少なくなりました。
利用頻度は少ないプラグインですが、おススメです。

# ４．Build Trigger Badge Plugin
[Build Trigger Badge Plugin](https://wiki.jenkins-ci.org/display/JENKINS/Build+Trigger+Badge+Plugin)

Jenkinsジョブのトリガーを識別してアイコン表示してくれるプラグインです。
ジョブが失敗したときに、直前のコミットをポーリングして実行されたジョブなのか、誰かが手動で実行したのか、それとも定期実行だったのか、が一目でわかります。

# ５．Clone Workspace SCM Plugin
[Clone Workspace SCM Plugin](https://wiki.jenkins-ci.org/display/JENKINS/Clone+Workspace+SCM+Plugin)

他のJenkinsジョブのワークスペースをコピーするプラグインです。
デプロイジョブで大活躍しています。

# ６．Checkstyle Plugin, FindBugs Plugin 
[Checkstyle Plugin](https://wiki.jenkins-ci.org/display/JENKINS/Checkstyle+Plugin)
[FindBugs Plugin](https://wiki.jenkins-ci.org/display/JENKINS/FindBugs+Plugin)

言わずと知れたCheckstyleとFindBugsのプラグイン。
開発メンバのローカル環境だけでなく、Jenkinsでも実行してコードの健康状態をチームで共有しましょう、ということで導入しました。

実行結果の推移がグラフ化されるので、指摘が減っているのをふりかえりで確認できたときには、チームのテンションがほんのりUPします。

# ７．Emotional Jenkins Plugin
[Emotional Jenkins Plugin](https://wiki.jenkins-ci.org/display/JENKINS/Emotional+Jenkins+Plugin)

ジョブが失敗するとJenkinsさんが般若化します。
導入したての頃はインパクトがありましたが、慣れてしまうと・・・どうでしょう？
直接の役には立ってないですが、仕事の余白を愉しむために継続利用しています。

# ８．Groovy plugin
[Groovy plugin](https://wiki.jenkins-ci.org/display/JENKINS/Groovy+plugin)

JenkinsでGroovyを実行するためのプラグインです。

最近、Javaで書くと冗長になりやすいテストをGroovyでやってみよう、ということにチームでTryしてるのでお試し導入中です。

※世間でどうかはわからないですが、うちの開発チームでは第二次Groovyブーム到来中です。

# ９．困っていること
何かと便利なJenkinsですが、困っていることもいくつかあります。
Jenkinsの問題というよりも、テストの作り方や環境の問題が大半ですが。。

・10分ビルドを達成できていない（特にテストに時間がかかる）
・スレーブが増えてきてスレーブ管理が大変に
・Jenkinsの重要性が高まれば高まるほどJenkinsをアップデートするのがコワい

# １０．まとめ
こうして書いてみると、便利だと思って使ってるJenkinsのプラグインは地味ですね。。
ただ、なくなってしまうと困るものなので、Jenkinsは縁の下で開発を支えてくれる超抜優秀な執事になってくれています。

使っているプラグインをすべては紹介しきれてないですが、この中にもしも使っていないプラグインがあればお試しで導入を検討してみてください。

# おまけ
いつだったかチームメンバがJenkinsのユーザ会（？）でもらってきたJenkins人形を朝会のトークンとして活用しています。
朝一でのJenkinsの確認漏れ防止にもなるので大活躍してます。
TeXStudio on Macでコマンド補完が使えない

TeXStudioは「「補完に強い」」エディタとして名を馳せているようですが、
僕はどうもその強みがよくわかりませんでした。

というのも、

**補完ができない！！！！**

`\begin`と入力しても、コマンド自体が存在するかどうかは見てくれるのですが、`\begin{hoge}`みたいなサジェスチョンを全くしてくれません。

![hokannashi.png](https://qiita-image-store.s3.amazonaws.com/0/103086/e47bd6d4-5254-cb3a-e5e9-e98efabf4bca.png)

ググってもサッパリ出てこないので途方に暮れていました。

ところが、とある拍子にOSXの入力の設定で\と¥を入れ替える設定が外れてしまったとき…

![hokandekita.png](https://qiita-image-store.s3.amazonaws.com/0/103086/2cdd6564-103b-2385-8b61-6fe0ad6f33ae.png)

！？！？

**補完ができる！！！！！**

どうやら、バックスラッシュと円記号が逆になっていると上手くいかないようです。

どうやらTeXStudioは"\"という記号がハードウェア的に入力されたときに補完機能を発動するようになっているようなので、OSXの設定でディープに入力される文字を入れ替えてしまうとだめなようです。

ただ、この設定を無効にすると、常にAltを押しながらでないと\が入力できないので困ったものです。

## BetterTouchToolを使う ##

新しいソフトウェアを入れて常駐させるのも面倒だったので、いつも使っているBetterTouchToolでソフトウェア的に\を¥にしてしました。

**この方法の欠点は、¥を入力できないことです。**
Alt+¥→\と¥→¥はショートカットキーとして同時に存在できないからです。

でもいいや。¥使わないもんね。

## Karabinerを使う##
**でもまぁ、¥を入力したいこともありますよね。**

ソフトウェアを常駐させるのにためらいのない人は、大人しくKarabinerを使いましょう。


ググっても出てこない！とか言ってましたが、原因がわかってからググってみると、結構書いてありました。

https://oku.edu.mie-u.ac.jp/~okumura/texwiki/?TeXstudio#ffe2f4b8

これにずっと悩まされていたと思うとつらい。
めでたし。
NLTKによる大規模ツイートデータの感情分析

# はじめに
今回はICWSM-14で提案されたVADERという感情分析手法を用いて，約1年間分の**英語**のツイートデータを解析してみました．VADERについては[NLTKにSentiment Analysisがやってきた](http://qiita.com/yukinoi/items/c3c4e4e24a66b88d8215)という記事を参照しました．ありがとうございます．

# VADER
VADERはPythonの自然言語処理パッケージのnltkに実装されています．
使ってみると．

```py

In [1]: from nltk.sentiment.vader import SentimentIntensityAnalyzer

In [2]: analyzer = SentimentIntensityAnalyzer()

In [3]: analyzer.polarity_scores("I am happy!!!")
Out[3]: {'compound': 0.6784, 'neg': 0.0, 'neu': 0.179, 'pos': 0.821}
```

と"compound"，"neg"(nagative)，"neu"(neutral)，"pos"(positive)の4種類が0~1で出力されます．


# データセットと実験
2014/10/31から2015/10/28までのTwitter Streaming APIで取得した英語のツイート(を先輩から頂きました!)．1日あたり1089358件ツイートがあった．各ツイートについて感情分析し，"pos"の値を日毎に平均をとった．さらに，最終的なデータについて平均0，標準偏差1となるように基準化を行いました．

# 関連研究(?)
[Twitter mood predicts the stock market](http://arxiv.org/pdf/1010.3003&)という論文で，極性分析ツールであるOpinionFinderと6種類の感情因子を分析するGPOMSをつかって以下の様な結果が得られていました．
![bollen.png](https://qiita-image-store.s3.amazonaws.com/0/31899/bcfb2119-d733-0613-0319-838d2cd31986.png)
今回の"pos"の値がOpinionFinderやGPOMSのHappyの結果に近づくことが予想されます．

# 結果
得られた結果を時系列のグラフとして描画する．
![figure_1.png](https://qiita-image-store.s3.amazonaws.com/0/31899/ba1e0073-0802-9da2-a798-344fa8229e73.png)
何本か上に飛び出ている箇所があるので注目する．
## 感謝祭(2014/11/27)
![figure_1.png](https://qiita-image-store.s3.amazonaws.com/0/31899/eee612aa-656d-d5c8-eb12-a1d836927d85.png)
## クリスマスと年末年始
![figure_1.png](https://qiita-image-store.s3.amazonaws.com/0/31899/6eeb1512-950a-1c26-c36b-97676753cc3d.png)
## バレンタインデー
![figure_1.png](https://qiita-image-store.s3.amazonaws.com/0/31899/3a3f4f40-5307-33b8-e4cf-5019a076dfbf.png)

# おわりに
楽しくなるようイベントがあるときにはみんなポジティブになってますね！！
"neg"の値が大きい部分も分析してみたかったんですが，結局原因が分からなかったです．
CoreOS on Azure で swap を有効にする

Azure 固有の機能を使うと systemd と付き合わなくて済むので，メモ．

Azure の CoreOS イメージには，waagent なる仕組みが組み込まれていて， /mnt/resource/swapfile を起動時に作ってくれます．

waagent.conf の編集
==================

```
# vi /usr/share/oem/waagent.conf
```

```
# Create and use swapfile on resource disk.
ResourceDisk.EnableSwap=n

# Size of the swapfile.
ResourceDisk.SwapSizeMB=0
```

を

```
# Create and use swapfile on resource disk.
ResourceDisk.EnableSwap=y

# Size of the swapfile.
ResourceDisk.SwapSizeMB=8192
```

とします．swapfile の大きさはお好みで．

再起動
======

waagent 起動時に働きますので，この時点では swapfile を作っていません．
速やかに reboot します．

```
# reboot
```

確認
====

頃合いを見計らって，再ログインします．
起動直後は swap は有効になっていないかもしれません．そのときは，数十秒待ってみてください．

```shell-session
Last login: Sun Dec 20 04:55:43 2015 from xxx.xxx.xxx.xxx
CoreOS stable (835.9.0)
$ free
             total       used       free     shared    buffers     cached
Mem:        688792     195892     492900        592       5492      78716
-/+ buffers/cache:     111684     577108
Swap:            0          0          0
(しばらく待つ)
$ free
             total       used       free     shared    buffers     cached
Mem:        688792     210884     477908        600       6756      83188
-/+ buffers/cache:     120940     567852
Swap:      8388604          0    8388604
```

気になるところ
============

swapfile は 0644 で作られています． 0600 にしたければ，oneshot な service を仕込む必要がありそうです．でも，マルチユーザでなければそこまで気にしなくても良いかもしれません．
SourceTree > commit > 複数のコミットの差分を見る > Ctrl押しながらコミット選択

```txt:動作確認
Windows 7Pro
SourceTree Version 1.6.22.0
```

色々コミットしていくうちに、複数のコミットの変更をまとめてみたくなった。

参考 http://qiita.com/morizotter/items/b744dfdf9f541530cd12

> Cmd押しながら比較したいコミットを２つ選択するだけで差分が出る。便利！

上記の方法(WindowsではCtrlを押しながら)で確認できた。
Git リポジトリの内容を zip ファイルにする

`git clone` したフォルダを単純に zip すると、`.git` フォルダが含まれてしまったり、普段は `.gitignore` などで無視しているファイルが含まれてしまったりします。

Git リポジトリの内容だけを取り出して zip ファイルにするには、`git archive` コマンドが便利です。

参考：GitHub だと、Git のタグをつけておくことで、`git archive` で生成したファイルと同様の zip ファイルが Release ページからダウンロードできます。

# 基本的な使い方

Git リポジトリの内容を zip ファイルにするには次のようにします。`HEAD` の部分は、タグ名、ブランチ名、コミットID、などが指定できます。

```sh
git archive HEAD --output=hoge.zip
```

中身を特定のフォルダ以下に入れたい場合は、次のように `--prefix` オプションを使います。このとき、フォルダ名の後ろに必ず `/` をつける必要があります。

```sh
git archive HEAD --prefix=hogedir/ --output=hoge.zip
```

（補足 : `--prefix` オプションは、本来は各ファイルパスにプレフィックス文字列を追加するオプションです。この文字列にフォルダ区切り文字を入れることで、特定のフォルダを指定しているのと同じ効果となります）

# 一部のフォルダだけを取り出す

Git リポジトリの `hogedir` フォルダだけを zip ファイルにするには次のようにします。

なお、特定のフォルダ以下に入れたい場合は上述の `--prefix` オプションが使えます。

## パターン1

```sh
git archive HEAD:hogedir --output=hoge.zip
```

この場合、`hogedir` フォルダそのものは zip には含まれません。`hogedir` フォルダの中身が zip に含まれます。

## パターン2

```sh
git archive HEAD hogedir --output=hoge.zip
```

この場合、`hogedir` フォルダ自体も zip に含まれます。

# 注意点

`git archive` で生成した zip ファイルを展開すると、各ファイルに実行属性がついてしまっていることが分かります。これは残念ながら `git archive` の仕様のようです。

ファイルの属性をきちんと保ちたい場合は、アーカイブを tar ファイルで作成するのが良さそうです。

```sh
git archive HEAD --output=hoge.tar.gz
```

```sh
git archive HEAD --output=hoge.tar.bz2
```
UIButtonのサブクラス  Swift

UIButtonをSuperClassにもつSubClassが欲しくて作ってみました。

imageを2つ用意していてタップすれば画像が変わるUIButtonのSubClassです。

storyboardでUIButtonを配置する場合のsubclassの作り方はたくさん載っていたのですが、storybordは使わないコードーのみの方法がなかったのでメモ代わりに、、、（１０行ほど付け足すだけですけど）


```swift:SampleButton.swift
import UIKit

class SampleButton: UIButton {
    
    let onImage = UIImage(named: "image")
    let offImage = UIImage(named: "image2")
    
    var isTapped: Bool = false {
        didSet {
            if isTapped {
                self.setImage(onImage, forState: .Normal)
            } else {
                self.setImage(offImage, forState: .Normal)
            }
        }
    }
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        self.isTapped = false
        self.setImage(offImage, forState: .Normal)
        self.addTarget(self, action: "tapButton:", forControlEvents: UIControlEvents.TouchUpInside)
    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    override func awakeFromNib() {
        self.addTarget(self,action:"tapButton:", forControlEvents: UIControlEvents.TouchUpInside)
        self.isTaped = false
    }
    
    func tapButton(sender: UIButton) {
        if sender == self {
            isTapped = !isTapped
        }
    }
}
```

storybordを使わずにsubclassを作る際に大切なのはココです。

swift1.2から ```required init```も必要になったようです。


```swift

override init(frame: CGRect) {
    super.init(frame: frame)
    self.isTapped = false
    self.setImage(offImage, forState: .Normal)
    self.addTarget(self, action: "tapButton:", forControlEvents: UIControlEvents.TouchUpInside)
}
required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}
```
逆にこの初期化するメソッドをコメントアウトすれば、UIButtonのCustomClassとして **StoryBord** で使用できます。

<img width="257" alt="スクリーンショット 2015-12-20 15.04.51.png" src="https://qiita-image-store.s3.amazonaws.com/0/71420/ac45713e-3a8a-345c-edf6-79bace34c487.png">


Swift version 2.1.1
serverspec for windows [no basic-auth]


# edit spec_helper.rb

1. http => https and port 5985 => 5986
2. Args for new()

```ruby:spec_helper.rb
require 'serverspec'
require 'winrm'

set :backend, :winrm

user = '<your admin user>'
pass = '<your admin pass>'
endpoint = "https://#{ENV['TARGET_HOST']}:5986/wsman"

#winrm = ::WinRM::WinRMWebService.new(endpoint, :ssl, :user => user, :pass => pass, :basic_auth_only => true)
winrm = ::WinRM::WinRMWebService.new(endpoint, :ssl, :user => user, :pass => pass, :basic_auth_only => false, :no_ssl_peer_verification => true)
winrm.set_timeout 300 # 5 minutes max timeout for any operation
Specinfra.configuration.winrm = winrm

```

# Do not allow Basic-Auth And Unencrypted!
Do not set bellow Windows Side params! It is traditional method.


```
winrm set winrm/config/service/auth @{Basic="true"}
winrm set winrm/config/service @{AllowUnencrypted="true"}
```


# Memo
1. Ansible > 1.9 support Winrm https & no basic-auth
2. winrm default ports (5985: http  5986: https)
init.elのスリム化を目指す (Part1)

# はじめに

この記事は[.emacs Advent Calendar 2015](http://qiita.com/advent-calendar/2015/dot-emacs)の20日目の記事です。

Emacsを使い始めたころは、よくわからないこともあってinit.elに設定のすべてを書き入れていましたが、
次第に修正しづらくなり、「ああ、このままだと詰むな」と思い、スリム化を図ることにしました。

# 何をしたか

スリム化を図るため、下記パッケージを使用しました。

- package.el
- init-loader.el

これらの組み合わせは下記でも紹介されていますね。

- [init-loader.el と package.el を導入して快適 Emacs ライフ - Qiita](http://qiita.com/catatsuy/items/5f1cd86e2522fd3384a0)
- [package.elとinit-loader.elの同時利用での問題にハマった - $shibayu36->blog;](http://blog.shibayu36.org/entry/2013/05/25/142029)

私はinit.elを以下のように書き換え、前述のパッケージを使うようにしました。

```lang:init.el
(defconst hp-inits-dir (concat user-emacs-directory "inits"))
(defvar hp-melpa-url "http://melpa.milkbox.net/packages/")
(defvar hp-marmalade-url "http://marmalade-repo.org/packages/")
(defvar hp-use-package-list
  '(
    ;; 以下に使用するパッケージを記述する
    init-loader
    scala-mode2
    yasnippet
    auto-complete
    foreign-regexp
    web-mode
    js2-mode
    csharp-mode
    cmake-mode
    helm
    ruby-mode
    ruby-additional
    ruby-block
    org-tree-slide
    )
)

;;; パッケージ
(require 'package)
(add-to-list 'package-archives (cons "melpa" hp-melpa-url))
(add-to-list 'package-archives (cons "marmalade" hp-marmalade-url))
(package-initialize)

;;; 未インストールのパッケージを探す
(require 'cl)
(let ((not-installed 
       (loop for x in hp-use-package-list
             when (not (package-installed-p x)) collect x)))
  (when not-installed
    (package-refresh-contents)
    (dolist 
        (pkg not-installed)
        (package-install pkg))))

;;; 各パッケージの設定ファイルはinits以下に置く．init-loaderがそれを読み込む
;;; ファイル命名規則が存在する (例 : 10-hoge.el)
(when (require 'init-loader nil t)
  (setq init-loader-show-log-after-init 'error-only)
  (when (file-directory-p (symbol-value 'hp-inits-dir))
    (init-loader-load hp-inits-dir)))
```

このアプローチによって、以下の流れを取ることができるようになりました。

1. git clone http://myrepos.git
2. Emacsを立ち上げる
3. 不足しているパッケージを勝手にダウンロードしてくれる
4. コーヒーを飲み終わったころには、環境が整っている
5. EmacsでASP.NET 5は最高 (後日、場を改めてご紹介します)

# スリム化は何をもたらしたか？

私はこのスリム化を以下のように評価しています。

Pros.

- ELPAパッケージをgitで管理しなくて良いため、リポジトリサイズを抑えられる
- リポジトリサイズを抑えられるため、git cloneの所要時間が抑えられる
- ロジックボードが焼けてMacがぶっ壊れても、別のMacでEmacs環境を容易に復元できる
- コードが追いやすくなった

Cons.

- Emacs初回起動時にELPAパッケージをインストールするので、時間がかかる
- ELPAからパッケージが消えると、このアプローチでは復元できない

# まとめ

いかがだったでしょうか。
皆様がご存知の通り、Emacsはスマートフォン、タブレットと同様に生活必需品の1つであります。
本エントリーが読者様のEmacsライフに少しでもお役に立てれば幸いです。
エンジニアが現場参画時にとりあえずセットアップしたいアプリ一覧


#エンジニアが現場参画時にとりあえずセットアップしたいアプリ一覧

エンジニアとして新しい現場に参画したものの
SIerであれば効率化するツールをセキュリティの理由で導入させてもらえないこともあります。


管理者権限でログインできないため、アプリ導入に許可がいることもあるかと思います。

それでも、作業を進めるにあたり、導入するアプリがなんでもありだとしたら、
とりあえずこのアプリだけは入れたいというアプリピックアップしていきました。

とても当たり前でつまらない内容かもしれませんがいきます！


------------------------------------------

## 導入したいアプリ：エディタ系

### Visual Studio Code
https://www.google.com/url?sa=t&source=web&rct=j&url=https://code.visualstudio.com/&ved=2ahUKEwiU3u-2kbzpAhUJHXAKHc36CbsQFjAcegQIAxAB&usg=AOvVaw15O90sm1ios8AUpw56hCml
エディタ機能も各言語対応していてトップクラスの機能の多さと使い易さを誇る。
重さが玉にきず。
emetという特定の文字を入れると自然に構文が作られる機能もある。
プラグインを入れれば、日本語化、自動インデント、ターミナル機能と無限に機能を付け足せる。


### Typro
https://www.google.com/url?sa=t&source=web&rct=j&url=https://typora.io/&ved=2ahUKEwifwrjHkbzpAhUOfnAKHWHCDQYQFjAAegQIARAB&usg=AOvVaw1RHsnSEMfr9hjZJEx8x8SQ

githubでマークダウン記法のリドミー作るなら、事前に確認したり、マークダウンでドキュメント作成するなら確認するためこいつが欲しい所、なくてもネット環境があれば何とかなる。


### サクラエディタ
sierで無理やり使わされるエディタ。
改行の追加削除する高度な置換機能や、
ドキュメント文字列を検索するgrep機能がある。


## 導入したいアプリ：git、ターミナル系

### git for windows
windowsにはunixライクなターミナルがないので、速攻で簡易なターミナルを使いたい場合、gitbashが役立つ。
ただし慎重な場所はもっと安定したターミナルを使おう。
https://www.google.com/url?sa=t&source=web&rct=j&url=https://gitforwindows.org/&ved=2ahUKEwik27nVkbzpAhVDMN4KHTwHDlUQFjAAegQIARAB&usg=AOvVaw0U8c0SaDeyc1o_DxvLT21E

### winscp

https://www.google.com/url?sa=t&source=web&rct=j&url=https://forest.watch.impress.co.jp/library/software/winscp/&ved=2ahUKEwi7_dbkkbzpAhXUUt4KHbzaD64QFjAWegQIARAB&usg=AOvVaw3N4U4r1zoTtLcB6x299O2-
guiで別のサーバにファイルを転送できる便利アプリ。
インフラエンジニアだけでなくweb屋にも必須のアプリ。


### teraterm
おなじみsierだったら愛用のターミナルアプリ。
teratermでsshログインしてあらゆるインフラ周りの操作をすることが出来る。

### rlogin
https://www.google.com/url?sa=t&source=web&rct=j&url=http://nanno.dip.jp/softlib/man/rlogin/&ved=2ahUKEwii2eP7kbzpAhXGAYgKHbehAkcQFjACegQIARAB&usg=AOvVaw2uqLLJQX4eEtroEjDlRdju

teratermに似ているが、最新のpcにteraterm入れられないときはこいつを使おう。


## 導入したいアプリ：オフィス系

### microsoft office excle
sierの愛するお馴染みの表計算ソフト。
今だと無料で使えるgoogleスプレッドシートにシェアを奪われつつある。

### microsoft word
sierの愛するお馴染みのドキュメント作成ソフト。
今だと無料で使えるgoogleドキュメントにシェアを奪われつつある。


## 導入したいアプリ：webデプロイツール

###ZAMPP
https://www.google.com/url?sa=t&source=web&rct=j&url=https://www.apachefriends.org/jp/download.html&ved=2ahUKEwj9vfqSkrzpAhXbMN4KHdzUCrMQFjATegQIBBAL&usg=AOvVaw0R3xVbBjyJe7lIOIlb1iyF
phpのデプロイ環境作るならこれ！
他にもrails、react、laravel、webのデプロイには必須。
zamppが使えないなら、manpを使おう。


## 導入したいアプリ：ブラウザアドオン系

### アドブロック
レバテックの広告とか大量に記事に貼り付けられて読みにくくなるので、早いことアドブロックするのをお勧めする。



------

だいたい最初に導入すべきアプリはこの位かな？
皆も快適な参画ライフを！
Awesome な iOS9 の CoreData 自動マイグレーション

モダンな Realm も良いですが、長年 Apple によって十分揉まれてきた CoreData も魅力的ですよね！
そんな CoreData が、iOS9 でさらにやさしく進化したようです。

その進化のうちのひとつが、**自動マイグレーション!**
iOS8以前との違いを見ていきましょう。

# iOS8 までの CoreData Lightweight マイグレーション

1. Editor -> Add Model Version する
2. 新しいモデルの名前を決めて作成
3. 新しいモデルを Project Navigator で選択する
    - ここで選択をミスると、後でマイグレーションに失敗します(あるある)
2. 新しいモデルに Entities や Attributes を追加/削除する
3. File Inspector の Model Version を新しいモデルに設定する
4. 以上

いつもの手順ですね。
手動でコードを書く手間がないのはとても良いですが以下の点が気に入りません。

- 気をつけないとマイグレーションに失敗する。
- スキーマが変わるごとに新しいバージョンファイルができるのは微妙。
- 1つ attribute をしたいだけの場合もなんだかんだめんどくさい。

そう我々はラクなものが大好きなのです。

# iOS9 からの CoreData Lightweight マイグレーション

1. **現行のモデル**に Entities や Attributes を追加/削除する
2. 以上

**Awesome!!! It just works mom!!!!!**

# まとめ
進化を続ける CoreData をこれからも見守っていきたいと思います。
他の iOS9 における CoreData の改善点はこちらをごらんください。
https://developer.apple.com/videos/play/wwdc2015-220/
(自動マイグレーションに関する話題は18:00くらいから)
Photoshopでスターウォーズのライトセーバーを速攻で再現する

#はじめに
<p>この記事は<a href="http://www.adventar.org/calendars/919" target="blank">Gizumoエンジニア Advent Calendar 2015</a>の20日目の記事です!</p>

<p>こんにちわ！webデザインを勉強している鯨岡です！<br>ぼくは<a href="http://gizumo-inc.jp/" target="blank">株式会社Gizumo</a>でお世話になっているのですが、今回はAdvent Calendar 2015の企画で、このような機会をいただきました。</p>

#今回やること
<p>いよいよSTAR WARSの最新作、<a href="http://starwars.disney.co.jp/movie/force.html">『スター・ウォーズ／フォースの覚醒』</a>が上映スタートして、北米の初日興行収入が歴代最高になったりとなにかと話題になっています。そんな中、facebookのアイコンにライトセーバーを合成するのが流行ってるみたいなんですよね。</p>

参考：<a href="http://smatu.net/2015/12/17/facebook-icon-starwars-lightsaber/" target="blank">フェイスブックのアイコンをスターウォーズ仕様（ライトセーバーを持たせる）にする方法</a>
![172.jpg](https://qiita-image-store.s3.amazonaws.com/0/105939/34811d77-5f2d-9ef3-4158-e6b0efe7d138.jpeg)



<p>今回はこのライトセーバーをPhotoshopで再現してみたいと思います！</p>

#実際にやってみる
まず、Photoshopで新規のファイルを作成します。
<img width="679" alt="lightsaber_01.png" src="https://qiita-image-store.s3.amazonaws.com/0/105939/95f700a9-e49b-ed13-c787-8cd438ef6acc.png">
<p>ネットで調べると選択範囲から作ってるのが検索上位に来ているのはなんでだろう。**今回はシェイプをつかってやりますよ！**</p>
<p>では次に、以下の画像を開きます。</p>

![MR-countdooku105-5.png](https://qiita-image-store.s3.amazonaws.com/0/105939/088797f0-83d0-d16f-76b7-d0d19db2a93d.png)


これは個人的に好きなドゥークー伯爵の、特注のライトセーバーなんですが、スナップを利かせやすい湾曲した独特の形状をしているんですね、対ジェダイ用のマカーシの使い手です。結構シス側のこと調べるのも面白いです。

こんな感じで設置しましょう。
<img width="697" alt="lightsaber_02.png" src="https://qiita-image-store.s3.amazonaws.com/0/105939/298ac380-2592-3546-7d33-4f93aed97868.png">

次に、刀身を作っていきましょう。
角丸シェイプツールで、横幅660px、縦幅20px、左上と左下の半径を10pxにして、シェイプを作成します。
こんな見た目になります。
![lightsaber.png](https://qiita-image-store.s3.amazonaws.com/0/105939/7466d681-2d00-4ea1-31c7-e41ca77d05dc.png)


ちょっと短いんですが、そこはお好みで変えてください！
太さもお好みで変えてみてください！

また、最初にシェイプの色は白にしておいてください！

次に、このシェイプにレイヤースタイルの光彩(外側)をかけます。
値は以下のようにしました。
<img width="735" alt="lightsaber_06.png" src="https://qiita-image-store.s3.amazonaws.com/0/105939/fee93f8f-4bc8-a636-f136-8df96e2bdb44.png">
そうするとこんな見た目になります。
![lightsaber_11.png](https://qiita-image-store.s3.amazonaws.com/0/105939/98ce3ad7-8ac8-5582-893e-9ebc7ecb53fb.png)

結構これだけでもぽくなってきましたよね。。
ただ刀身が白っぽすぎるので、カラーオーバーレイをかけてあげましょう。
<img width="559" alt="スクリーンショット 2015-12-20 16.22.04.png" src="https://qiita-image-store.s3.amazonaws.com/0/105939/c9e7e502-c796-a594-a4be-139ac322a9f3.png">

**これで完成です！**
![lightsaber09.png](https://qiita-image-store.s3.amazonaws.com/0/105939/40e0f153-2f18-7f93-b87f-0f4f1814457a.png)

#最後に
今回はかなり簡単に作ってしまいましたが、早く作ることを目標にしていたので、ゆるしてください！笑
シェイプをつかっているので、どんな形にも変形できますし、サイズの調整も自由自在です。

皆さんも自分のお好みのライトセーバー作ってみてください！

#参考
今回はシェイプで作ったんですが、選択範囲をつかって作るやり方もあるので、参考にしてみてください。
（こちらの方がより再現性高い気がします。。。）
<a href="http://bita.jp/blog/lightsaber_howto">スターウォーズ気分！ライトセーバーを作る簡単なPhotoshop画像加工方法と渾身の作品紹介</a>
Smalltalk・PHPのトレイトとRuby・Scalaのミックスインの違い

シェルリ（Schärli）が発案して Smalltalk でその実効を試したトレイト（Traits。エンティティとしては trait）はちょっとわかりにくい言語機能なので Ruby のモジュールや Scala のトレイト（これまた紛らわしい名前…）に代表されるミックスインと比較してみましょう。

まず、ミックスインというのは Ruby で話題にはなりましたが特に新しい機構というわけではなく、むしろもっとも古く、オーソドックスな多重継承機構です。クラスまたはクラスに準ずるエンティティ（Ruby ならモジュール、Scala ならトレイト（名称詐欺！）、抽象クラスなど、インスタンス生成能を持たないクラス様のもの）を継承パスに任意の数を挿入できる機構がミックスインです。

それに対して、トレイトは継承機構とはまったく関係ないところで機能します。端的には、本来であればクラスの一部であるメソッド辞書（あるいはもっと抽象的にメソッドの集合）を取り出してエンティティにしたのがトレイトです。クラスに組み込んで使用（use）します。

この性質の違いは、ミックスイン、トレイト、それぞれでスーパークラスのメソッドをコールする仕組みである super（PHP では parent）を使ってみたときにはっきりします。

```rb
module M0
  def m; super; print "M0#m " end
end

module M1
  include M0
  def m; super; print "M1#m\n" end
end

class B
  def m; print "B#m " end
end

class C < B
  include M1
end

C.new.m  #=> B#m M0#m M1#m
```

```scala
trait TA {
  def m : Unit
}

trait T0 extends TA {
  abstract override def m = { super.m; print("T0::m ") }
}

trait T1 extends T0 {
  abstract override def m = { super.m; print("T1::m ") }
}

class B {
  def m = print("B::m ")
}

class C extends B with T1 {
  override def m = super.m
}

object Main extends App { (new C).m } //=> B::m T0::m T1::m 
```

```smalltalk
| T0 T1 B |
T0 := Trait named: #T0 uses: {} category: 'UserObjects'.
T0 compile: 'm ^super m, ''T0>>#m '''.

T1 := Trait named: #T1 uses: T0 category: 'UserObjects'.
T1 compile: 'm ^super m, ''T1>>#m'''.

B := Object newSubclass rename: #B.
B compile: 'm ^''B>>#m '''.

(B newSubclass rename: #C) uses: T1.

C new m  "=> 'B>>#m T1>>#m' "

{C. B. T0. T1} do: #removeFromSystem.
```

```php
<?php

trait T0 {
   public function m() { parent::m(); echo "T0::m "; }
}

trait T1 {
   use T0;
   public function m() { parent::m(); echo "T1::m\n"; }
}

class B {
   public function m() { echo "B::m "; }
}

class C extends B {
   use T1;
}

(new C())->m(); //=> B::m T1::m
```

Ruby と Scala がミックスイン、Smalltalk と PHP が（シェルリの）トレイトです。

前者（ミックスイン）は継承パスに参加しているので、線形化後にパスの上位に配置されたモジュールなどはスーパークラス（基底クラス）と同様に見なされ、そこに定義されたメソッドは下位に位置する（すなわちミックスイン先の）クラスや別のミックスインから super でコール可能です。

対して後者（トレイト）は use されたクラスに組み込まれるので、下位クラスの super（あるいは parent）の挙動には影響を及ぼしません（ただし、シェルリのトレイトの特性として、トレイトを use する際、use する側のクラスまたはトレイトに同名メソッドがあるとコンフリクトとは扱われずに単に遮蔽されるという挙動をします）。

この話とは別に、トレイトでは複数同時に use されたときにフラット化をしてコンフリクトを検出するのに対し、Ruby など動的型言語のミックスインでは単なるオーバーライドでコンフリクトとは見なされず、それを検知する特別なしくみはない（Scala のような静的型言語には
ミックスインに限らずオーバーライドするときは override修飾子で明示的にする制約を設けて、それを利用してコンフリクトを副次的に排除することはありますが…
 <font color=red>普通に[備わっているそうです](http://qiita.com/sumim/items/a53b4f0cd6db353ec0f3#comment-054b8a5db8b609cb2d93)</font>）という違いもあります。
考察 > プルアップ抵抗 > 2.2k / 4.7k

I2Cで通信する基板に関して、自分が関係する古い基板と新しい基板でプルアップ抵抗の値が変わっていた。

- 古い基板 : 4.7k
- 新しい基板 : 2.2k

新しい基板の説明には以下のような記載が取説にある。

> 2.2KΩ程度の抵抗でプルアップする必要があります。

http://qiita.com/7of9/items/01775470916f7b6088a6
の例ではOLIMEXとSparkfunで2Kと10Kの運用方法の違いがあったりした。

上記の記載は以下のいずれなのか不明。

1. 4.7kではなく、2.2kが必要
2. 4.7kでも2.2kでも動く

実際に使うuC基板でやはり動作試験が必要かもしれない。

ドライバを作らないと。

RPiでデュアルターゲットでドライバ実装して動作確認した上で、該当のマイコンにて使うようにするのがデバッグしやすそうだ。
広告が表示されない？

# 広告SDKを入れても表示されない？

iOS9でHTTP通信が使えなくなり、広告SDKも軒並み対応が必要になりました。
SDKを提供している広告会社は大抵対応がすんでいますが、
メディエーションしたり、裏で別のサイトに飛ばしている場合などもあり、
iOS9でだけ広告が表示されないよ！？ということは未だにあります。

その場合の対応は知られているとおり、
Info.plistに以下を書けばおk。

```
<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key><true/>
</dict>
```
Making iOS Tweak by using the iOSOpenDev

この記事は [iOS Jailbreaking Advent Calendar 2015](http://qiita.com/advent-calendar/2015/ios-jailbreaking) の13日目の記事です。

# iOSOpenDev

[iOSOpenDev](http://iosopendev.com/download/)とは、`logos`や、`CaptainHook`を`theos make framework`を使わず、Xcode上で、iOS jailbreakアプリ開発をすることが可能になるツールです。
`xib`や、`CocoaPods`を使った、iOS Tweakを作成したい時に重宝します。Xcodeの機能を使って、Xcodeのテンプレや、通常のアプリ開発の差分がほとんどなく取っ付き易い開発が可能となります。
また、DEBIAN/controlファイルにiOS Jailbreak開発する際のcontrolを同じことを書いておけば、debパッケージングまでしてくれます。

User-Definedに自動でkeyを追加してくれるので自分の環境にあった、設定をしておくとよいでしょう。
![スクリーンショット 2015-12-20 13.38.49.png](https://qiita-image-store.s3.amazonaws.com/0/94722/006dd3aa-577f-40a0-8e48-15eed442b797.png)
自プロジェクトのAnsible構成

### ■前提
現在携わっているプロジェクトでAnsibleを使用していますが、メンテナンス出来るメンバが限られている状態です。そこで、Ansibleの構成について簡単にまとめておきたいと思います。

### ■環境
CentOS 6.xに対してAnsibleを実行する想定です。

### ■Ansibleの構成
以下は、サーバにApacheとMySQLをインストールするAnsibleのファイル群です。
「★」がついているものは、任意の名前を付けてOKなものです。

```
server01 ← [★任意のディレクトリ名、Webサーバに展開するAnsibleであれば「web_server」など]
│
└── roles ← [お決まりのディレクトリ名]
    │
    ├── apache ← [★任意のディレクトリ名、タスクの名前にすると分かりやすい]
    │   │
    │   └── tasks ← [お決まりのディレクトリ名]
    │       │
    │       └── main.yml ← [お決まりのファイル名]
    │
    └── mysql ← [★]
        │
        ├── tasks
        │   │
        │   └── main.yml
        │
        ├── templates ← [お決まりのディレクトリ名]
        │   │
        │   └── my.cnf.j2 ← [★任意のファイル名、拡張子は「j2」]
        │
        └── vars ← [お決まりのディレクトリ名]
            │
            └── main.yml
```

### ■「main.yml」の中身(一部抜粋)
#### ・apache -> tasks

Apacheのインストールから設定など、Apacheに関するタスクを記載しています。
どのタスクも「name」と「tags」を付けるようにしています。

```main.yml
# Apacheのインストール ← [コメント]
- name: install apache ← [Ansibleを実行したときに表示される]
  yum: name=httpd state=latest ← [最新のApacheをyumインストール]
  tags: apache  ← [Ansible実行時に「このtagsの名前のタスクだけ実行!」と指定できる]
```

MySQLのインストールから設定など、MySQLに関するタスクを記載しています。

#### ・mysql -> tasks
```main.yml
- name: install mysql
  yum: name={{ url }}/{{ item }} state=present ← [インストール済みであればインストールしない、「url」は以下の「vars-main.yml」に記載、「with_items」分実行される]
  with_items: ← [複数ある場合は以下のように複数記載]
    - MySQL-client-{{ version }}.el6.x86_64.rpm ← [「version」は以下の「vars-main.yml」に記載]
    - MySQL-shared-compat-{{ version }}.el6.x86_64.rpm
  tags: mysql
```

#### ・mysql -> vars
```main.yml
url: http://ftp.jaist.ac.jp/pub/mysql/Downloads/MySQL-5.5/ ← [MySQLダウンロード先URL]
version: 5.5.46-1 ← [MySQLバージョン]
```

### ■(少し発展編)全タスクで使用する変数を定義したい！
この場合は、「server01」ディレクトリと同じ階層に「group_vars」というディレクトリを作成し、その中に任意のファイルを作成して変数を定義します。

```
server01
group_vars
│
└── server ← [★任意のファイル名]
```

上記「server」ファイルで、以下のように記載すれば全main.ymlで定義した変数「hoge_user」「hoge_version」が使用可能になります。

```
---                                                                                                                                                                                          
hoge_user: hogeuser
hoge_version: 1.2.3
```

### ■最後に
Ansibleは完成させるまで苦労しますが、完成後は環境作成がとても楽になります。
コマンド一つで何度でも同じ環境を作成できるのは本当に楽です。
Ansibleは恐くない！Ansibleを味方につけて楽しよう！

Ansible以外の構成管理ツールもたくさんあるので、Ansibleより楽なツールが無いか今後試してみたいと思います。
Inter Process Communication for iOS

この記事は [iOS Jailbreaking Advent Calendar 2015](http://qiita.com/advent-calendar/2015/ios-jailbreaking) の12日目の記事です。

# Inter Process Communicationについて
Inter Process Communicationつまり、プロセス間通信とは、通常プロセス同士が会話をするためのものです。プロセスは、メモリが独立した空間が割り当てられていて、プログラムの全体的なセキュリティと安定性に加え、悪意に他プロセスの変数や状態変更をさせないためのものであり、プログラム間の直接な通信を遮断してくれます。
IPCは、別のプロセスがこのような通信フラグやデータを塊として情報を送受信を可能とします。

[参考 iPhone Dev Wiki](http://www.iphonedevwiki.net/index.php/SSH_Over_USB)

# libobjcipc
Alan Yipさんが作成した簡単に IPC を実現出来るフレームワーク([libobjcipc](https://github.com/a1anyip/libobjcipc))があります。
GitHubのdescriptionにも書いてあるとおり、jailbreak iOSにて、`SpringBoard`とアプリのIPCを実現するものです。
[ProWidgets](https://github.com/a1anyip/ProWidgets)でも使用され、ProWidgetsのExtensionを作るときにも有効に利用されました。
私もProWidgets経由でIRKitのシグナルを送信するExtension([IRKit for ProWidgets](https://github.com/wakinchan/IRKit-for-ProWidgets))を作った際にも利用しました。
ブロックで情報の受け渡しができ、実に簡単に実装することが出来ます。

# RocketBootstrap
ActivatorなどiOS Jailbreakをしたあと必須アプリとなるものを作り続けるRyan Petrichさんが作成した、アプリサイドからSpringBoardへのコミュニケーションを実現するフレームワーク([RocketBootstrap](https://github.com/rpetrich/RocketBootstrap))です。

`CPDistributedMessagingCenter`を利用し、
```rocketbootstrap_distributedmessagingcenter_apply(c);```
を追加するだけで、アプリにNotificaitonを送信することが実現できます。

# WebSocket
WebSocket経由でコミュニケーションを取る方法もあります。Qusicさんが作成した、CouriaのExtensionでも見受けれるように、([Whats App For Couria](https://github.com/Qusic/WhatsAppForCouria/blob/master/Tweak.mm)) WebSocket経由でもObjectの送信ができます。
Dumps decrypted mach-o files for iOS Application

この記事は [iOS Jailbreaking Advent Calendar 2015](http://qiita.com/advent-calendar/2015/ios-jailbreaking) の11日目の記事です。

# dumpdecryptedでの解析
アプリに対してのPatchを当てる際に、class-dumpをしてHeaderから攻める方法が簡単かとおもいますが、アプリ(IPA)は通常暗号化された状態でビルドされて提供されています。そのためclass-dumpしてヘッダファイルを取り出すだけでも簡単には出来ません。
そこで実行ファイルの解析を簡単にしてくれるツールが、[dumpdecrypted](https://github.com/stefanesser/dumpdecrypted)です。
Jailbreakのアプリを作る上でよく利用されているリバースエンジニアリングツールの一つです。

`DYLD_INSERT_LIBRARIES` を利用して、プロセスにインジェクトし、実行ファイルの復号化してくれます。

```
DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/mobile/Containers/Bundle/Application/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/Scan.app/Scan
```

```
DISCLAIMER: This tool is only meant for security research purposes, not for application crackers.

[+] Found encrypted data at address 00002000 of length 1826816 bytes - type 1.
[+] Opening /private/var/mobile/Applications/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/Scan.app/Scan for reading.
[+] Reading header
[+] Detecting header type
[+] Executable is a FAT image - searching for right architecture
[+] Correct arch is at offset 2408224 in the file
[+] Opening Scan.decrypted for writing.
[-] Failed opening. Most probably a sandbox issue. Trying something different.
[+] Opening /private/var/mobile/Applications/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/tmp/Scan.decrypted for writing.
[+] Copying the not encrypted start of the file
[+] Dumping the decrypted data into the file
[+] Copying the not encrypted remainder of the file
[+] Closing original file
[+] Closing dump file
```

復号化がしたあとはclass-dumpできます。Swiftでは実行ファイルの構成が違うため、dumpdecryptedで復号化出来ません。別の手法で解析をする必要があります。
SSH over USB for iOS

この記事は [iOS Jailbreaking Advent Calendar 2015](http://qiita.com/advent-calendar/2015/ios-jailbreaking) の10日目の記事です。

# USB経由でSSH接続する

[iphonetunnel-usbmuxconnectbyport](https://code.google.com/p/iphonetunnel-usbmuxconnectbyport/) と呼ばれるUSB経由でsshを実現するプロジェクトがあります。ネットワークが不安定な場合や、外でssh接続する場合など、安定的なssh接続が可能となります。

使い方は以下のitnlに対して以下のコマンドを叩くだけです。

```bash
sudo path/to/itnl --iport 22 --lport 2222
```

実際にiPhoneのrootユーザに入るときは以下のコマンドで済みます。

```bash
ssh -p2222 root@localhost
```

theosでの開発でも`THEOS_DEVICE_IP`と`THEOS_DEVICE_PORT`を割り当てておけば、非常に楽に開発をすすめることが出来ます。

```bash
export THEOS_DEVICE_IP=127.0.0.1
export THEOS_DEVICE_PORT=2222
```

[参考 iPhone Dev Wiki](http://www.iphonedevwiki.net/index.php/SSH_Over_USB)
XCodeのシミュレーターでTableViewの罫線が表示されない

#解決策
Simulatorを表示した状態でメニューの 「Debug > Optimize Rendering for Window Scale」 をOFFにすると解決する

#画像付き解説
①以下の状態で罫線がない

![スクリーンショット 2015-12-20 13.00.21.png](https://qiita-image-store.s3.amazonaws.com/0/88331/c82c9d91-b49a-2ddd-ccb8-3ba189de5e57.png)

②Optimize Rendering for Window Scaleのチェックを外す

![スクリーンショット 2015-12-20 13.01.21.png](https://qiita-image-store.s3.amazonaws.com/0/88331/053fb418-bccc-2281-1ef1-18c9bdc41efb.png)

③罫線が表示されるようになった！

![スクリーンショット 2015-12-20 12.59.40.png](https://qiita-image-store.s3.amazonaws.com/0/88331/6aec4dbd-1e2a-8a2b-d38a-60750cfddddf.png)

#参考URL
[swiftで、TableViewに罫線が表示されないため困っています。
](https://teratail.com/questions/20091)
ESP8266 > プルアップ抵抗値の由来 (調査中) > OLIMEX:2k / SparkFun:10k

ESP-8266のプルアップ抵抗について、その値10Kの第一ソースを探している。

Espressif Systems IOT Team
によるデータシートには記載がなかったように思う。

https://www.adafruit.com/images/product-files/2471/0A-ESP8266__Datasheet__EN_v4.3.pdf


以下を見つけた。

http://www.forward.com.au/pfod/ESP8266/GPIOpins/index.html

> For normal program execution GPIO0 and GPIO2 need to be pulled up to Vcc (3.3V) and GPIO15 needs to be pulled to GND, each with a resistor in the range 2K to 10K resistor. A 2K resistor gives better noise immunity. OLIMEX uses 2K resistors SparkFun uses 10K resistors. I use 3K3 resistors.


- OLIMEXでは 2kを使う
- SparkFunでは 10kを使う

上記ページの人は3K3を使っている。

根拠として、ピンのinternal impedance値がわかればいいかもしれない。