OmniAICreator/Qiita-1.07M huggingface dataset:
MacBook Proのスリープ復帰時に画面が白っぽくなったときの直し方

## 内容

MacBook Proを使っていて、スリープ状態から復帰したときに画面全体が白っぽくなったときの直し方です。
手元の環境はMacBook Pro (Retina, 15-inch, Mid 2014)、OSバージョンは 10.11.6 です。

## 原因

周囲の明るさに応じて画面の輝度を変える機能がスリープ復帰時に、悪さをしているのだと推測しています。

## 方法
- インカメラを指などで塞ぐ

こうすると周囲の明るさ状況がリセットされるのか、画面が正常に表示されるようになります。

また、 `システム環境設定 > ディスプレイ > 輝度を自動調節` をオフにすることで再発しなくなるはずです。
Composer 経由で php-cs-fixer 環境をと整える。


````
$ composer require friendsofphp/php-cs-fixer
````

## コードの修正

````
$ vendor/bin/php-cs-fixer fix app 
````

終了コードは `0` 構文エラーなどがあると fix 出来ないがその場合でも終了コードは `0`

## コードのチェック

````
$ vendor/bin/php-cs-fixer fix app --dry-run
````

`--dry-run`オプションはコードのチェックのみ行う

修正スべき内容がない場合 終了コードは`0`に、 修正スべき内容がある場合エラーコード `8` が変える。

構文エラーで修正リストが出せない場合は `4` のエラーコードが帰ってくる。
複数のOGP・TwitterCardsを出し分ける


## htmlをパターンの数だけ作成

別々のogp、twitterカードを設定したhtmlを用意（4パターンなら4つ用意）。
このページ自体は表示するコンテンツがないので、`location.href='./';`でトップページへリダイレクトする。

```html:product1.html
<!-- ogp -->
<meta property="og:title" content="商品１のたいとる">
<meta property="og:url" content="http://sample.com/product1.html">
<meta property="og:image" content="http://sample.com/img/ogp/1.png">
<meta property="og:description" content="商品１のでぃすくりぷしょん">

<!--（中略）-->

<!-- twitter card -->
<meta property="twitter:image" content="http://sample.com/img/ogp/1.png">
<meta name="twitter:description" content="商品１のでぃすくりぷしょん" />

<script>
  location.href = './'; // リダイレクト
</script>
```



## twitter

クリックされるボタンに応じてurlの違うaタグを作成。

```jade:index.pug
- const url_1 = url + 'product1' + '.html';
- const encode_description_1 = encodeURIComponent(description_1)

//-（中略）
.socialButton--twitter.
  <a href="http://twitter.com/intent/tweet?text=#{encode_description_1}&amp;url=#{url_1}&amp;hashtags=#{encode_hashtag}&amp;via=#{encode_via}" target="_blank"></a>
```

rails環境だったらこんな感じか

```slim:index.html.slim
.socialButton--twitter
	a(href="http://twitter.com/intent/tweet?text=#{URI.encode(product.discription)}&amp;url=#{Settings.site.url + '/' + product.name + '.html'}&amp;hashtags=#{URI.encode(Settings.site.meta.twitter.hashtags)}" target="_blank")
```


## facebook

クリックされるボタンに応じてhrefを切り替える。

```jade:socialScript.pug
#fb-root
script.
  window.fbAsyncInit = function() {
    FB.init({
      appId      : '#{facebook_app_id}',
      xfbml      : true,
      version    : 'v2.8'
    });
  };
  function shareFB(ogp_id){
    var ogp_href = (ogp_id) ? '#{url}' + ogp_id + '.html' : '#{url}' ;
    FB.ui({
        method: 'share',
        href: ogp_href,
      });
  };
  (function(d, s, id){
     var js, fjs = d.getElementsByTagName(s)[0];
     if (d.getElementById(id)) {return;}
     js = d.createElement(s); js.id = id;
     js.src = "//connect.facebook.net/ja_JP/sdk.js";
     fjs.parentNode.insertBefore(js, fjs);
   }(document, 'script', 'facebook-jssdk'));

  var facebookButtons = document.getElementsByClassName('js-facebookButton');
  for (var i = 0; i < facebookButtons.length; i++) {
    facebookButtons[i].addEventListener('click', function(){
      var ogp_id = this.getAttribute('ogp-id');
      shareFB(ogp_id);
    }, false)
  }
```

> 参考
[Facebookのshareボタンを複数配置する](http://cly7796.net/wp/other/arranging-a-plurality-of-facebook-share-button/)
Docker初心者がイメージとリポジトリの違いが分からなくて混乱したこと

あくまでも個人的な解釈です。
ご指摘などあればお願いします。

## 疑問
`docker images`を叩くとDockerイメージの一覧が表示されるけど、なぜイメージの列名が`REPOSITORY`なのか？
イメージとリポジトリは違うのか？

## 個人的な解釈
### 1. リポジトリとレジストリ
AWS ECRのRをリポジトリだと思い込んでいたので混乱。
レジストリは、コンテナイメージやリポジトリを格納・管理するところ（Docker Hub、AWS ECRなど）。

### 2. リポジトリとは
リポジトリは、名前は同じだがタグが異なるイメージの集合。
Gihubのリポジトリとタグをイメージするとわかりやすい。

### 3. イメージ名とは
イメージ名いうものがそもそもないのかもしれないが、あえて言うならばリポジトリ名 + タグ名がそれにあたりそう。
参考記事を見ると以下のようにあるので、タグの全表記がイメージ名ということになるのかも。
> The full form of a tag is [REGISTRYHOST/][USERNAME/]NAME[:TAG]. For ubuntu above, REGISTRYHOST is inferred to be registry.hub.docker.com. So if you plan on storing your image called my-application in a registry at docker.example.com, you should tag that image docker.example.com/my-application.

あとは、レジストリ名とユーザー名がどちらも`/`で区切られる、かつ省略ができるところがわかりづらかった。
Docker Hubの場合、それが公式だからなのか分からないがレジストリ名は省略され、ユーザー名をつけるように書かれている。
しかし、AWS ECRの場合、プライベートなレジストリになるため、レジストリ名は必要だが、ユーザー名は省略しても良い。
ここを理解していなかったので、AWS ECRのリポジトリ名を見たときに、レジストリ名の部分を、Docker Hubのリポジトリ名と同様にユーザー名と見てしまい、混乱した。

## 疑問の答え
> `docker images`を叩くとDockerイメージの一覧が表示されるけど、なぜイメージの列名が`REPOSITORY`なのか？

1列目に表示されるものがイメージ名だと思っていたので混乱していた。
イメージは、リポジトリ、タグ、イメージIDなどの情報から構成されていると言えるので、イメージ一覧を取得した場にはそれらの情報が取得できる。


# 参考
* In Docker, what is the difference between an image and a repository? - Stack Overflow : http://stackoverflow.com/questions/31115098/in-docker-what-is-the-difference-between-an-image-and-a-repository
* Difference between Docker registry and repository - Stack Overflow : http://stackoverflow.com/questions/34004076/difference-between-docker-registry-and-repository
[LT] Thread Sanitizer

> チーム全体、毎週金曜日の朝、一人３分 LT をやっています。忘れないように、また日本語の勉強もしたいと思います、記事として記録します。

最近はプロジェクトの改善をしています、テストコードの補足とスレッド管理の増強に注目しています。スレッド問題は発生する時、そもそもタイミングに敏感ですが、再現しにくい、デバッグも難しい、本当に忘れられない体験になると思います。。。WWDC 2016([Session 412](https://developer.apple.com/videos/play/wwdc2016/412/)) で公開されました機能ーー**Thread Sanitizer** を使い始めましょう。この機能は Xcode に統合されています、略称は **TSan** です。

TSan を有効にすると：

> Use of uninitialized mutexes
Thread leaks (missing pthred_join)
Unsafe calls in signal handlers (ex:malloc)
Unlock from wrong thread
Data races

以上の問題を全て発見できます。一番発生しやすい **Data races（データ競合）**を展開したい、データ競合の発生原因は同期ではない場合、複数のスレッドから同じメモリをアクセスする時、少なくとも一つのアクセスで *write* 操作を行っています。実際の運用中、表現としては：データの不整合、アプリのクラッシュなど。

最近改善中のアプリを例に：

```Objective-C
[context performBlock:^{
    if (result && context) {
        result = [self persistentSaveContext:context]; // 1
    }
}];
return result; // 2
```

`result` は 1 と 2 二箇所で競合してしまう。1 で `write` 操作を行いながら、別スレッドの 2 はすでに戻す可能性があるので、データ不整合になるかもしれません。

修正方法はいくつかあります、非同期から同期に変更するとか、write 操作の実行タイミングを変更するとか。ここで、非同期メソッドの `performBlock` を使わずに、同じ用途の同期メソッド `performBlockAndWait` を使いました。そうすると、データ競合が解決されました。

```Objective-C
[context performBlockAndWait:^{
    if (result && context) {
        result = [self persistentSaveContext:context]; // 1
    }
}];
return result; // 2
```

実に **Thread Sanitizer** 機能はコンパイラ (Clang) レベルで統合されます、そのため、もし Swift でサーバーサイドを書くときにもコマンドラインで **Thread Sanitizer** を使えます：

<img width="809" alt="st1.png" src="https://qiita-image-store.s3.amazonaws.com/0/140059/1377b15e-40d0-36e5-2fd4-b06fda379e30.png">


現在、64bit シミュレーターまたは macOS 自体のみ **Thread Sanitizer** をサポートできますが、かなり素晴らしい機能だと思います。
Firebase Admin Python SDKでサービスアカウントのAccessTokenを取得する


## 追記

2017年5月17日にFirebase Admin Python SDK v2.0.0がリリースされ、一部の呼び出し方法が異なっていたので補足として追記しています。


## 概要

2017年4月4日（日本時間だと4/5早朝ごろ）にGoogle公式からPythonのFirebase SDKがリリースされました。正式名称は「Firebase Admin Python SDK」で、その名の通りAdmin周りのAPIがサポートされているSDKになります。

[Release Notes  |  Firebase](https://firebase.google.com/support/releases)

## Firebase Admin Python SDK でできること

その名の通り（二度目）Admin周りの処理が提供されています。とは書いたものの、リファレンスやガイドを読んだところ現在用意されている機能は「サービスアカウントの秘密鍵からCustomTokenやAccessTokenを作る部分のみ」のようです。

- [Firebase Admin Python SDK  |  Firebase](https://firebase.google.com/docs/reference/admin/python/)
- [Add the Firebase Admin SDK to your Server  |  Firebase](https://firebase.google.com/docs/admin/setup)

## 使い方

[Add the Firebase Admin SDK to your Server  |  Firebase](https://firebase.google.com/docs/admin/setup)

上記に書いてある内容をそのままなぞっていきますが、**そのままだと詰まる箇所があるので要注意**。

まず初めに、秘密鍵を取得します。
Firebaseのコンソールサイト（ https://console.firebase.com/ ）から該当のプロジェクトを開き、メニューのOverview横にある歯車＞プロジェクトの設定＞サービスアカウントまで移動し、画面下部にある「新しい秘密鍵を生成」ボタンを押してjsonファイルを取得します。

そして必要なライブラリをpipでインストールしておきます。

```
$ pip install firebase-admin
```


コードはこんな感じです。

### v1.0.0

```py:getToken.py

import firebase_admin
from firebase_admin import credentials

def getToken:

    credential = credentials.Certificate('./serviceAccountKey.json')
    scopes = [
        'https://www.googleapis.com/auth/firebase.database',
        'https://www.googleapis.com/auth/userinfo.email'
    ]

    # access_tokenの取得
    accessTokenInfo = credential.get_credential().create_scoped(scopes).get_access_token()
    print("access_token:" + accessTokenInfo.access_token)
    print("expire:" + str(accessTokenInfo.expires_in))

if __name__ == '__main__':
    getToken()
```


公式のドキュメントとの違いは、`firebase_admin.initialize_app()`を使わずにcredentialにスコープを設定し、そのままAccessTokenを取得するようになっています。

### v2.0.0

```py:getToken.py
import firebase_admin
from firebase_admin import credentials

def getToken:

    credential = credentials.Certificate('./serviceAccountKey.json')

    # access_tokenの取得
    accessTokenInfo = credential.get_access_token()
    print("access_token:" + accessTokenInfo.access_token)
    print("expire:" + str(accessTokenInfo.expiry)) # 「20XX-XX-XX XX:XX:XX.XXXXXX」が返る

if __name__ == '__main__':
    getToken()
```

v1.0.0との違いは`get_credential()`でクレデンシャル情報を一度取得する必要や、スコープの設定をする必要がなくなりました。
また、有効期限の内容がv1.0.0は残り時間の秒数だったのに対し、v2.0.0からはプロパティ名が`expiry`となり、利用可能な期限がdatetimeオブジェクトで返ってくるようになっています。


## 取得したtokenでRealtime Databaseにアクセス

RealtimeDatabaseで利用する場合は、パラメータの`access_token`に入れることでアクセスができるようになります。なお、このAccessTokenはサービスアカウントによって作られているため、 **データベースのルールで全ユーザーがfalseになっているものも全て読み書きが可能となるので、扱いには注意しましょう。** ちなみにトークンの有効期限は発行から1時間です。

`https://{FIREBASE_PROJECT_ID}.firebaseio.com/hoge.json?access_token={FIREBASE_ACCESS_TOKEN}`

CustomTokenに関しても同様のやり方で取得できるかとは思いますが、AccessTokenの取得が正しくできた時点で自分にとって必要なものではなくなったので、未検証のままです。
Macでお手軽な環境構築（主にWeb開発向け）

知り合いからMacを頂いたので環境構築しました。
４月ですし、せっかくだから新人プログラマ向けに簡単な環境構築をまとめました。
Windowsに関しては、Ubuntuの仮想環境セットアップでもまとめようと思います（未定）

PC環境
===
* MacBook 2015
* OSX Sierra

入れるもの
===
個人的に、Ruby on RailsとJavaScriptが分かれば、大抵なんとかなると思います。
入れるのもそこらへんを対象にしました。

* Homebrew
  * コマンドでソフトをインストールできるツール
  * すごく便利なので必須
* asdf
  * RubyやNodeJSをコマンドでインストールできる。（２０種類ほどの言語が対応している。）
  * 特定ディレクトリのみのバージョンの切り替えも出来て便利
* Nodejs
  * JavaScriptの実行環境
  * フロントエンド大好きなので入れておく
* Ruby
  * Ruby on Railsが動く言語
  * Ruby on Railsをやっておけば、大抵のWebフレームワークの使い方がわかる
* Visual Studio Code
  * 今一番流行ってるテキストエディッタ（当社比）
  * プラグインを突っ込むだけでいい感じに動いてくれる
  * プロジェクトごとに使用するプラグインをまとめたりもできる
* Google Chrome
  * JavaScriptのデバッグが便利

インストール
===
基本的にターミナルにコマンドをコピペ。
さらっと流してるけど、一つ一つのコマンドにも意味があるので
暇があったら自分で勉強してみてほしい。

### Homebrew
> https://brew.sh/index_ja.html

```bash
# 公式の最新のものを使うといい
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

# passwordが求められるので、ユーザーパスワードを入力

# このままだとコマンドしかインストールできないので、GUIも入れれるように拡張機能を入れる。
brew tap caskroom/cask
```

### asdf
> https://github.com/asdf-vm/asdf

```bash
# 公式サイトのやつをコピペ
git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.3.0

echo -e '\n. $HOME/.asdf/asdf.sh' >> ~/.bash_profile
echo -e '\n. $HOME/.asdf/completions/asdf.bash' >> ~/.bash_profile
```

### NodeJS
> https://github.com/asdf-vm/asdf-nodejs
 
```bash
# asdfのNodeJSプラグインが依存するGNUのツールセットをインストール
brew install coreutils

# 自分の環境だけかもしれないが、gpgコマンドが見つからないとエラーが出たのでインストール
brew install gpg

# nodejsプラグインをインストール
asdf plugin-add nodejs https://github.com/asdf-vm/asdf-nodejs.git
bash ~/.asdf/plugins/nodejs/bin/import-release-team-keyring

# 安定版で最新のNodeJSインストール
asdf install nodejs 6.10.2

# 使用するNodeJSのバージョンを指定
asdf global nodejs 6.10.2
```
### Ruby
> https://github.com/asdf-vm/asdf-ruby

```bash
# asdfのRubyプラグインを入れる
asdf plugin-add ruby https://github.com/asdf-vm/asdf-ruby.git

# Railsが動くか不安なので2.3系の最新を入れる
asdf install ruby 2.3.4

# 使用するRubyのバージョンを指定
asdf global ruby 2.3.4
```


### Visual Studio Code

```bash
brew cask install visual-studio-code
```

### Google Chrome

```bash
brew cask install google-chrome
```

終わりに
===
上記のものがあるとWeb開発は大体なんとかなると思います。
ここからRailsとかReactとか周辺を勉強していくと、最近の流行はキャッチアップできます。
Raspberry Pi 3 Model B にRaspbianをインストールして外部からssh接続出来るようにする for Mac (備忘録)


#Raspbianのインストール
http://qiita.com/ttyokoyama/items/7afe6404fd8d3e910d09
こちらを参考にmicroSDにRaspbianをインストール。

#Raspbian起動後
piユーザとしてログイン
ユーザ名 : pi
パスワード : raspberry


```:rootパスワードの変更
sudo passwd root
```

```:自分がログインするためのユーザ(hoge)の追加
sudo useradd hoge
```

```:hogeのパスワード設定
sudo passwd hoge
```

```:hogeでsudo出来るようにする
sudo gpasswd -a hoge sudo
```

```:/homeの下にhogeが作成されないので作成
sudo /home/hoge
```

```:/home/hogeの所有者を変更
sudo chown -R hoge home/hoge
```

いったんpiをログアウトしてhogeでログインし直す

```:piでsudoできなくする
sudo gpasswd -d hoge sudo
```

#RaspbianのIPを固定にする
有線の場合は /etc/hdcpcd.confを編集する
今回は 
raspberrypiに設定したいip = 192.168.11.11
ルーターのプライベートip = 192.168.11.1
とする

```:hdcpcd.confに追記する内容
interface eth0
static ip_address=192.168.11.11/24
static routers=192.168.11.1
static domain_name_servers=192.168.11.1
```

設定を反映させるために再起動
その後 ifconfigでipが指定したものになっていたらOK!
これでプライベートネットワークから(つまり家のなかでは)ssh接続出来るようになる．

#秘密鍵を用いてsshするように設定する
https://tool-lab.com/2013/11/raspi-key-authentication-over-ssh/ 
上記を参考にしました
Macの方で秘密鍵と公開鍵を作成する(作成していれば飛ばす)

```:鍵の生成
key-gen -t rsa
```

パスフレーズの入力を求められるので2回入力
公開鍵をRaspberry Piに転送する

```
scp ./ssh/id-rsa.pub hoge@192.168.11.11:~
```

hogeとしてssh接続する

```:hoge用のsshディレクトリを作成する
mkdir .ssh
```

```:鍵を.ssh以下のauthorized_keysとして出力する
cat id_rsa.pub >> .ssh/authorized_keys
```

```:公開鍵を利用するために権限の変更
chmod 700 .ssh
chmod 600 .ssh/authorized_keys
```

```:id_rsa.pubはいらないので削除
rm id_rsa.pub
```

sshの設定を変更するには/etc/ssh/sshd_configを編集する
やりたいこと

- 接続ポート番号の変更
- rootログインの禁止
- 鍵ファイル認証方式にする
- パスワード認証を無効にする

```:接続ポート番号の変更
#Port 22
Port 28987
```

```:rootログインの禁止
PermitRootLogin no
```

```:鍵ファイル認証方式にする
RSAAuthentication    yes
PubkeyAuthentication yes
AuthorizedKeysFile   %h/.ssh/authorized_keys
```

```:パスワード認証を無効にする
PasswordAuthentication no
```

```:設定の反映
sudo /etc/init.d/ssh restart
```

```:確認
ssh -i .ssh/id_rsa -p 28987 hoge@192.168.11.11
```

#sshを簡単にする(ssh raspiで接続出来るようにする)
簡単にするには .ssh/configを編集する

```:.ssh/config
Host raspi
	HostName 192.168.11.11
	User hoge
	Port 28987
	IdentityFile ~/.ssh/id_rsa
```

```:確認
ssh raspi
```
できればOK

#ルーターの設定を変更して外部から接続できるようにする
- ルーターの外部ipを調査する
- port 22 を 固定したraspberry piのipとportに割り振る
- ssh -i ~/.ssh/id_rsa -p 22 yota@外部ip で接続確認
接続できたら成功


#参照
http://qiita.com/ttyokoyama/items/7afe6404fd8d3e910d09
http://qiita.com/R-STYLE/items/b481ba2d695ddf8bcee4
AWSでSSH接続できなくなってしまったときの復旧方法

AWSでEBSを追加したらSSH接続できなくなってしまった事案があり、復旧にちょっとハマったので備忘も兼ねて記載していきます。
オンプレサーバーと違って、クラウドだとSSH接続できないと何もできなくなっちゃいますからね。

# 手順
1. 対象インスタンスのEBSのスナップショットを取得（バックアップ用）
2. 作業用インスタンスを作成
3. 作業用インスタンスに、対象インスタンスのEBSをアタッチ&マウント
4. SSH等の設定を見直し&修正
5. 対象インスタンスに、元のEBSをアタッチ

# SSH接続できなくなっちゃう原因
以下のような時に、この方法は役立ちます。

- ファイアーウォールの設定ミス
- キーペアの紛失
- OS設定ミスで起動しなくなっちゃった

# 1. 対象インスタンスのEBSのスナップショットを取得（バックアップ用）
現状のバックアップをとっておくために、対象のEBSを右クリックしてスナップショットを取得しましょう。<img width="390" alt="EC2_Management_Console.png" src="https://qiita-image-store.s3.amazonaws.com/0/2781/877a8aaf-6f8b-ccb3-3f45-f3c8f0026947.png">

# 2. 作業用インスタンスを作成
SSHできなくなっちゃったインスタンスと同様のインスタンスを作ります。
対象インスタンスを右クリックして出てくる、「同様のものを作成」で簡単にできちゃいます。
<img width="428" alt="EC2_Management_Console.png" src="https://qiita-image-store.s3.amazonaws.com/0/2781/2210c023-9c1c-56e8-0c17-edba9c6babed.png">

# 3. 作業用インスタンスに、対象インスタンスのEBSをアタッチ&マウント
## 対象のインスタンスをストップしてEBSをデタッチします
<img width="413" alt="EC2_Management_Console.png" src="https://qiita-image-store.s3.amazonaws.com/0/2781/f2e2e86c-aaf2-38fd-c678-a0b48febc641.png">

## 作業用インスタンスに、先程デタッチしたEBSをアタッチします
- ボリュームのアタッチを選択
<img width="376" alt="EC2_Management_Console.png" src="https://qiita-image-store.s3.amazonaws.com/0/2781/476e9f92-8663-c6e0-7379-d0e3fbe304f6.png">

- 作業用インスタンスIDを選択
<img width="928" alt="EC2_Management_Console.png" src="https://qiita-image-store.s3.amazonaws.com/0/2781/145d6fd8-1592-284e-4636-52113037f3e5.png">
デバイスは `def/sdf` で問題ないはず。（エラーが出る場合は環境に合わせて変更してください）

## 作業用インスタンスにSSH接続して先程アタッチしたEBSをマウントします
- 作業用インスタンスにSSH接続します
- ディスクの状態を確認

```bash
[centos@ ~]$ lsblk
NAME    MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda    202:0    0  30G  0 disk 
└─xvda1 202:1    0  30G  0 part /
xvdf    202:80   0  30G  0 disk 
└─xvdf1 202:81   0  30G  0 part 
```

- マウントポイントを作成

```bash
sudo mkdir /mnt/xvdf
```
- ディスクをマウント

```bash
mount -t xfs /dev/xvdf /mnt/xvdf/ -o nouuid
```

- マウントすると中身のファイルが見えるようになるので、SSHやファイアーウォールの設定を見直す。
- 作業用インスタンスからEBSをデタッチ
- 対象インスタンスにEBSをアタッチ
xcodebuildの-exportOptionsPlist対応でApple Developer Enterprise ProgramのProvisioningを使用したipaの生成時にエラーが出てハマった

##事象
まず最初にmethodをad-hocとしたplistファイルを作成し、Enterprise ProgramではないProvisioningを使用して動作を確認した。
これを流用してEnterprise ProgramのProvisioningでipaを作成しようとしたところ以下のエラーが表示された。

>No matching provisioning profiles found

teamIDの指定やプロジェクト設定など確認するもエラーは解消されず。

##解決策
plistファイルのmethodをad-hocからenterpriseに変更するのみ。
$ xcodebuild -help を見ると確かに以下のように記載されていた。

>method : String
>Describes how Xcode should export the archive. Available options: app-store, package, ad-hoc, **enterprise**, development, and developer-id. The list of options varies based on the type of archive. Defaults to development.

##終わりに
エラーの出方から問題の箇所が特定しづらいなと思いつつ、ヘルプはよく読みましょう…という初歩的なところに行き着く。
初心者のHerokuメモ書き


作ったサイトやサービスを簡単にデプロイできるという **Heroku。**
デプロイを自分でしたことがなかったときのちょっとしたメモ書き。

##まずHerokuってなに？

アプリケーションを実行するためのプラットフォームである
**PaaS** を提供する事業者のひとつ。
[ここのサイト](https://codezine.jp/article/detail/8051 "ここのサイト")がすごくわかりやすい。

##Herokuのディレクトリをリモートに追加する

わざわざ `git clone {URL}` しなくてもアカウントさえあれば

```
heroku git:remote -a {ディレクトリ（プロジェクト）名}
```

でgit管理化におけるらしい。

##Herokuのやつをfetchする

```
git fetch heroku
```

引っ張ってくるだけ。まだmergeはしてない。

##fetchしたやつをpullする

```
git pull heroku master
```

##pushする

```
git push heroku master
```

##Herokuのlogを見る

###普通にみる

```
heroku logs
```

これでぶわーっとlogが表示される。
でも正直読む気にならない。最新のぶんだけでええねん、というときは

###最後の変更箇所だけlogでみる

```
heroku logs --tail
```

で `tail` モード（尻尾だけ）になるので良い感じ。
DHH流コーディング


Railsの生みの親であるDHHさん流のコーディングということらしい。

#基本ルール

コントローラは以下のデフォルトのCRUDアクションに限る。

- index：一覧
- show：詳細
- new：新規作成の画面表示
- edit：編集
- create：登録
- update：更新
- destroy：削除

#メリット

- コントローラがシンプル（スリムになる）
- ルーティングのルールが明確となり、コミュニケーションが取りやすくなる

#参考

http://tech.kitchhike.com/entry/2017/03/07/190739
http://postd.cc/how-dhh-organizes-his-rails-controllers/
ViewControllerごとに画面の向きを固定する

ViewControllerごとに画面の向きを固定するには、

* `shouldAutorotate`
* `supportedInterfaceOrientations`

をオーバーライドすればいい

```swift:MyViewController.swift
class MyViewController: UIViewController {
    ...
    // 画面を自動で回転させるか
    override var shouldAutorotate: Bool {
        get {
            return false
        }
    }
    
    // 画面の向きを指定
    override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
        get {
            return .portrait
        }
    }
    ...
}
```
ただ、

* `UINavigationController`
* `UITabBarController`
* `UIPageViewController`

なんかを使ってるとMyViewControllerに書いても動いてくれない
MyNavigationControllerを作ってもいいけれど、これだけのために用意するのは少々面倒なので、AppDelegateに以下を追加して対応

```swift:AppDelegate.swift
extension UINavigationController {
    open override var shouldAutorotate: Bool {
        guard let viewController = self.visibleViewController else { return true }
        return viewController.shouldAutorotate
    }
    
    open override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
        guard let viewController = self.visibleViewController else { return .all }
        return viewController.supportedInterfaceOrientations
    }
}
```
これで、各ViewControllerでオーバーライドした設定がちゃんと反映された
iPadで見積書作成とレシート印刷【filemaker】

iPadを使って見積書を作成し、その場でレシート印刷してお客様へ渡す方法です。
イメージは自動販売機管理、電気料金、ガスメーター、水道メーターチェックの人が持っている専用端末です。
![20111209casio.jpg](https://qiita-image-store.s3.amazonaws.com/0/155574/6fda8818-32be-43be-47cf-5e5e40ac3698.jpeg)


# はじめに
現状、見積書を作成する時はPCを使って作業し、印刷・押印するなどしてお客様へ渡すことが多いです。
例えばリフォーム業者さんの場合、現場調査後、帰社し見積書を作成しお客様へメール or FAX or 手渡し
のような順番になるかと思います。

金額が高額な場合は上記のような順番で構わないかもしれませんが、金額が少額（数千円～数万円）の場合は
その場で見積書を渡せればいろんな手間が減るのでは？と思い作成してみました。

# 仕様

- iPadで見積書を作りたい。
- ノートパソコン、小型プリンタを持ち歩くのは面倒。
- 顧客情報や担当者、見積項目をカスタマイズしたい。
- 予算10万円くらいで。
- Filemaker、データベース、システム開発初心者

# 構成（使用したもの）

①iPad　安いやつだと3万円くらい
②FileMaker Pro Advance　個人で買うと単品7万円くらい。法人だと2万円くらいでは？
　ファイルメーカー　http://www.filemaker.com/jp/
③モバイルプリンタ　1万円ちょっと
　KKmoon　https://www.amazon.co.jp/gp/product/B01MU99RQN/ref=oh_aui_detailpage_o02_s00?ie=UTF8&psc=1
　↑安いので試しに買ったのですが、これはダメでした。やっぱりairprint機能がないとだめです。
　・モバイルプリンタの性能が良いバージョン
　スター精密株式会社　http://www.star-m.jp/products/s_print/sp09.html
　↑これは6万円ほどします。
④参考本
　小さな会社のFileMakerデータベース作成・運用ガイド　https://goo.gl/24n4vy
⑤参考本の無料ファイル
　ダウンロード　http://www.shoeisha.co.jp/book/detail/9784798144535


# 作ったもの
参考本を参考に無料ダウンロードファイルからレシート用のレポートをカスタマイズ作成した。

iPadで見積書作成
![image4.PNG](https://qiita-image-store.s3.amazonaws.com/0/155574/062fb490-b2ce-a661-eb92-4c5631136356.png)


見積書のレシート印刷用レポート
<img width="768" alt="image3.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/155574/07ad5a8a-401d-d569-ab17-6742e10d338d.png">

モバイルプリンタで印刷
![s_s_s_image2-min (1) (1).JPG](https://qiita-image-store.s3.amazonaws.com/0/155574/208d68ae-983f-8010-c079-7cb4d3305b44.jpeg)


押印後お客様へ渡す（テストで金額を大きくしました。）
![s_s_s_image1 (1)-min-min.JPG](https://qiita-image-store.s3.amazonaws.com/0/155574/f0f2021b-3922-77a2-4149-b9cd014ddaea.jpeg)





# 使えそうな業種（現場調査が必要な業種）

- 電気工事業者
- 太陽光発電販売
- 水道工事業者
- ガス
- リフォーム
- 引越
- 不用品買取
- 庭師
- その他細かな商材
- BtoB BtoCでちらでも使えそう 

# 雑感
・ファイルメーカーは初めて使いましたが、使いやすかった！
　いままではマイクロソフトアクセスを使っていましたが、ファイルメーカーもすぐに慣れます！

・ファイルメーカーとiPad連動でいろんな業種の働き方が変わるんでは？とかなり衝撃

・FilemakerGO15だとデータが開けず、FilemakerGO14だと開けました。（原因不明）

・モバイルプリンタは「Airprint」機能があるものでないとアプリで印刷できないので要注意。

・メール送信機能を使えばB to Bでもその場でメールを送れる。

・価格設定をきちんとデータベース化すれば全ての価格を覚える必要なし！

・これで営業担当の訪問回数は確実に減る（働き方改革！）

・用紙サイズは80mmタイプがオススメ
　80mm以下だと小さく単なるレシートになってしまう。
　80mmサイズでも印刷範囲は72mmくらいになる。

・Appstoreで無料の見積アプリとかあるけど、やっぱりPC連動で管理・カスタマイズできた方がいい

・見積書だけでなく、納品書や請求書、領収書もいけそう

・お客様が知りたいのは「値段がいくらなのかを**今、知りたい**」

・iPhoneでも出来そうだが、画面が小さいため見づらくなる。

・カメラ機能で現場の写真も案件毎に保存可能。

・署名機能でお客様からのサインをiPadに保存でき、かつレシート印刷で契約書としても使えるかも。
【PHP】httpリクエストPOST＆GET


### HTTPリクエスト通信（POST通知）

##### 送信側：
 - POST送信処理（送信先URL、送信内容）
 - レスポンス状態チェック

```php:sample
function connectByPost($url, $argary) {
 //$url = "http://localhost/example.php";
 //$argary = array('Apple','Banana','love' => 'Orange');

 // URLエンコードされたクエリ文字列を生成する
 $query_string = http_build_query($argary);

 // HTTP設定
 $options = array (
	'http' => array (
		'method' => 'POST',
		'header' => 'Content-type: application/x-www-form-urlencoded',
		'content' => $query_string,
		'ignore_errors' => true,
		'protocol_version' => '1.1'
		),
	'ssl' => array (
		'verify_peer' => false,
		'verify_peer_name' => false
		)
	);
 $contents = @file_get_contents($url, false, stream_context_create($options));

 // レスポンスステータス
 $statusCode = http_response_code();
 if($statusCode === 200) {
	// 200 success
 } elseif(preg_match ("/^4\d\d/", $statusCode)) {
	// 4xx Client Error
	$contents = false;
 } elseif(preg_match ('/^5\d\d/', $statusCode)) {
	// 5xx Server Error
	$contents = false;
 } else {
	$contents = false;
 }

 return $content;
}
```

##### POST受信側：
 - ログ出力
 - POST内容
 - リクエスト内容

```php:example.php
$path = "../logs/example.log";
$file = fopen($path, "w");

fputs($file, "=========== Example ===========\r\n");
fputs($file, "GET  : " . json_encode ( $_GET ) . "\r\n");
fputs($file, "POST : " . json_encode ( $_POST) . "\r\n");

fputs($file, "=========== Request ===========\r\n");
fputs($file, file_get_contents('php://input'));
fclose($file);

print "<SENBDATA>STATUS=800</SENBDATA>";
```

##### 結果確認：
 - ログ内容確認

```text:example.log
=========== Example ===========
GET  : []
POST : {0:"Apple",1:"Banana","love":"Orange"}
=========== Request ===========
0=Apple&1=Banana&love=Orange
```



`---I Love PHP (｡･ω･｡)ﾉ♡`
Bigquery | LegacySQL から StandardSQL への移行メモ (時刻系いくつか)

# 関数のカッコ

## Legacy

省略できない。

```sql
SELECT
  TIMESTAMP('2017-04-01 00:00:00.000000'),
  CURRENT_TIMESTAMP()
```

## Standard

省略できる。 (引数が0個-1個の場合のみ？)
`TIMESTAMP` の例など、見かけ的に型を表しているようで、より記述的に書けるようになった。

```sql
SELECT
  TIMESTAMP '2017-04-01 00:00:00.000000',
  CURRENT_TIMESTAMP
```

# PARSE_UTC_USEC => UNIX_MICROS

## Legacy

```sql
SELECT PARSE_UTC_USEC('2017-04-01 00:00:00.000001')

# 1491004800000001
```

## Standard

```sql
SELECT UNIX_MICROS(TIMESTAMP '2017-04-01 00:00:00.000001')

# 1491004800000001
```

# DATE_ADD => TIMESTAMP_ADD

## Legacy

```sql
SELECT DATE_ADD(CURRENT_TIMESTAMP(), 9, 'HOUR')

# 2017-04-12 15:36:19 UTC
```

今思えば `DATE_ADD` って関数名なのに、HOUR や MINUTE 等も与えることが出来るのは、直感的じゃなかった。

## Standard

```sql
SELECT TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 9 HOUR)

# 2017-04-12 15:36:19 UTC
```

TIMESTAMP型を操作していることが、直接分かる関数名になった。(ちなみに `DATETIME_ADD` もある)

# WHERE で TIMESTAMP型 をマイクロセカンド秒まで比較する

# Legacy

TIMESTAMP型のデータに対して、マイクロセカンドでの比較ができた。

```sql
SELECT
  *
FROM (
  SELECT
    TIMESTAMP('2017-04-01 00:00:00.000000') AS target )
WHERE
  target >= 1491004800000000
```

## Standard

TIMESTAMP型はTIMESTMAP型で比較する必要がある。
(ちなみにLegacySQLでも同じ書き方は出来ていた)

```sql
SELECT
  *
FROM (
  SELECT
    TIMESTAMP '2017-04-01 00:00:00.000000' AS target)
WHERE
  target >= TIMESTAMP '2017-04-01 00:00:00.000000'
```

# 参照

## Legacy

- [Query Reference  |  BigQuery Documentation  |  Google Cloud Platform](https://cloud.google.com/bigquery/docs/reference/legacy-sql)

## Standard

- [Query Syntax  |  BigQuery Documentation  |  Google Cloud Platform](https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax)
- [Functions & Operators  |  BigQuery Documentation  |  Google Cloud Platform](https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-and-operators)








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
正規表現で数値を抽出

#正規表現
##数値抽出

```py:正規表現で数値を抽出
import re

#正規表現
pattern=r'([+-]?[0-9]+\.?[0-9]*)'
#検索テキスト
text = 'Test+12 5.14 5, goo -8.36　36.　36.ATT'

print('pattern:',pattern,'text:',text)
print('match:',re.match(pattern,text))
print('search:',re.search(pattern,text))
print('findall:',re.findall(pattern,text))

#リストに保存
lists=re.findall(pattern,text)
```
###結果
```
pattern: ([+-]?[0-9]+\.?[0-9]*) text: Test+12 5.14 5, goo -8.36　36.　36.ATT
match: None
search: <_sre.SRE_Match object; span=(4, 7), match='+12'>
findall: ['+12', '5.14', '5', '-8.36', '36.', '36.']
```
Facebook Graph APIで自分のフレンドを取得して、タグ付けして検索できるようにしたかった

自分向けの備忘録メモです。

フレンドリストを取得するには`friendlist-id`が必要で、それを取得するには`"/{user-id}/friendlists"`を叩くと良いっぽいんだが、それをするのに、ログイン時にscopeで`read_custom_friendlists`のpermissionを取得する必要があり、それを入れると以下のような表示が現れる。
![fbgrouping.png](https://qiita-image-store.s3.amazonaws.com/0/20014/d7f914a8-6ea5-a170-d578-c7d77028a287.png "fbgrouping.png")

つまり、この機能を使うにはFacebookのReviewを受ける必要がある。

```
Submit Items for Approval
Some Facebook integrations require approval before
 public usage. Before submitting your app for review,
 please consult our Platform Policy and Review 
Guidelines.
```
[Platform Policy](https://developers.facebook.com/policy/)と[Review Guidelines](https://developers.facebook.com/docs/apps/review/)をちゃんと確認してReview依頼出してね、ってことみたいだけど、ポリシー見るに結構重たい…

今回はさくっとテストしようという意図だったので、ここで断念して辞めました。めちゃ雑いですが、ここまでの[テストコード(node.js)](https://github.com/mazeltov7/fbfriend-grouping-node)です。
また別の機会にでもトライします。
コーディングするのにPopClipが死ぬほど便利という話

死にはしないけど本当に便利なのでおすすめしたく。
PopClipは、iOSで文字を選択した時のようなメニューを提供するmacOSのアプリケーションです。
1200円と割と値は張りますが、投資するだけの価値はあります。

![175x175bb.png](https://qiita-image-store.s3.amazonaws.com/0/74461/fc1591e4-bfec-6728-b139-9141b29f5c21.png)
[PopClip on the Mac App Store](https://itunes.apple.com/jp/app/popclip/id445189367?l=en&mt=12)

普通に使うだけでもすこぶる便利になるのですが、これがプログラミング用途でも役に立つのです。

## ここがすごいよPopClip
### スペルチェック
<img width="217" alt="Screenshot 2017-04-12 16.08.02.png" src="https://qiita-image-store.s3.amazonaws.com/0/74461/e56f2b8e-9aee-e3a9-c887-1b0bc251159b.png">
スペルをミスっても、正しい候補を出してくれます。

### 計算
<img width="431" alt="Screenshot 2017-04-12 16.11.26.png" src="https://qiita-image-store.s3.amazonaws.com/0/74461/bfe7a3c7-a7ad-a99f-4055-78d29cea360a.png">
「＝」マークをクリックするだけで
<img width="270" alt="Screenshot 2017-04-12 16.11.31.png" src="https://qiita-image-store.s3.amazonaws.com/0/74461/dc3fc742-a82c-81ba-a9e8-ed04ac2452f7.png">
計算してくれる
電卓叩く必要がないです

### ソートする
文字ごとにソートもやってくれます。
<img width="332" alt="Screenshot 2017-04-12 16.19.37.png" src="https://qiita-image-store.s3.amazonaws.com/0/74461/1425c8fc-5d57-95e5-a5c5-46e2b6c787aa.png">
<img width="359" alt="Screenshot 2017-04-12 16.19.43.png" src="https://qiita-image-store.s3.amazonaws.com/0/74461/6152ce53-94fa-2a0b-7b5a-6f487fe6ef34.png">

### 翻訳する
<img width="381" alt="Screenshot 2017-04-12 16.23.10.png" src="https://qiita-image-store.s3.amazonaws.com/0/74461/fb3d386f-9699-c759-2631-48947e5f88f8.png">
<img width="130" alt="Screenshot 2017-04-12 16.23.17.png" src="https://qiita-image-store.s3.amazonaws.com/0/74461/2a537e1c-59d0-2e68-103c-7dbbb2f94599.png">

### MarkdownをそのばでHTMLにする

<img width="491" alt="Screenshot 2017-04-12 16.25.11.png" src="https://qiita-image-store.s3.amazonaws.com/0/74461/ca24733b-363e-c8ef-689e-b310ee4c8ef9.png">
<img width="226" alt="Screenshot 2017-04-12 16.25.16.png" src="https://qiita-image-store.s3.amazonaws.com/0/74461/cd278ab1-1bef-949b-446b-8bae95250685.png">
地味に便利です。
ウェブページからMarkdownにしてコピーすることも可能です。

### もっとある
プラグインを追加すればもっと色々なことができます。
その気になれば自作可能なところも良いです。
http://pilotmoon.com/popclip/extensions/

## さいごに
PopClipはエディタを選びません。
vimだろうがemacsだろうがatomだろうが使えます。
便利だよPopClip、地味に。
【iOS】Google Analytics(ver3.17)を仕込む【Swift3.x】

GoogleAnalytics実装手順（2017年版）

## 1. SDKの入手
まずはSDKをダウンロードしましょう。
⇨ [version 3.17](https://dl.google.com/googleanalyticsservices/GoogleAnalyticsServicesiOS_3.17.zip?hl=ja)

## 2. プロジェクトに追加
ダウンロードしたzipを解凍して必要なファイルをプロジェクトに放り込みます
<img width="719" alt="Downloads.png" src="https://qiita-image-store.s3.amazonaws.com/0/151314/3a09426f-fb2a-ca97-51e6-b2354e46134b.png">

※　広告を使用しない場合、`libAdldAccess.a`は取り込まないほうが無難です。取り込む場合、`AdSupport.framework`が必要となり、審査依頼時にIDFAの使用用途に回答する必要があります。

## 3. フレームワークの追加
必要となるXcodeネイティブのフレームワークを追加します

`SystemConfiguration.framework`
`CoreData.framework`
`libsqlite3.tbd`
`libz.tbd`

Linked Frameworks and Libraries、「+」をクリックしてフレームワークを追加します
<img width="871" alt="ShadowMatch_xcodeproj.png" src="https://qiita-image-store.s3.amazonaws.com/0/151314/0269f9b6-92ee-d19b-71a4-8a8adde17af9.png">

## 4. ブリッジヘッダへ追加

```Swift
#import "GAI.h"
#import "GAIDictionaryBuilder.h"
#import "GAIEcommerceFields.h"
#import "GAIEcommerceProduct.h"
#import "GAIEcommerceProductAction.h"
#import "GAIEcommercePromotion.h"
#import "GAIFields.h"
#import "GAILogger.h"
#import "GAITrackedViewController.h"
#import "GAITracker.h"
```


## 5. トラッキング実装

Utilityクラスなどで定義しておくと便利です

トラッキングメソッド定義

```Swift
    // Google Analytics トラッキング
    class func googleTracking(displayName:String?) {
        
        GAI.sharedInstance().tracker(withTrackingId: "UAXXXXXXXX-NN")
        let tracker = GAI.sharedInstance().defaultTracker!
        tracker.set(kGAIScreenName, value: displayName)

    }
```

トラッキングメソッド呼び出し

```Swift
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        
        Utility.googleTracking(displayName: "ログイン画面")
        
    }
```
コードからtextlintを実行する


# 概要

[textlint](https://github.com/textlint/textlint)はテキスト向けのLintツールで、予め定義したルールに沿って文章校正を行ってくれます。textlintの利用方法としてCLIから利用することが多いと思いますが、コードからtextlintを実行する必要があったので調査しました。この投稿はそのメモです。

# 環境構築

## Node.jsのインストール

Node.jsのバージョンはv6.9.1を使用しています。[nvm](https://github.com/creationix/nvm)や[nodebrew](https://github.com/hokaccha/nodebrew)などを使ってインストールします。

## textlintのインストール

textlint本体をインストールします。

```bash
npm install textlint
```

## ルールのインストール

textlintを実行する際に使用するルールをインストールします。今回は[textlint-ja/textlint-rule-preset-ja-technical-writing](https://github.com/textlint-ja/textlint-rule-preset-ja-technical-writing)を使用します。

```bash
npm install textlint-rule-preset-ja-technical-writing
```

## .textlintrcの設定

`.textlintrc`を作成し`"preset-ja-technical-writing"`をtrueにしておきます。

```
{
  "rules": {
    "preset-ja-technical-writing": true
  }
}

```

# textlintの実行

コードから実行する場合以下のようになります。`TextLintEngineCore#executeOnText`を使用すると引数に取ったテキストに対してtextlintを実行することができます。引数にファイルを指定したい場合`TextLintEngineCore#executeOnFiles`を使用します。

```javascript
const TextLintEngine = require("textlint").TextLintEngine;

const engine = new TextLintEngine({
    rulePaths: [
      "node_modules/textlint-rule-preset-ja-technical-writing"
    ]
});

engine.executeOnText("# test!!").then(results => {
  console.log(results[0].messages);

  if (engine.isErrorResults(results)) {
    const output = engine.formatResults(results);
    console.log(output);
  }
});

```

実行結果は以下のように出力されます。

```bash
node index.js

[ { type: 'lint',
    ruleId: 'preset-ja-technical-writing/no-exclamation-question-mark',
    message: 'Disallow to use "!".',
    index: 6,
    line: 1,
    column: 7,
    severity: 2 },
  { type: 'lint',
    ruleId: 'preset-ja-technical-writing/no-exclamation-question-mark',
    message: 'Disallow to use "!".',
    index: 7,
    line: 1,
    column: 8,
    severity: 2 } ]

<text>
  1:7  error  Disallow to use "!"  preset-ja-technical-writing/no-exclamation-question-mark
  1:8  error  Disallow to use "!"  preset-ja-technical-writing/no-exclamation-question-mark

✖ 2 problems (2 errors, 0 warnings)
```

# サンプルコード

サンプルコードはこちらです。

https://github.com/horie1024/textlint-sample


# 参考

- https://github.com/textlint/textlint
- https://github.com/textlint/textlint/blob/37aef98dd3bb2414b514208f478d09809b4c20f5/packages/textlint/src/engine/textlint-engine-core.js
Haml/scssで文字の色や位置が反映されなかった時の対処事例


##class名に%は必要なかった##
hamlにもscssにもclass名を%header__messageと記入し、SCSSを使おうと思っていたが動かず立ち往生していた。

そこで%を取ってみると、動いた。

```haml
%header
  %header__message
    メッセージ
    
↓↓↓

%header
  .header__message
    メッセージ
```


```SCSS
header__message{
  text-align: center;
  color: $white;
  line-height: 2
}

↓↓↓

.header__message{
  text-align: center;
  color: $white;
  line-height: 2
}
```

headerやpには%が必要だがclassやdivには必要ないということでした。
簡単なHMAC secretがいけない理由

[One Line of Code that Compromises Your Server](https://martinfowler.com/articles/session-secret.html)

- `super secret` のような簡単HMAC secret は1分以内でクラックされてしまう
    - クラック計算に使えるAWSインスタンスの利用料金は2.6$ / h 
- そのsecretでコードをRailsサーバにインジェクトできてしまうこともある
Draw.ioで作成した図をWordに挿入する

# はじめに
PowerPointでフローチャートをつくっていたが、面倒な点が多くて、ツールを探していると便利なツールを見つけた。
[Draw.io](https://www.draw.io/)
無料で使え、Google Driveとも連携していている。
ただ標準では svg/pdf/png で出力しかできないため、Wordに挿入するときはpngで画像が荒くなってしまう。

## emfに変換
Draw.io はベクタ形式で作っているので、Wordにも綺麗なベクタ形式で挿入したい。しかしsvgはWordに対応していない。
少し面倒だけど、Draw.io で作成したものを別のソフトでemfに変換して、挿入する。
使ったのは有名な無料のドローソフト　[inkspace](https://inkscape.org/ja/)

- Draw.io で作成した図をexportからsvgで保存する。
- inkspace で開いて「名前を付けて保存」で拡張子をemfとして保存
- Word で図の挿入から貼り付け

## Draw.io でテキストを入れると上手く変換できない
文字を入れるとNot supporrted by viewer　や改行等の文字コードが入ってしまう。
Draw.io のヘルプに解決策が載っていた。

- プロパティのtext のFormatted Text optionのチェックを外す
- プロパティのtext のWord Wrap optionのチェックを外す

参考
https://desk.draw.io/support/solutions/articles/16000042487-why-does-the-text-of-svg-export-sometimes-not-display-correctly-in-ie-and-some-svg-editors-

作り方によってはDraw.io 上と同じように開くことができないかもしれないが、一応はうまくいった。

## フォルダ内のデータを一括変換のバッチファイル
たくさん作るといちいちinkspace開くのが面倒なので、バッチ処理で一気に変換。

     for %%A in (.\*.svg) do "C:\Program Files\Inkscape\inkscape.exe" -z -f %%A --export-emf %%A.emf 
    
同一フォルダ内のsvgを変換、名前は～.svg.emfとセンスがない作りなので注意。

ちなみにpythonのmatplotlibで作成したグラフもsvgで出力保存し、同じ方法で綺麗にWordにグラフが貼れます。

## まとめ
Draw.io で作成した図を inkspace を介することでWordにベクタ形式ではれます。
同じ手法でmatplotlibのグラフもWordにはれます。
Jenkinsで複数のリポジトリをpollingしたい

なんでか知らないけれどどうしても複数のリポジトリをポーリングしてみたいことってあるじゃないですか
最近初めてそんなことがありました。

で、調べるとMulti SCMしか出てこない…
これはちょっとというかかなり面倒くさい。
二個くらいなら何とかなるけど10ことか20ことかあるといちいち設定するの面倒くさい…

というわけでpipelineでポーリングしてみました。

ビルドトリガーはもちろんSCMをポーリングにします。
あとはこんな感じでコード書いて実行したらポーリングしてくれる
pollingは1行ごとにリポジトリ書いてあるビルドパラメータ

あとは煮るなり焼くなりけるなり

``` groovy

node
{
    pollings = polling.split("\n")
    for( i=0;i<pollings.length;i++)
    {
        git pollings[i]
    }
}

```
Treasure DataのTD_TIME_FORMAT()の「z」と第三引数

TD_TIME_FORMAT()のドキュメント([その1](https://docs.treasuredata.com/articles/udfs#tdtimeformat)、[その2](https://docs.treasuredata.com/articles/udf-time-formats))だと動作結果例が少ないので

```
SELECT TD_TIME_FORMAT(0, 'yyyy-MM-dd HH:mm:ss z')        → 1970-01-01 00:00:00 UTC
SELECT TD_TIME_FORMAT(0, 'yyyy-MM-dd HH:mm:ss z', 'JST') → 1970-01-01 09:00:00 GMT+09:00
SELECT TD_TIME_FORMAT(0, 'yyyy-MM-dd HH:mm:ss Z')        → 1970-01-01 00:00:00 +0000
SELECT TD_TIME_FORMAT(0, 'yyyy-MM-dd HH:mm:ss Z', 'JST') → 1970-01-01 09:00:00 +0900
Nginxの豆知識🌿

## proxy

ブラウザ -> プロキシ -> 🌏 -> サーバー

---

## reverse proxy

ブラウザ -> 🌏 -> プロキシ -> サーバー

---

## Nginx

https://www.nginx.com/resources/wiki/
> NGINX is a free, open-source, high-performance HTTP server and reverse proxy

---

## Nginxのプロキシ設定についてお話します

---

## 基本ルール

```
セクション {
  ディレクティブ パラメータ;
}
```

例えばこんな感じ

```
server {
  listen 80;
  server_name hogehoge.com;
  return 301 https://hogehoge.com$request_uri;
}
```

---
# 今日の本題

これ

```
upstream unicorn {
  server hogehoge option;
}
```

---
# hogehogeの部分で呼べるもの

- 上位サーバーのアドレス(ドメイン名、IPアドレスおよびTCPポート、UNIXドメインソケットへのパス)
- オプションのパラメータ

---
- ドメイン名、IPアドレスおよびTCPポート -> たぶん🙆
- UNIXドメインソケットへのパス -> ...🙅

---
## UNIXドメインソケット
プロセス間でデータを交換するためのルール

```
nginx.conf内の
unix:/var/www/hogehoge/current/tmp/sockets/unicorn.sock

config/unicorn.sock内の
listen "/var/www/hogehoge/current/tmp/sockets/unicorn.sock
```

---

## TCP/IPのループバックより早い
TCP/IP接続の際のオーバーヘッドがないかららしい...[参考](http://osnet.cs.binghamton.edu/publications/TR-20070820.pdf)

---

## 設定を確認してみてね!
StoryboardやXIB上で使うクラスのdelegateやprotocolがエラーになった場合の直し方

Storyboard上で自作クラスを当てた際に、以下のようなエラーが出ていてプレビューができなかった原因と対処方法です。

```
IB Designables: Failed to update auto layout status: The agent crashed
```

## 原因・対策

StoryboardやXIB上で使う自作クラスが`delegate`や`protocol`を持っていて、IBOutletで繋ぐ場合はクラス定義を`Any`等にしておく必要があります。

``` swift:エラーになるケース
protocol MyDelegate {
    func somehing()
}

class MyButton: UIButton {
    var delegate: MyDelegate?
}
```

``` swift:エラーにならないケース
protocol MyDelegate {
    func somehing()
}

class MyButton: UIButton {
    var delegate: AnyObject?
}
```

Interface Builderから使う際の型定義については、Appleのドキュメントにも書かれています。

> Interface Builder does not support connecting to an outlet in a Swift file when the outlet type is a protocol.
Declare the outlet type as AnyObject or NSObject, connect objects to the outlet using Interface Builder, then change the outlet type back to the protocol. (17023935)

参考になれば幸いです。

## 参考

- http://stackoverflow.com/questions/26180268/interface-builder-iboutlet-and-protocols-for-delegate-and-datasource-in-swift
- https://developer.apple.com/library/content/releasenotes/DeveloperTools/RN-Xcode/Chapters/Introduction.html#//apple_ref/doc/uid/TP40001051-CH1-SW489
node.js で express を使っている際の require のパスの書き方メモ

読み込むファイルからの相対パスで繋ぐと、 `../` が沢山になるので、
グローバル変数にアプリのROOTパスを入れて、各ファイルではROOTパスを使った絶対パスを使う。

```js:app.js
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var swig = require('swig');

// ----------------------------------------
// 変数の設定
global.app_root = __dirname;
// ----------------------------------------

var index = require('./routes/index');

var app = express();

// view engine setup
app.engine('html', swig.renderFile);
app.set('view engine', 'html');
app.set('views', path.join(__dirname, 'views'));
app.set('view cache', false);
swig.setDefaults({ cache: false });

...
```

```js:各ファイル
var StringUtil = require(global.app_root + "/common/util/string_util.js");
```
注意として `app.js` の最初の方で宣言しないと、各ファイルの読み込み時に間に合わない可能性があるので、
なるだけ頭の方で宣言する。
【Xcode】ビルド番号のバリデーションエラー【8.x】

こんなバリデーションエラーが！
<img width="583" alt="Organizer.png" src="https://qiita-image-store.s3.amazonaws.com/0/151314/9959cc4c-4218-c3ac-8607-2f5978650fb0.png">

Generalタブで設定するビルド番号が大文字で入っていたのが原因でした…
<img width="1129" alt="ShadowMatch_xcodeproj.png" src="https://qiita-image-store.s3.amazonaws.com/0/151314/1a7ca231-d95d-7e8f-24bc-faf75dd6d2bb.png">

アプリのバージョンもビルド番号と同様選択式でなくて手入力なので同じエラーになる可能性あり
<img width="992" alt="Organizer_と_新しいタブ.png" src="https://qiita-image-store.s3.amazonaws.com/0/151314/b8267d9f-9fe9-078b-fba0-76dee95ca91a.png">
Webpackで本番ビルドする時にビルドフォルダが.gitignoreされて怒られる時の対処

Rails+React+Webpackの環境でビルド後のファイルがgit管理下に含まれていると、コンフリクトが頻繁に起こるようになってしまいました。

```
# .gitignoreに以下の記述を追加
app/assets/javascripts/component/**/*.js
```

そこで.gitignoreにビルドファイルを除外するようにして、
本番デプロイ時にWebpackでビルドを実行するようにしました。

## ビルドフォルダが無くて怒られる

ただこのままデプロイしようとすると、ビルド先のフォルダとして指定している`component`フォルダがgit管理下になくビルドファイルが保存できず怒られます。

## 空のファイルを置いて認識されるようにする

そこでビルドしたJSファイルのみ除外するようにして、
`.keep`等の空のファイルを`component`配下に置くことで`component`フォルダがgitに認識されるようにします。これで解決しました。めでたし。
Rでベン図を書く

#### ・Rでベン図を描画

ささっとRでベン図を描くライブラリーを共有します。
細かいオプションとかだと[VennDiagram](http://bio-info.biz/tips/r_venn_diagram.html)辺りを用いてしっかり描きますが、割とラフに書くだけやサンプルで見せるベン図ならば[vennplot](ftp://cran.r-project.org/pub/R/web/packages/vennplot/vennplot.pdf)ライブラリーも負けてはいません。例えば、

```
combinations = c(A=1.8, B=0.9,C=0.3,AB=0.5,AC=0.2,BC=0.3,ABC=0.2)
vennplot(combinations)
```
とすると以下のようになります。

![venn1.png](https://qiita-image-store.s3.amazonaws.com/0/161216/e46d248d-b8b8-93fe-58fb-f7102a4be1f0.png)

書き方がリストで「集合=○○」と書けばよく共通部分については「集合1集合2=××」と繋げるのと○○や××に集合の大きさを数値で指定すれば自動的に勝手にそれっぽいグラフができます。

ただし真面目に書く場合だとVennDiagramの方が有用だと思います。
Swift3でテーブルのセルを横にずらせる(スワイプできる)ようにする

# Swift3でテーブルのセルを横にずらす(スワイプできる)ようにする

## 今回の目標
テーブルのセルをスライドできるようにする。

![Qiita用テーブルセルスライド.png](https://qiita-image-store.s3.amazonaws.com/0/139291/2b59e24d-4f26-a09d-beca-646a240a2837.png)

## 開発環境

- Xcode：8.2.1
- 言語：Swift 3
- OS：MacOS

## 実行方法
事前準備としてテーブルの表示ができるようにしておきます。

その後、下記二つのメソッドを追加します。

追加メソッド

- ```func tableView(_ tableView: UITableView, editActionsForRowAt: IndexPath) -> [UITableViewRowAction]? {}```
- ```func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {}```

一つ目のメソッドでアクションを追加して、二つ目のメソッドでアクションを許可しています。

サンプルコード

```swift:ViewVontroller.swift
    // Cellのスワイプメソッドを実装します
    func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {
        let swipeCellA = UITableViewRowAction(style: .default, title: "内容A") { action, index in
            self.swipeContentsTap(content: "CellA", index: index.row) // 押されたときの動きを定義しています
        }
        let swipeCellB = UITableViewRowAction(style: .default, title: "内容B") { action, index in
            self.swipeContentsTap(content: "CellB", index: index.row)
        }
        let swipeCellC = UITableViewRowAction(style: .default, title: "内容C") { action, index in
            self.swipeContentsTap(content: "CellC", index: index.row)
        }
        swipeCellA.backgroundColor = .blue // 背景色
        swipeCellB.backgroundColor = .red
        swipeCellC.backgroundColor = .green

        return [swipeCellC, swipeCellB, swipeCellA] // A,B,Cという順で表示される
    }

    // trueを返すことでCellのアクションを許可しています
    func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
        return true
    }

    // 独自に作成した押されたとき用のメソッド。Cell番号と押された内容をprint
    func swipeContentsTap(content: String, index: Int) { 
        print("タップされたのは" + index.description + "番のセルで" + "内容は" + content + "でした")
    }
```
RaspberryPi3でWeb of Things Framework for NodeJSを動かしてみる

W3CのWef of Things Framework for NodeJS
https://github.com/w3c/web-of-things-framework
をRaspberry pi3 で動かしてみる。

# Web of Things Framework とは?
自分自身勉強中なのであるが、、

### Web of Things
* W3CのWeb of Things Interst GroupがIoTをウェブ技術で利用するための議論をおこなってきた。最近、標準化するためのWeb of Things Working Groupが立ち上げられたところ。
* 今後十年で一千億単位のIoTデバイスが世に出回るといわれているが、現状はそれぞれ局所的に接続されて使われているだけで、相互に接続されておらずネットワーク化されることによるメリットが生まれていない。

### Web of Things Framework
* W3Cのねらいは、それぞれを共通のフレームワークで相互接続すること。マイコンからスマートフォン、家庭やオフィスのハブにいたるまであらゆるスケールで使える、新しい形式のWebサーバにより実現させようとしている。
* 実際のデバイスや仮想的なものも含めて、抽象的なモノ("things")を定義して扱う
* モノのデータははJSON-LDで表現し、各モノに対してURIでアクセスする方法を提供する
* モノを記述するための言語(The thing describing language: TDL)があり、メタデータ、イベント、プロパティ、アクションがある。モノ同士の接続関係も記述できる。

# W3CのWeb of Things Framework for NodeJSとは？
https://github.com/w3c/web-of-things-framework
この記事で扱うのがこれ。
W3C Web of Things Interest Groupのサポートにより提供されているWeb of Things Frameworkの実験的な実装。
HTTPとWebソケットサーバをもち、ウェブページからモノ("things")へアクセスするデモも提供している。

# 環境
* Raspberry pi3 Model B
* OS: Raspbian
 * https://www.raspberrypi.org/downloads/raspbian/
 * RASPBIAN JESSIE WITH PIXELのほう。
 * `uname -a`の結果: `Linux raspberrypi 4.4.50-v7+ #970 SMP Mon Feb 20 19:18:29 GMT 2017 armv7l GNU/Linux`
* node: ~~v0.10.29~~ -> v6.10.2

# 作業ログ
Installation手順どおりにすすめる。

npm installで、leveldownというモジュールのインストールでビルドエラー。
しょうもないところでハマったので作業ログとして下記に逃がして、
http://qiita.com/u_one/items/de6808fddcc37df666a7

結論としてはnode -v v6.10.2 を新たにインストールして、無事インストール完了。

----
ラズパイでHTTP RESTデモ起動して、
PCからwebページを開けました。

これも手順どおり、coap_demoを起動、http_demoをそれぞれ起動し、ブラウザからアクセス。

トップ。
![image](https://qiita-image-store.s3.amazonaws.com/0/38611/67d84b4e-c156-80a6-2ce5-ca2dd1f6a750.png)

こんな疑似的な機器が入っている。
![image](https://qiita-image-store.s3.amazonaws.com/0/38611/79515c70-93c9-6e2b-59bd-f8076b6a2800.png)

Docs, Tutorialsなどはまだない。
nvidia-dockerをremoteから呼び出す．

やりたいこと: 手元のPCからGPUが刺さっているPC上で動くnvidia-dockerを起動する(sshは表向き使わない）．
記事を書いた動機: 言語を問わず，これ！という情報がなかったのでまとめてみました．
# 事前準備
- nvidia-dockerのインストール:https://github.com/NVIDIA/nvidia-docker

# 設定ファイルの書き換え
注意として，nvidia-dockerにリモート接続する場合には，dockerにも接続する必要があります．
- docker用のポートは2375
- nvidia-docker用のポートは3476
それぞれで，上記のポートをtcpでlistenさせるための設定が必要です．

## dockerにremoteから接続するための書き換え
GPUが刺さっているPC(以下，ホスト)上で /lib/systemd/system/docker.service のExecStartを書き換える

    #ExecStart=/usr/bin/dockerd -H fd:// 
    ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H fd:// 

## nvidia-dockerに3476ポートをlistenさせるための設定
ホスト上で /lib/systemd/system/nvidia-docker.service のExecStartを書き換える

    #ExecStart=/usr/bin/nvidia-docker-plugin -s $SOCK_DIR
    ExecStart=/usr/bin/nvidia-docker-plugin -l :3476 -s $SOCK_DIR 

# サービスの再起動とテスト
ホストのipアドレスを10.X.X.Xとしているので，これは環境にあわせて書き換える．

    sudo systemctl daemon-reload
    sudo systemctl restart docker 
    sudo DOCKER_HOST='10.X.X.X:' docker run hello-world
    sudo systemctl restart nvidia-docker 
    sudo DOCKER_HOST='10.X.X.X:'  nvidia-docker run --rm nvidia/cuda nvidia-smi

# おまけ（proxyまわり)
もし，クライアントPCとホストの両方がプロキシの内側にある場合には，http_proxyなどの変数が設定されてしまっていて接続できなくなるかもしれない．この場合は，DOCKER_HOSTの他に 変数no_proxyも設定すれば良い．

    sudo no_proxy='10.X.X.X' DOCKER_HOST='10.X.X.X:' docker run hello-world
    sudo no_proxy='10.X.X.X' DOCKER_HOST='10.X.X.X:'  nvidia-docker run --rm nvidia/cuda nvidia-smi

いつも同じホストに繋ぐなら，aliasを仕掛けておくのが吉かと．
Mojolicious の dumper メソッドで日本語を表示する

# 内容

Mojoliciousのdumperメソッドを日本語表示可能にする。

# 本文

Mojoliciousではコントローラやテンプレートで`Mojo::Util`パッケージに含まれるdumperメソッドが利用できます。

このメソッドはData::Dumperのラッパーで、複雑なデータ構造を確認したい場面で重宝します。

例えば、コントローラ側では `$c->dumper($data)` もしくは `$self->dumper($data` のように呼び出します。

Mojolicious 7.30時点でMojo::Utilのdumperメソッドは以下のような定義になっています。

```pl

sub dumper {
  Data::Dumper->new([@_])->Indent(1)->Sortkeys(1)->Terse(1)->Useqq(1)->Dump;
}

```

dumper メソッドは便利ですが日本語が含まれるデータでは `\x{1234}\x{5678}` のような表記で
ちょっと困ります。

以下のように Data::Dumper を書き換えて日本語を表示可能にします。

```pl

#!/usr/bin/env perl
use Mojolicious::Lite;
use Encode;
# Documentation browser under "/perldoc"
plugin 'PODRenderer';
{
    package Data::Dumper ;
    no warnings 'redefine' ;
    *Data::Dumper::qquote = sub { return shift } ;
    $Data::Dumper::Useperl = 1 ;
}
say app->dumper({ s => encode("utf8", "あああ")});

get '/' => sub {
  my $c = shift;
  say $c->dumper({ s => "日本語"});
  $c->render(template => 'index');
};

app->start;
__DATA__

@@ index.html.ep
% layout 'default';
% title 'Welcome';
<h1>Welcome to the Mojolicious real-time web framework!</h1>
To learn more, you can browse through the documentation
<%= link_to 'here' => '/perldoc' %>.

@@ layouts/default.html.ep
<!DOCTYPE html>
<html>
  <head><title><%= title %></title></head>
  <body><%= content %></body>
</html>

```


# 参考

http://qiita.com/bunzaemon/items/e309b90cb8791f9d8349