OmniAICreator/Qiita-1.07M huggingface dataset:
curl + 4 通りの方法で Redmine の API 認証を通してみる

[Rest api \- Redmine](http://www.redmine.org/projects/redmine/wiki/Rest_api#Authentication) を参考にし、curl + 4 通りの方法で Redmine の API 認証を通してみた。(利用したバージョンは 3.3.0-1)

## 前提

下記の環境変数を設定した前提。

```
HOST=(あなたの Redmine ホスト名)
USERNAME=(あなたの Redmine ユーザー名)
PASSWORD=(あなたの Redmine パスワード)
KEY=(あなたの Redmine API キー)
```

## BASIC 認証を利用する場合

```
$ curl https://$USERNAME:$PASSWORD@$HOST/issues/12345.json; echo
```

## API キーを利用する場合 (クエリーパラメーター)

```
$ curl https://$HOST/issues/12345.json?key=$KEY; echo
```

## API キーを利用する場合 (HTTP ヘッダー)

```
$ curl -H "X-Redmine-API-Key: $KEY" https://$HOST/issues/12345.json; echo
```

## API キーを利用する場合 (BASIC 認証)

ユーザー名に API キーを指定し、パスワードは適当でいいっぽい。

```
$ curl https://$KEY:hogehoge@$HOST/issues/12345.json; echo
```

## まとめ

比較的新しいバージョンの Redmine で、ドキュメントに掲載されているどのやり方でも API 認証ができることが確認できた。

どれもそこまでセキュアではないけど、HTTP ヘッダーを利用するのが一番マシなんじゃないかと思う。
【Unity】 Xcodeの"Failed to create provisioning profile"エラーをとりあえず解決して実機で動かせるようにする

# はじめに
UnityでiOSビルドしたらXcodeで以下のようなエラーが出たので備忘録を残しておきます。
![0.png](https://qiita-image-store.s3.amazonaws.com/0/44288/801d2366-6391-b6f3-9c10-2192c1a5d803.png)

本記事では、このエラーを解決してiOS実機でアプリを動かすまでの手順をご紹介いたします。

# 環境
macOS Sierra バージョン 10.12.2
Xcode 8.2.1 (8C1002)
Unity5.5.0f3

iOS バージョン9.3.4

# Unity側の設定
まずはUnityのBundle Identifierを設定します。

**STEP1**
Build Settings の "Player Settings..." をクリック
![0.png](https://qiita-image-store.s3.amazonaws.com/0/44288/a3ca7b74-12c2-4a1f-b263-e484fd9fc7dc.png)

**STEP2**
Bundle Identifierがデフォルトでは**com.Company.ProductName**になっているのでこれを変更します。
![1.png](https://qiita-image-store.s3.amazonaws.com/0/44288/57108ea6-5534-94fe-f137-6de069a7041c.png)

<br>
次にXcodeの設定をいじります。

# Xcode側の設定
**STEP1**
Generalタブ
Signing -> Automatically manage singingのチェックを外す
<img width = 450 src = "https://qiita-image-store.s3.amazonaws.com/0/44288/cd02117c-396d-2251-4051-59dc6eae508b.png">
<br>
<br>

**STEP2**
Build Settingsタブ
Singing -> Code Signing Identityの部分をiOS Developerに変更
<img width = 450 src = "https://qiita-image-store.s3.amazonaws.com/0/44288/ce0d9bde-8258-795b-0875-86d2150eaec3.png">
<br>
<br>

**STEP3**
Generalタブ
Signing -> Automatically manage singingのチェックを入れる
Signing -> Teamを選択
<img width = 450 src = "https://qiita-image-store.s3.amazonaws.com/0/44288/bede7988-12bf-f074-63c0-ed9dec324a23.png">
<br>

STEP3を完了すると以下のような画面になってビルド実行できるようになります。
<img width = 450 src = "https://qiita-image-store.s3.amazonaws.com/0/44288/8a2790b6-b6a4-4a42-a498-3af2101dfa03.png">

# iOS端末側の設定 (iOS9)
実行時に以下のようなメッセージが出る場合は実機上の設定を変更する必要があります。
![1.png](https://qiita-image-store.s3.amazonaws.com/0/44288/9f0e70d4-0651-86bc-4276-2d19052f64bf.png)

---

**STEP1**
設定 -> "一般"を選択
<img width = 240 alt="IMG_1317.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/44288/385375c6-689a-2e72-2f05-d66d9236630e.png">

---

**STEP2**
"プロファイルとデバイス管理"を開く
<img width = 240 alt="IMG_1318.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/44288/51810175-a742-fe03-9337-59bc052c3ac8.png">

---
**STEP3**
登録した自分のアカウントを選択
<img width= 240 alt="IMG_1319.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/44288/48eb1edf-96a0-ba95-7d10-8e2de96f86ed.png">

---

**STEP4**
"○○を信頼"を選択
<img width = 240 alt="IMG_1323.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/44288/01fc99ae-3f6e-347a-8abd-ad9bc0d737a2.png">

以上でビルドが通るようになるはずです。
<img width = 200 src = "https://qiita-image-store.s3.amazonaws.com/0/44288/ba8df7af-e728-3b8b-65db-ecb12af3e775.png">



#参考URL
Unity : iOS実機デバッグまでの必要最低限の作業
http://indie-du.com/entry/2016/09/12/200000

[Unity] アプリをiPhone実機上でテストする
https://unity3d.sakura.ne.jp/unity/unity-for-ios.html
macOS Sierra で ActiveRecord sqlite3_adapterのセグフォエラーがでたときの対処

macOS SierraでRailsを立ち上げたときに以下のようなエラーが出ました。
sqlite3_adapterがセグメンテーションフォルトを起こしているようです。

```
/Users/yuji-a/projects/rails-test/vendor/bundle/ruby/2.3.0/gems/activerecord-4.2.6/lib/active_record/connection_adapters/sqlite3_adapter.rb:26: [BUG] Segmentation fault at 0x00000000000110
ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-darwin16]

-- Crash Report log information --------------------------------------------
   See Crash Report log file under the one of following:
     * ~/Library/Logs/CrashReporter
     * /Library/Logs/CrashReporter
     * ~/Library/Logs/DiagnosticReports
     * /Library/Logs/DiagnosticReports
   for more details.
Don't forget to include the above Crash Report log file in bug reports.

-- Control frame information -----------------------------------------------
c:0055 p:---- s:0299 e:000298 CFUNC  :initialize
c:0054 p:---- s:0297 e:000296 CFUNC  :new

```

対応策を調査してみると、すでにGitHubのIssueで解決済みで、新しいバージョンのsqlite3をhomebrewでインストールし、sqlite3のgemも最新のバージョンをインストールすれば治っているようです。

[OS X Sierra sqlite seg fault](https://github.com/rails/spring/issues/493)

以下に私が対応したときのコマンドを共有します。

```
// sqlite3の再インストール。upgradeでも良かったかも
$ brew uninstall sqlite3
$ brew install sqlite3

// railsプロジェクトのルートディレクトリに移動
$ cd ~/rails-project/

// bundlerでインストールされるsqlite3 gem用にオプション指定
$ bundle config build.sqlite3 --with-sqlite3-dir=$(brew --prefix sqlite3)

// bundle configが反映されているか確認
$ cat ~/.bundle/config
2.3.1
---
BUNDLE_BUILD__SQLITE3: "--with-sqlite3-dir=/usr/local/opt/sqlite"

// インストール済みgemを一旦削除。他のディレクトリにインストールしていれば適宜読み替えて下さい
$ rm -rf vendor/bundle/

// 依存gemを再インストール
$ bundle install 

```
Unity で iOS アプリを公開する

# はじめに

* 何度かやっているはずなのに毎回忘れるので備忘のためメモ

# Apple の開発者アカウントの作成

* https://developer.apple.com/programs/jp/ から `登録` で12000円くらいで購入

# Apple の開発者アカウントでログイン

* https://developer.apple.com/account/ とかからログイン

# 証明書の作成

## 開発用証明書の作成

* `Certificates, Identifiers & Profiles` を選択
* `Certificates` を選択
* `+` ボタンから証明書作成開始
* `iOS App Development` を選択して次へ
* 指示の通り `アプリケーション > ユーティリティ > キーチェーンアクセス` を選択
* メニューの `キーチェーンアクセス > 証明書アシスタント > 認証局に証明書を要求`
* メールアドレスだけ入力して `ディスクに保存` して任意の場所に保存
* Apple の開発者サイトに戻りファイルを選択して証明書を作成
* 証明書をダウンロードしてダブルクリックで保存

## 配信用証明書の作成

* 開発用証明書の作成とほぼ同じ
* `Certificates, Identifiers & Profiles` を選択
* `Certificates` を選択
* `+` ボタンから証明書作成開始
* `App Store and Ad Hoc` を選択して次へ
* 指示の通り `アプリケーション > ユーティリティ > キーチェーンアクセス` を選択
* メニューの `キーチェーンアクセス > 証明書アシスタント > 認証局に証明書を要求`
* メールアドレスだけ入力して `ディスクに保存` して任意の場所に保存
* Apple の開発者サイトに戻りファイルを選択して証明書を作成
* 証明書をダウンロードしてダブルクリックで保存

## Identifiers の作成

* アプリごとの ID を作成する
* 開発時には `com.example.*` のようにワイルドカードも使用可能
* `Identifiers` から作成

## Devices の作成

* 開発環境で動かす端末を登録する
* デバイスの UDID を調べておき `Devices` から作成

## Provisioning Profile の作成

* Provisioning Profile は Certificates, Identifiers, Devices を関連付け、ビルド時に指定することでアプリのメタ情報を Apple や関連ソフトウェアに伝える
* `Provisioning Profile` から作成
* 公開用に `com.example.appname` と開発用に `com.example.*` の二つを作る
* 作成後ダウンロードしてダブルクリックでインストール

# App Store にアプリの登録

* Apple 開発者サイトの `iTunes Connect` から App Store に公開するアプリを登録する
* アプリの説明文、アイコン、スクリーンショット画像、連絡先、などを記入してアプリ公開に備える
  * アイコンサイズは 1024x1024
  * スクリーンショットは iPad Pro サイズと iPhone7 サイズのものが必要
    * 実機がない場合にシミュレータでスクリーンショットを撮る方法は後述

# Unity アプリのビルド

* メニューの `File > Build Settings` で `Player Settings` を開く
  * `Product Name` にアプリの表示名を入力
  * `Other Settings > Identification > Bundle Identifier` に `com.example.appname` のようなアプリの識別子名を入力
  * 同 `Version` に `1.0`、`Build` に `0` など任意で入力
* `Build` ボタンで iOS 用のファイル群をビルド
* `{AppName}.xcodeproj` ファイルをダブルクリックで XCode の起動

# iOS アプリの設定

* XCode の左ペインのツリーからトップのアプリを選択
* 中央ペインの `Build Settings` で `Code Signing` の `Code Signing Identity` に作成した開発用と配信用の証明書を指定
* 同 `Provisioning Profile` に作成したプロファイルを選択して指定

# スクリーンショットを撮る

* Unity の `Build Settings` で `Player Settings` から `Other Settings > Configuration > Target SDK` を `Simulator SDK` にして `Build`
* .xcodeproj をダブルクリックで XCode の起動
* 左上のスキーマ設定から任意のシミュレータを選択して実行ボタンでアプリを実行
* シミュレータのメニューで `File > Save ScreenShot` でスクリーンショットを撮る
* アプリを公開用にビルドする際には最初に変更した Unity の設定を `Simulator SDK` から `Device SDK` に変更する

* 実機で動作確認をする

* `Build Settings > Code Signing > Provisioning Profile` に開発用のプロファイルを指定する
* 実機をマックに接続する
* スキーマから実機を選んで実行ボタンでインストールされる

# 公開用にビルドする

* `Build Settings > Code Signing > Provisioning Profile` に公開用のプロファイルを指定する
* `Product > Archive` からビルドを実行
* ビルド後に `Archives` ウィンドウの右ペイン `Upload to App Store` でアップロード
* Apple 開発者サイトからビルドを選択して申請
  * アップロードから反映まで時間がある

# 公開手続き

* iTunes Connect でアプリのビルドを指定する
  * ビルドをアップロードしてから反映されるまでは少し時間がかかる
* `公開を申請` ボタンから申請を行う
* 申請後 Apple によるレビューが行われ問題なければ公開される
* 2017/1/11 現在の自分のアプリの場合の申請から公開(自動公開設定)までのスピード感は以下の通り
  * 1/10 9:00 に申請
  * 1/11 3:00 にレビュー開始 
  * 1/11 4:00 にレビューが通って公開準備状態
  * 1/14 公開日の通知などはなかったが iTunes Connect の "売上とトレンド" のレポートによるとこの日からダウンロードがあった
技術英語 > Python has [a gentle learning curve] that makes you productive sooner, yet it has depths that you can explore as you [gain experience].

@ Introducing Python: Modern Computing in Simple Packages by Bill Lubanovic
(No. 341 / 12833)

> Python has <font color=red>**a gentle learning curve**</font> that makes you productive sooner, yet it has depths that you can explore as you <font color=red>**gain experience**</font>.

最初の段階でどれほどの記憶事項があるかは、その言語を使う上で大きな障害となる場合がある。

基礎をしっかり勉強するには、長時間の忍耐が必要だろう。その忍耐に対しては(1)忍耐と思わない仕組みを作る(習慣化する)、(2)「面白い」と思うものに結び付ける(例: 好きなSFドラマで勉強する)、などの工夫が必要と思っている。

@ 瞬間英作文 by 森沢洋介さん
> 結局、大きな効果を生む方法というのは、何気なくそばにあるものです。それが広く知られていないのは、多くの人は、その方法の変哲のなさゆえに見過ごしてしまい実行しなかったり、効果の出るのに必要な期間継続しないからなのです。
AmimotoにLet's encryptを簡単インストール

WordPressをEC2で使うにはおなじみの高速実行環境[Amimoto](https://ja.amimoto-ami.com/)。

よく使う構成はプロビジョニング時に自動設定できるようになっているので、色々と見てみると便利。
(逆にこれを忘れていると自分で用意した構成を失ってしまったりちゃんと起動しなかったりする可能性も……無いとは言えないかもしれない。多分無い)

そんな構成群については [Launch-with-1-Click/lw1-amimoto](https://github.com/Launch-with-1-Click/lw1-amimoto) を参照。

今回はまっさらな [WordPress Powered by AMIMOTO (HVM PHP7 Ready)](https://aws.amazon.com/marketplace/pp/B01N1NRD82) にLet's encrypt の公式クライアント (certbot) のインストールとNginxのHTTP2有効化を一発でやる。
(といっても設定される証明書は用意されている自己署名証明書なのであしからず)

とりあえずインスタンスを立て、初回プロビジョニングが終わるまで待つ。初回は`yum install`とかあるので数分かかる模様。パブリックDNSにブラウザからアクセスできるようになったら準備OK。

設定した秘密鍵を使ってSSHでインスタンスに接続し、Amimotoの設定ファイルを上書き。

```shell-session
$ cat /opt/local/amimoto.json|jq '. + {"nginx":{"http2_enable":true},"letsencrypt":{"install":true}}| .run_list |=.+ ["recipe[amimoto::nginx_default]"]' > ~/amimoto.json
$ cp ~/amimoto.json /opt/local/amimoto.json
```

sudoでプロビジョニングを実行。

```shell-session
$ sudo /opt/local/provision
```

これでLet's encryptが使えるようになる……！はずだったんだけど無限にcertbotのビルドに時間がかかった。めっちゃCPUクレジット食われる……

失敗したかと思ってやり直しそうになったものの、気長に待てばなんとか終了。

あ、それとNginxのconfファイルを作成する有効にしたので念のため戻しておく。

```shell-session
$ jq '. .run_list|= .-["recipe[amimoto::nginx_default]"]' /opt/local/amimoto.json > ~/amimoto.json
$ cp ~/amimoto.json /opt/local/amimoto.json
```

(jqは便利だ……)

試しに https でインスタンスにアクセスできることを確認する。

ところでAmazon Linuxは OpenSSL 1.0.1系のためALPNが使えずNPNのみなので残念ながら Chrome でHTTP/2が使えない。いい加減どうにかしてくれ〜

`certbot`コマンドへのシンボリックリンクは現状張られていないので`letsencrypt`コマンドを使う。

独自ドメインを使う場合は事前にDNSをインスタンスに向けておくこと。(というかEC2のパブリックDNSではLet's encryptは使えなさそう。ビルド待ちの間にしておけると良さそう。)

```shell-session
$ sudo su -
# letsencrypt auth --webroot -d {your-domain} -w /var/www/vhosts/{instance-id}/
```

初回は登録するメールアドレスとか聞かれる。

Congratulations! のメッセージが表示されていれば成功。

`/etc/nginx/conf.d/default-ssl.conf`の`ssl_certificate`,`ssl_certificate_key`を発行した証明書のパスに書き換え。

```nginx
    ...
    ssl_certificate     /etc/letsencrypt/live/{your-domain}/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/{your-domain}/privkey.pem;
    ...
```

反映させる。

```shell-session
# service nginx reload
```

設定したドメインでhttpsでアクセスして証明書エラーが出ていないことが確認できれば成功。

以後は通常のAmimoto同様に使えば良い。

<img width="308" alt="スクリーンショット 2017-01-10 5.40.31.png" src="https://qiita-image-store.s3.amazonaws.com/0/23997/9f96b720-c693-9b8a-1251-5e107a739d25.png">

----

……CPUクレジット食い過ぎ💢
<img width="551" alt="スクリーンショット 2017-01-10 5.43.33.png" src="https://qiita-image-store.s3.amazonaws.com/0/23997/31be6b40-7f51-7b0b-f460-3e3ef99866ec.png">

めっちゃ時間かかるしCPU食うし簡単というのは看板に偽りしかなかった気もする

普通にやったほうが絶対はやい……

```shell-session
$ cd /tmp
$ sudo yum install python27-pip python27-virtualenv augeas-libs dialog gcc libffi-devel openssl-devel system-rpm-config
$ sudo mkdir /opt/letsencrypt
$ sudo virtualenv /opt/letsencrypt/
$ sudo /opt/letsencrypt/bin/pip install certbot
$ sudo ln -s /opt/letsencrypt/bin/certbot /usr/local/bin/certbot
```
HortonworksによるAzure HDInsightの構築支援

## Azure HDInsightとは
[Azure HDInsight](https://azure.microsoft.com/ja-jp/services/hdinsight/)は、Microsoftが提供するHortonworks Data Platform (HDP)ベースのマネージドビッグデータプラットフォームです。Azureのダッシュボードから、わずか20分程度でHadoop、Spark、HBase、Storm、Kafkaクラスタなどを展開できます。また、ストレージにAzure BlobやAzure Data Lake Storageを利用可能です。時間単位で利用することができるので、簡単なテストから、本番環境での運用にまで、利用することができます。HDInsightとHDPのバージョンについては下記を参考ください。

- [HDInsight の各バージョンで使用できる Hadoop コンポーネント](https://docs.microsoft.com/ja-jp/azure/hdinsight/hdinsight-component-versioning)

HDInsightについての紹介は下記資料が分かりやすいです。

- [Introduction to Microsoft’s Hadoop solution (HDInsight)](http://www.slideshare.net/jamserra/introduction-to-microsofts-hadoop-solution-hdinsight)
- [Hadoop チュートリアル: HDInsight で Linux ベースの Hadoop を使用する](https://docs.microsoft.com/ja-jp/azure/hdinsight/hdinsight-hadoop-linux-tutorial-get-started)

## HortonworksによるAzure HDInsightの構築支援
[Hortonworks](http://jp.hortonworks.com)は、Azure HDInsightの構築支援します。[Hortonworks営業](http://jp.hortonworks.com/contact-sales)まで問い合わせください。また、Hortonworksの支援を受けた場合、下記設定を行ってください。

1. HDInsightのダッシュボードから、[HDInsightパートナー]をクリックし、[現在の HDInsight パートナーの追加/削除]をクリック
<img width="522" alt=" 2017-01-09 12.15.23.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/42406/6d2f3b9d-90ea-7e3f-2c32-53643068c70b.jpeg">

2. [Hortonworksによって私の組織に対して購入前サポートが提供されました。..]をチェックし、OKをクリック
<img width="237" alt=" 2017-01-09 12.15.59.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/42406/52af137f-7a6b-5b6a-77f3-84bb99279114.jpeg">

3. 「HORTONWORKS」が表示されたことを確認
<img width="562" alt=" 2017-01-09 12.19.39.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/42406/97dda199-86e6-8e90-ea80-0244dfa3ce24.jpeg">

4. その後、Hortonworksの担当営業に連絡

---
以上
Unityでキャラクターの視点を動的に90度回転させる方法

##まず
FPSのゲームを作る際，

キー入力で，90度左や右にキャラクターの向きとカメラ（視点）が回転するようにしたいことってありませんか？

しかし，回転が一瞬で行われるようでは，

・操作している側はどっちの方向に回転したのか？

・そもそも回転しているように見えない（どちらかと言うとワープしたように見えてしまう）

といったような見た目上の問題が発生することがただあります．

今回はこの回転を動的（？）に行うことによって，

**操作している側が回転しているんだなとわかる**ようにしてあげたいと思います．

最終的な回転の動きは下のような感じになります．

<img src="https://i.gyazo.com/77c064241cca44ce016b3732d19b054a.gif" />

##コード
回転の部分のコード(抜粋）は以下のようになります．

このコードでは**y軸を主軸**として回転させています．
`playerLeftButton`と`playerRightButton`には回転させるための押すキーを割り当ててください．

```c#:turn.cs
using System;
using UnityEngine;
using System.Collections;

public class WallOfFireDestroy : MonoBehaviour
{
    int wantRotation;
    public float turnTime = 1.0;

    void Start()
    {
        wantRotation = transform.rotation.eulerAngles.y;
    }

    void Update()
    {
        // 左右のキー入力でキャラクターを90度旋回する
        if (Input.GetKeyDown(playerLeftButton))
        {
            wantRotation -= 90f;
        }
        if (Input.GetKeyDown(playerRightButton))
        {
            wantRotation += 90;
        } 
 
        Quaternion want = Quaternion.AngleAxis(wantRotation, new Vector3(0, 1, 0));

        transform.rotation = Quaternion.Lerp(transform.rotation, want, Time.deltaTime / turnTime);
    }
}
```

`turnTime`が**動的に回転させている時間**になります．
Fabricで多段SSHをやる

# Fabricで多段SSHをやる
詳しくないので適切な用語を把握していませんが、
ローカルからサーバー１を経由してサーバー２にログインして操作をしたいときに必要になります。
今回は、AWSでVPC内にパブリックサブネットとプライベートサブネットを用意しており、プライベートサブネットに対してfabricで操作をしたかったのでパブリックサブネット内のinstanceを経由してプライベートサブネット内のinstanceを操作します。

### 前提条件
面倒だったので、ゲートウェイとして扱うサーバーもトンネル先のサーバーも

* 同じ秘密鍵
* 同じユーザー・グループ名

とします。。。

## スクリプト
サンプルなので、`ls -al`だけにします...
host1はパブリックサブネットにおいてあるinstanceのIPアドレスとします。
host2はプライベートサブネットにおいてあるinstanceのIPアドレスとします。

処理対象をいつものhostにし、`env.gateway`にトンネル先のエンドポイントを書きます。**それだけですw**

```python2:fabfile.py
from fabric.api import env, run
from fabric.decorators import task, hosts

# サーバーの設定
env.user = "ユーザー名"
env.group = "グループ名"
env.key_filename = "秘密鍵へのパス"
env.use_ssh_config = True

@task
@hosts("host1")
def sample_task():
    env.gateway = "host2"
    run("ls -al")
```

おわり
Viewportをはみ出た要素をあぶり出す一行JS

##前振り
iOS用サイトマークアップ中にCSS書き方が良くなかったなどの理由で2px程度の横スクロールが発生し、タッチイベントの挙動が気持ち悪くなることがままある。この時の問題点発見が意外としづらくストレスなのでJSにお願いしたい。
##code
`$('*').each(function(){if($(this).width() > $('body').width()){console.log($(this))}});`
Developer Toolsに貼り付ければBodyからはみ出ている要素があればconsoleに表示される
##TODO
毎回幅取得していて無駄、問題ない場合にundefinedになるなどの問題点多々。テストコードなどにしたいところ。

以上です


## jQuery不要バージョン
`document.querySelectorAll('*').forEach(function(el){if(el.clientWidth > document.querySelector('body').clientWidth){console.log(el)}});`
Windowsを使いこなしているか

最近周りの人のWindowsの使い方を見て、なんか使いこなせていんじゃないかと思いつつ、「あのWindows 8はそんなにつかにくかかったか？」という考えにいたり、少し考え直してみた。

なんか当たり前のことを言ってるように思われるかもしれないですが、温かい目で見ていただけるとありがたいです。

# 「検索」が使われていない

Windowsのスタートメニューにある「検索」をみんなあまり使ってないのかなぁ。
あれ便利だと思うんですよね。
Macはあまり使ったことないですが、UbuntuのGUIとかでも同じようなのがあるので、すごく便利だと思っています。

でも、あれを使っている人を見たことがありません（私の周りでは）。

「メモ帳」を開くときのことを考えてみます。
大体の人は、マウスポインタをスタートボタンにあわせて、スタートメニューないからメモ帳を探すのではないでしょうか。

私は、Windowsキーを押して、「メモ帳」または「notepad」と入力して起動します。

マウスを使わないし、指示するときも非常に簡潔です。
このように最近のWindows（正確にはWindows Vistaあたりから）にはスタートメニューに検索機能がついているので、アプリケーションの検索が非常にしやすくなっています。

これを覚えておけば仕事も早くなるはず。

この機能は、ちょっと前の「ファイル名を指定して実行」（Windowsキー＋R）と同じです。

# 私の場合

私は、Windows XP時代から[自作のランチャー](http://www.tom-gs.com/blog/?itemid=191)を使っていました。
ショートカットをつくるだけの簡単な仕組みのランチャーなので、未だにhostsファイルを開いたり、スタートメニューに登録されていないアプリケーションを立ち上げるのに使っているのですが、これが以外に便利なのです。

なぜこんなものを作ったのかというと、できるだけキーボードで操作したかったからです。

その私からすると、ランチャーをメンテナンスする手間が減って本当に楽になったなと思いました。

# Windows 8は本当に使いにくかったか

私はこういう使い方をしていたので、Windows 8にしたところで特に困ることがなかった。むしろ便利になったんじゃね？と思ったぐらいです。

# まとめ

Windowsの便利な使い方を覚えて仕事の効率化を図りましょう。

意外とみんなツールの使い方を知らないことが多いみたいで、結局のところ自分の持っている技術でなんとかなるような場合、新しいツールや使い方を覚えることはないようです。

現代では、ビジネススキルの一つとして、こういう基本的な使い方を、筆記と同じぐらい使えるようになっておくといいのにな、と時々思います。
MongoDBでメモリサイズを1G未満に設定する裏技

MongoDBのマニュアルにはwiredTigerCacheSizeGBという設定項目があり、これを使えばWiredTigerがキャッシュに使うメモリサイズを制限してできるものなのだが、単位がGBであり1GB未満の値は割り当てられない。
しかし裏オプションを使えば、任意の値を指定できるのことを発見してしまったので、紹介する。

## やりかた

「--wiredTigerEngineConfigString」という裏オプションを使って、以下の様にmongodにWiredTigerの設定文字列を直接指定する。

例) 100Mに設定

```
$ mongod --dbpath data --wiredTigerEngineConfigString='cache_size=100M'
```

## 実験

本当に100Mで制限できたか調査してみる。MongoDB 3.4.1を利用した。

まずは、起動直後にmongostatを起動してみる。

```
insert query update delete getmore command dirty used flushes vsize   res qrw arw net_in net_out conn                time
    *0    *0     *0     *0       0     2|0  0.0% 0.0%       0  260M 43.0M 0|0 0|0   211b   44.6k    3 Jan 10 01:17:15.045
    *0    *0     *0     *0       0     6|0  0.0% 0.0%       0  260M 43.0M 0|0 0|0   721b   68.5k    3 Jan 10 01:17:16.045
    *0    *0     *0     *0       0     2|0  0.0% 0.0%       0  260M 43.0M 0|0 0|0   158b   44.6k    3 Jan 10 01:17:17.045
```

物理メモリ量(res)をみるとは最初は43Mであり、これはMongoDB本体が使ってるメモリ量である。

そこでデータを挿入していく

```
insert query update delete getmore command dirty  used flushes vsize   res qrw arw net_in net_out conn                time
    *0    *0     *0     *0       0     6|0  0.0% 0.0%       0  260M 43.0M 0|0 0|0   664b   68.4k    3 Jan 10 01:17:18.045
    *0    *0     *0     *0       0     2|0  0.0% 0.0%       0  260M 43.0M 0|0 0|0   158b   44.7k    3 Jan 10 01:17:19.043
    *0    *0     *0     *0       0     6|0  0.0% 0.0%       0  260M 43.0M 0|0 0|0   664b   68.5k    3 Jan 10 01:17:20.042
 24076    *0     *0     *0       0     2|0  8.1% 21.5%       0  311M 73.0M 0|0 0|0  31.1m   45.8k    3 Jan 10 01:17:21.039
 36009    *0     *0     *0       0     6|0  4.9% 50.2%       0  343M  103M 0|0 0|0  46.6m   70.0k    3 Jan 10 01:17:22.039
 39980    *0     *0     *0       0     1|0  8.4% 85.1%       0  371M  132M 0|0 0|0  51.7m   46.4k    3 Jan 10 01:17:23.039
 39003    *0     *0     *0       0     6|0  3.4% 62.7%       0  381M  142M 0|0 0|0  50.4m   70.2k    3 Jan 10 01:17:24.039
 27936    *0     *0     *0       0     1|0  7.9% 64.6%       0  381M  143M 0|0 0|0  36.1m   45.8k    3 Jan 10 01:17:25.041
 30034    *0     *0     *0       0     6|0  6.8% 81.1%       0  381M  143M 0|0 0|0  38.8m   69.8k    3 Jan 10 01:17:26.040
 35003    *0     *0     *0       0     2|0  6.2% 75.0%       0  383M  144M 0|0 0|0  45.3m   46.2k    3 Jan 10 01:17:27.040
```

すると、どんどん物理メモリ量は増えていくが、143M付近で頭打ちとなった。つまり MongoDB本体のメモリ使用量43M + WiredTigerキャッシュ100M で143Mだ。

うまく動いているようだ。

## さいごに

注意してほしいのは、これは[公式](https://docs.mongodb.com/manual/reference/program/mongod/)にはない裏オプションで、WiredTigerに設定文字列を直接渡すというハックなので、WiredTigerに自信が無い人は本番環境では絶対に使わないでください。私も使いません。
simple_formのplaceholderでfont-awesomeをｊQueryでささっと表示する

個人的なメモ

simple_formのplaceholderにfont-awesomeを表示させるためにCSSにおまじないしても、input_html: => {class: "font-awesome"}みたいなことしても、ブラウザで表示したら`&`が文字化けして`$amp#fX002`とか訳の分からない表示になる。

こんなときは、jQuery使ってplaceholder入れ替えたら早い。
ということで、

```ruby
<%= f.input :email, required: true, autofocus: true, placeholder: "replace to Email",
 input_html: { class: 'font-awesome' }, label: false %>
```

```style
input.font-awesome {
    font-family: FontAwesome;
    font-style: normal;
    font-weight: normal;
    text-decoration: inherit;
}
```
こうして

```html
<div class="email>
  <input placeholder="hoge" ...(他省略)>
</div>

```
```javascript
      $(".email").find("input").attr("placeholder",$.parseHTML("&#61442; Your Email")[0].data)
```


こう。

これでばっちり表示される。

ちなみにコードのチートシート

[チートシート](http://fontawesome.io/cheatsheet/)
Python3+Falconで現在時刻を返すREST API作成

#動機
機械学習を使ったサービスをREST APIで提供するために、
まずは、PythonでREST APIを実装してみる。

#Falcon
PythonのWEBフレームワーク。
マイナーだけど、軽量・高速なのだとか。

[Falconで光速のWeb APIサーバーを構築する](http://qiita.com/icoxfog417/items/913bb815d8d419148c33)
[Python+FalconでWebAPI](http://qiita.com/shoooo/items/85bc0d4052407196bb6b#_reference-86d27db25aeb9b19a727)

#環境
Python 3.5.2
Falcon 1.1.0
Cython 0.24.1 （Python高速化）

pipでインストールできます。

```
pip install falcon
pip install cython
``` 

#ソースコード

```timeapi.py
import json
import falcon
from datetime import datetime

#クラスを作成し処理を記述する
class TimeResource(object):
	#GETメソッド
	def on_get(self, req, resp):

		#メッセージを記述
		dt=datetime.now() #時刻
		msg = {
			"hour": dt.hour,
			"minute": dt.minute,
			"second": dt.second
		}

		#メッセージをjson形式で返す
		resp.body = json.dumps(msg)

#appインスタンス作成
app = falcon.API()
#エンドポイントとクラスを結びつける
app.add_route("/", TimeResource())

if __name__ == "__main__":
	#サーバーを起動する
	from wsgiref import simple_server
	httpd = simple_server.make_server("", 8000, app)
	httpd.serve_forever()
```

#実行

```
http://localhost:8000
```

にアクセスすると

```
{'second': 53, 'hour': 12, 'minute': 1}
```

のように結果が表示されます。
『Python 機械学習プログラミング』を始める準備（for macOS）

# [Python 機械学習プログラミング](http://book.impress.co.jp/books/1115101122) を始める準備（for macOS）
(2017.01.09 OSX El Capitan)

## Homebrew

Homebrew がインストールされていない場合、
http://brew.sh/index_ja.html にしたがって Homebrew をインストール

```
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
```

## Python3

Python3 を Homebrew でインストール

```
brew install python3
```

## numpy, scipy, pandas, sklearn

pip で numpy, scipy, pandas, sklearn をインストール

```
pip3 install numpy scipy pandas sklearn
```

## matplotlib

http://qiita.com/ciela/items/32703d8dc6dd2297cc99 を参考に、
pkg-config, freetype を Homebrew でインストールしてから、pip で matplotlib をインストール

```
brew install pkg-config freetype
pip3 install matplotlib
```

## Sample code

[サンプルコード](https://github.com/rasbt/python-machine-learning-book/tree/master) をダウンロード

## Jyupyter

http://jupyter.org/install.html を参考に、pip で Jupyter をインストール

```
pip3 install jupyter
```

## Jupyter extension

pip で Jupyter の拡張パッケージをインストール

```
pip3 install watermark
```

## Jyupyter の起動

Jupyter の起動は、ターミナルで以下を入力する

```
jupyter notebook
```

## Jupyter の動作確認

ダウンロードした[サンプルコード](https://github.com/rasbt/python-machine-learning-book/tree/master)のフォルダへ移動して、
code/ch02/ch02.ipynb などのファイルを開き、ページ上部のメニューの Kernel タブをクリックして、
Restart & Run All をクリックする
Pythonでコマンドラインツールを作るために調べたメモ

私は仕事でよく行う作業はシェルスクリプトにしています。シェルスクリプトにすることで次のような利点があると思います。

* 作業が自動化されることで作業時間の大幅な削減ができる。
* ケアレスミスによる手戻りを防止できる。
* 類似した作業が増えたときにもスクリプトの追加で簡単に対応できる。

シェルスクリプトでも良いのですが、もっと効率的にスクリプトが書けて、スクリプト自体のデバッグがやりやすくしたいなぁと思っていたところ、友人からPythonを勧められたので、勉強してみました。

## Pythonについての第一印象
PythonはSwiftに似ていると思います。言語機能やライブラリも豊富です。Swiftに似ているのは、Swiftが真似たのだと思いますが。Swiftを知っている人なら、直ぐにPythonは使えるようになると思います。逆も同様で、Pythonを知っている人ならSwiftも直ぐに使えるようになると思います。機能が似ているのに、予約語が違うところは間違いやすいですが。

## 必要なモジュール
自動化したい作業は次のようなことです。

* ファイルコピーや名称変更などのファイル操作
* 定義ファイル（XMLやJSON）などに書かれている値の変更
* productbuild（インストーラビルドするツール）やcodesign（コードサイニングするツール）の実行
* 出来上がったインストーラを入れたディスクイメージの作成

これらをPythonで行うには、「os」「json」「xml.dom」「subprocess」モジュールを使えばできそうな感じです。Pythonはモジュールが豊富に用意されているので、大抵のことは用意されているモジュールの機能を使って記述できてしまうと思います。

今までシェルスクリプトだとハードコーディングしていたものも、コマンドラインツール用に設定ファイルやコマンドラインオプションで指定できるようにして、もっと使いやすくしようという気にさせてくれる言語です。
go-yamlはJSONもUnmarshal出来る

GoでYAMLをパースするときには、[go-yaml/yaml](https://github.com/go-yaml/yaml)を使うのが一般的だと思うんですが、JSONもそのままUnmarshal出来るのにちょっとびっくり。 ソースコードにもJSONの文字列が一切出てこないしあまりにも当たり前に動くので、私が情弱なだけなのかとビビってるんですが :fearful: 一般的に知られてる挙動なんですかね。

```go
package main

import (
	"fmt"
	"gopkg.in/yaml.v2"
)

var (
	jsonval = `{"key-1":"val-1","key-2":2,"key-3":{"key-3-1":"val-3-1"},"4":4}`

	yamlval = `
key-1: val-1
key-2: 2
key-3:
  key-3-1: val-3-1
4: 4
`
)

func main() {
	ret1 := make(map[string]interface{})
	yaml.Unmarshal([]byte(jsonval), &ret1)
	fmt.Printf("%#v\n", ret1)
	// map[string]interface {}{"key-1":"val-1", "key-2":2, "key-3":map[interface {}]interface {}{"key-3-1":"val-3-1"}, "4":4}

	ret2 := make(map[string]interface{})
	yaml.Unmarshal([]byte(yamlval), &ret2)
	fmt.Printf("%#v\n", ret2)
	// map[string]interface {}{"key-1":"val-1", "key-2":2, "key-3":map[interface {}]interface {}{"key-3-1":"val-3-1"}, "4":4}
}
```

## 余談: map[interface{}]interface{} :joy:

go-yamlで、構造体に定義できないYAMLのUnmarshal結果ってmap[interface{}]interface{}になっちゃって扱いづらいんですよね(一応、一階層目だけならmap[string]interface{}を引数に渡せば出来ますが)。

なんですが、yamlとjsonの相互変換を上手くやってくれるパッケージがあって、yamlをUnmarshalした時にmap[string]interface{}に変換してくれる出来る奴で、そのライブラリを眺めてて気づきました。

https://github.com/ghodss/yaml

```go:さっきの奴の置き換えバージョン
package main

import (
	"fmt"
	"github.com/ghodss/yaml"
)

var (
	jsonval = `{"key-1":"val-1","key-2":2,"key-3":{"key-3-1":"val-3-1"},"4":4}`

	yamlval = `
key-1: val-1
key-2: 2
key-3:
  key-3-1: val-3-1
4: 4
`
)

func main() {
	ret1 := make(map[string]interface{})
	yaml.Unmarshal([]byte(jsonval), &ret1)
	fmt.Printf("%#v\n", ret1)
	// map[string]interface {}{"4":4, "key-1":"val-1", "key-2":2, "key-3":map[string]interface {}{"key-3-1":"val-3-1"}}

	ret2 := make(map[string]interface{})
	yaml.Unmarshal([]byte(yamlval), &ret2)
	fmt.Printf("%#v\n", ret2)
	// map[string]interface {}{"key-1":"val-1", "key-2":2, "key-3":map[string]interface {}{"key-3-1":"val-3-1"}, "4":4}
}

```

このライブラリもなかなかマッチョで、go-yamlのラッパーなんですがMarshal時は`json.Marshal -> yaml.Unmarshal -> yaml.Marshal`、Unmarshal時は`yaml.Unmarshal -> json.Marshal -> json.Unmarshal`と何を言っているかわからねぇ状態ですが、JSONのタグやMarshaler等をそのまま流用出来るメリットが有り、kubernetesとかでも使われていてちゃんと動きます。詳しくは[こちら](http://ghodss.com/2014/the-right-way-to-handle-yaml-in-golang/)。

パフォーマンスに関しては、コンフィグのロードとかで起動時に1回呼ばれるとかがメインなら問題にならないでしょう。
TeamGeek から学ぶマネジメント・アンチパターン13選

## はじめに
今更ながらTeam Geekを読んでみたら良かったので、個人的に学びが多いと思った箇所をアンチパターンの形でまとめてみました。自分でやってしまった失敗に関係する内容がメインですが、メンバーとして嫌だなと思っていた部分もあります。

いくばくかのリーダー経験を経て(大半は失敗)、チームで結果を出す難しさと大切さを知った時期に、このような良書に出会えたことを感謝しつつ書きました。現在進行形でリーダーとしての働き方に悩まれている方や、これからリーダーになる方の一助となれば、そしてTeamGeekを手に取るきっかけとなれば幸いです。

## 内容について
冒頭にも書きましたが、以下すべて **"アンチ"** パターンです。(真似しちゃダメってやつですね)

アンチパターンをやってしまうときのリーダーの頭の中を再現して書いてみました。(構成は自分の経験によって再編成しているのでTeamGeekのそれとは少し異なります。)

リーダー初心者の私が解説を書くのはおこがましいと思って、各パターン何が悪いかは書いていませんが「あらゆる人間関係の衝突は、謙虚・尊敬・信頼の欠如によるものだ」というTeamGeekの基本ルールに立ち返れば、各パターンの悪さは感じて頂けると思います。

## マネジメント・アンチパターン13
### 「**"完璧なリーダー"**という幻想」
#### 1. リーダーなのですべてを正しく行おうとする
* リーダーは全てを把握して全てを正しく判断する責任がある
* チーム合意形成や方向性の決定は全て俺がやらないとダメだ。

#### 2. メンバーの相談には的確な答えを返す
* メンバーが相談してきた
* リーダーとして正しい答え返さなきゃ
* よし、時間取って俺が考えてやろう

#### 3. 自分がいないと部署が回らないと感じる
* 元チームのエースで現リーダーの俺はこのチームの要。
* 自分がいないとこの部署は回らない。ああ忙しい。

### 「過度な民主主義」
#### 4. チームの進むべき方向はみんなで決める
* リーダーだからといって方向性を指示するのは良くない
* 方向性を勝手に決められるのが嫌な人もいるだろう
* チーム方針はみんなの意見を取り込む
* そして、メンバーの**"総意"**をもって決定する。

#### 5. ミーティングにはみんな呼ぶ
* 関係者は話聞いて貰いたいし取りあえずみんな呼ぼう
* 除け者にしてるって思われるのも嫌だしな
* 関係ない時間帯はチャットで暇潰ししてくれるだろう
* ミーティングの場にみんながいることが大切なんだ

### 「部"下"は上司のコマという奢り」
#### 6. チームの頭数を揃える
* チームのパフォーマンスが上がらない
* とにかく人が足りない。人を集めよう。
* 頭数いれば分担作業でなんとかなるっしょ！
* 言うこと聞いてくれる人だと助かるな。

#### 7. 仕事は仕事
* リーダーはチームのKPIだけ責任持って伸ばせばいい
* メンバーの個人的な事情などは知らないほうがいい
* 真のプロフェッショナルはそんなこと斟酌しない
* チームの今期の結果が全てを語るんだ

### 「嫌われる勇気を持てない」
#### 8. チームのみんなと友だちになる
* 今まで一緒に同僚として、友人として働いてきた。
* 俺がリーダーになってもみんな仲良くしてくれよな。

#### 9. 叱るときは褒め言葉でオブラートに包む
* 彼のあれ、明らかにミスだよな。今回で何度目だ…。
* ただ、ストレートに叱ると凹むだろう。可哀想だ。
* 褒め言葉でサンドイッチしてオブラートに包んで伝えよう

#### 10. 怠け者に目をつぶる
* あいつ、またニコ動みてる…。
* 能力の問題じゃなくて、明らかに仕事してないな…。
* ただ、直接的に害はないからほっておこう

### 「あるべき姿を描けない」
#### 11. 目標設定は現状の延長
* 正直、未来のこととかわからないよね？
* 目標設定なんて成行きでしか出来ないよね？
* 来季目標はいつものKPIの現状+X%で。

### 「無能で十分説明されることに悪意を見出す」
#### 12. やる気を疑う
* あいつ、ずっとパフォーマンス出てないな。
* 頓珍漢なことばっかりやってるな。
* 仕事のやる気ないんじゃないか？

### 「社内政治への過度な無関心」
#### 13. 必要なら守りの施策にチームの全勢力を注ぐ
* 技術的負債めっちゃ溜まってるわ…。
* 上層部や他チームにどう思われようと何とかしないと！
* 上半期は**"全"**チームリソースを技術的負債解消に使う！

## あらゆる人間関係の衝突は、謙虚・尊敬・信頼の欠如によるものだ
「あらゆる人間関係の衝突は、謙虚・尊敬・信頼の欠如によるものだ。」というフレーズには自らの行いを反省するところが非常に多く、とても痺れました。最後にTeamGeekからその3つの要素の説明を写経させて頂き、本稿を締めたいと思います。

### 謙虚 (Humility)
* 世界の中心は君ではない。
* 君は全知全能ではないし、絶対に正しいわけでもない。
* 常に自分を改善していこう。

### 尊敬 (Respect)
* 一緒に働く人のことを心から思いやろう
* 相手を一人の人間として扱い、その能力や功績を高く評価しよう。

### 信頼 (Trust)
* 自分以外の人は有能であり、正しいことをすると信じよう。
* そうすれば仕事を任せることができる。
macのローカル環境でCapistranoでdeployを試して見る。

# 動機
デプロイツールとしてCapistranoを使ってみたいと思い色々調べてみたのですが、awsやherokuへのデプロイ方法の説明ばかりでサクッとローカル環境で試す方法が見つからなかったので自分で調べて試してみました。

# 準備
ローカルにssh接続できないといけません。
まずはシステム環境設定 → 共有 → リモートログインを許可します。
<img width="660" alt="スクリーンショット 2017-01-09 22.15.12.png" src="https://qiita-image-store.s3.amazonaws.com/0/145608/790cbc77-2765-ac53-b465-17f72bb8e410.png">

設定できたら試しにsshで接続できるか試してみます。

```
$ ssh localhost
```
次に適当なgithubにdeploy対象のレポジトリを作成します。
私は適当にrailsのアプリをローカルで作りリモートのレポジトリにpushしておきました。

# Capistranoの導入
gemfileに下記の物を追加しました。

```
group :development, :test do
	gem 'capistrano'
	gem 'capistrano-bundler'
	gem 'capistrano-rails'
end
```
恐らくrailsでなければcapistrano-railsは不要かと思われます。
参考サイトにもそう書かれていた。
上記の記述を足した後に
```bundle install```
その後に
```bundle exec cap install```
そうするとCapistranoの設定ファイルが出来上がります。

# Capistranoの設定ファイルの編集
config/ → deploy → production.rb に下記を追記します。

```
server "localhost",
   user: "ユーザー名",
   ssh_options: {
     user: "ユーザー名", # overrides user setting above
     forward_agent: false,
     password: "パスワード"
   }
```
ssh接続するときの設定を記述しているのかと思います。
次にconfig/ → deploy.rb に設定を書きます。
私は下記を元々あるファイルに追記しました。

```
set :application, "capistrano"
set :repo_url, "githubの作ったレポジトリ名"
set :deploy_to, "ローカルでデプロイをする場所"
set :keep_releases, 5
```

# deployする
下記のコマンドを実行します。

```
cap production deploy
```
無事に成功すればcurrentのディレクトリとreleaseのディレクトリができれイルかと思います。

# 最後に
Capistranoの記事を色々と読んだのですが手を動かしてないのでうまく理解できませんでした。
でもこれで大まかま流れはわかりましたしローカルで実行できるので色々と試していきたいと思います。
最後に「システム環境設定 → 共有 → リモートログイン」を許可していたかと思いますがこちらはそのまま許可の状態にしないで使い終わったらチェックを外してください。
セキュリティ上よくないので、、、、。
また、初心者ですのでどこか至らない点がありましたらご指摘いただければと思います。
MySQL 文字コード確認

### 1.「クライアント」と「サーバ」の文字コードを確認
文字コード設定は、クライアントとサーバそれぞれ持っている

- 確認コマンド

```mysql:
show variables like '%char%';
```

```mysql:結果
mysql> show variables like '%char%';
+--------------------------+------------------------------
| Variable_name            | Value                       |
------------------------+--------------------------------+
| character_set_client     | utf8                        | クライアント
| character_set_connection | utf8                        | クライアント
| character_set_database   | utf8                        | サーバ
| character_set_filesystem | binary                      | 
| character_set_results    | utf8                        | サーバ
| character_set_server     | utf8                        | サーバ
| character_set_system     | utf8                        |
| character_sets_dir       | /usr/local/mysql/charsets/  |
+--------------------------+-----------------------------+
``` 

| 項目名       | 対象(client/server) | 説明 |
|:-----------------|------------------:|:------------------:|
| character_set_client |client|クライアントがサーバにクエリを送信する際に使用 |
| character_set_results |server|サーバがクライアントにクエリ結果を送る時に使用 |
| character_set_connection |client|クライアントが送ったクエリをサーバが解析する際に使用 |
| character_set_database |server|サーバのデフォルトキャラクタセット。LOAD DATA INFILE文はこの指定が使用される。mysql起動時にcharacter_set_serverの値が適用される。 |
| character_set_server |server|サービス起動時のデフォルトキャラクタセット |
| character_set_system |-|ファイル名をこのキャラクタセットで扱う |
| character_sets_dir |-|キャラクタセットを扱う上で必須となるファイルを配置しているディレクトリ |

### 2.「データベース」「テーブル」「カラム」単位で文字コードを確認

- 確認コマンド

```mysql:

-- databaseの文字コード確認
show create database [database_name]

-- tableの文字コード確認
show create table [table_name];
```

サーバ側の文字コードセットは、データベース、テーブル、カラム単位で指定可能。小さな単位での指定が有効となる。ここでいうとカラムに指定した文字コードが優先されるので、文字化けなどの調査を行う際は、テーブル定義も確認する必要がある。
Thymeleaf with SpringBootでJava8の日時APIを扱う

# 概要

ThymeleafにはJava8の日時APIを操作するUtilityがデフォルトで組み込まれていません。
`thymeleaf-extras-java8time` を組み込んで使用できるようにします。

※ `java.util.Date` や ` java.util.Calendar` は `#dates` や `#calendars` がデフォルトで提供されている

# 前提

- thymeleaf3
- spring-boot1.4
- maven3

# pom.xmlの修正

`thymeleaf-extras-java8time` のdependencyを追加します。

```xml
<dependency>
  <groupId>org.thymeleaf.extras</groupId>
  <artifactId>thymeleaf-extras-java8time</artifactId>
  <version>3.0.0.RELEASE</version>
</dependency>
```

# DialectをDIコンテナへ登録

**※spring-boot1.4.0からDialectをDIコンテナへ登録する設定は不要になりました※**

~~SpringBootで利用可能にするには、DialectをDIコンテナへ登録しておく必要があります。
専用のConfigurationを作って登録しておく例を書いておきます。~~

```java
@Configuration
public class ThymeleafExtrasConfiguration {
    @Bean
    public Java8TimeDialect java8TimeDialect() {
        return new Java8TimeDialect();
    }
}
```

# テンプレートでの呼び出し

下記のように呼び出せるようになります。

`${#temporals.format(hogeDateTime, 'dd/MMM/yyyy HH:mm')}`

# まとめ

1. dependencyを追加する
1. DialectをDIコンテナに登録する
1. テンプレートで使用する

# 参考

 - [thymeleaf-extras-java8time](https://github.com/thymeleaf/thymeleaf-extras-java8time)
 - [ThymeleafとDate and Time API](http://9q6.net/note/thymeleaf-extras-java8time)
MacでAndroidエミュレータを一時休止/再開する方法

Macをバッテリーで動作させながらAndroidアプリを開発する際、Androidエミュレータの電力消費が気になるかと思いますが、エミュレータを一時停止しておけば電力消費を抑えられます。

# 一時休止コマンド
```shell-session
killall -STOP qemu-system-x86_64
```
# 再開コマンド
```shell-session
killall -CONT qemu-system-x86_64
```

休止するとadb installができなかったりエミュレータ上の時計の時刻がズレるのはご愛嬌。
VSTOプロジェクトをコマンドラインでビルド（VS2013対応版）

# はじめに
Visual Studio 2013 Update 5で作ったVSTO Addinのプロジェクトを、Jenkinsを使ってビルド/デプロイできるようにするために、まずビルドサーバ上で手動でコマンド実行してビルドができるようにしてみます。

以下の手順を参考にしました。
How to Build Visual Studio 2010 Office Development Projects with TFS Team Build 2010
https://msdn.microsoft.com/en-us/library/ff624126.aspx

これはTFSでVS2010のVSTOプロジェクトをビルドするための手順ですが、結局はVisual Studioがインストールされていないマシンでビルドできるようにするための手順ですので、今回の内容はこの記事のVS2013対応版という感じです。

ちなみに、私が実際に使用した環境は、ビルドサーバがWindows 7 64bitで、VS2013がインストールされた開発用マシンがWindows 7 32bitになります。

# 手順

## MSBuild 2013のインストール
まずは、Visual StudioのビルドツールであるMSBuildの単体版をインストールします。
https://www.microsoft.com/ja-jp/download/details.aspx?id=40760

## Windows 8.1 SDKのインストール
VS2013に対応するものはこのバージョンっぽいので、こちらをインストール。
https://developer.microsoft.com/ja-jp/windows/downloads/windows-8-1-sdk

## Visual Studio 2010 Tools for Office Runtimeのインストール
2013版はなく、VS2013でも2010版でいいようなので、こちらをインストール。
https://www.microsoft.com/ja-JP/download/details.aspx?id=54251

## Custom Build Tasks/Custom Build Targetsのコピー
VSTOプロジェクト固有のBuild Task/Targetを使えるようにするために、VS2013がインストールされているマシンから、以下のフォルダ/ファイルをビルドマシンの同じパスにコピーします。

- %Windows%\Microsoft.NET\assembly\GAC_MSIL\Microsoft.VisualStudio.Tools.Applications.BuildTasks
- %Windows%\Microsoft.NET\assembly\GAC_MSIL\Microsoft.VisualStudio.Tools.Office.BuildTasks
- %ProgramFiles%\MSBuild\Microsoft\VisualStudio\v12.0\OfficeTools\Microsoft.VisualStudio.Tools.Office.targets
→ビルドサーバの%ProgramFiles(x86)%の方にコピー

targetsの方ですが、おそらくMSBuildの単体版が初期リリースのままで、Update 3以降に対応していないことが原因で、ビルド実行時にSignFileタスクでTargetFrameworkVersionパラメータはサポートされていないというエラーが発生するため、コピー後SignFile要素の中からTargetFrameworkVersionパラメータを指定している行をすべて削除しておきます。

## Visual Studio Tools for Office 2010 Runtime Reference Assembliesのコピー
こちらも単純にファイルコピーでOKです。
%ProgramFiles%\Microsoft Visual Studio 12.0\Visual Studio Tools for Office\PIA
→ビルドサーバの%ProgramFiles(x86)%の方にコピー

## Bootstrapper Packagesのコピー
こちらも単純にファイルコピーでOKです。
%ProgramFiles%\Microsoft SDKs\Windows\v8.1A\Bootstrapper
→ビルドサーバの%ProgramFiles(x86)%の方にコピー

## レジストリの追加
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319\AssemblyFoldersExに以下のサブキーを追加
- サブキー: VS11VSTOCommonPIA 既定のデータ: "C:\Program Files (x86)\Microsoft Visual Studio 12.0\Visual Studio Tools for Office\PIA\Common\"
- サブキー: VS11VSTOOffice14PIA 既定のデータ: "C:\Program Files (x86)\Microsoft Visual Studio 12.0\Visual Studio Tools for Office\PIA\Office14\"
- サブキー: VS11VSTOOffice15PIA 既定のデータ: "C:\Program Files (x86)\Microsoft Visual Studio 12.0\Visual Studio Tools for Office\PIA\Office15\"
- サブキー: VSTO 4.0 Reference Assemblies 既定値: "C:\Program Files\Reference Assemblies\Microsoft\VSTO40\v4.0.Framework\"
キー名がVS12ではなくVS11ですが、VS2013をインストールしたマシンのキー名がこうなっていたので、同じように設定。

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\GenericBootstrapper\12.0というキーを作り、以下のデータを作成します。
- 名前: Path データ: "C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\Bootstrapper\"

いずれの値も、前の手順でファイルをコピーしたパスを正しく設定します。

# ビルドの実行
これで準備はOKなので、実際にビルドをしてみます。ビルドサーバにVisual Studioで作成したソリューションをフォルダごとコピーしてきます。そのフォルダ内で、MSBuildコマンドを実行します。

```
"C:\Program Files (x86)\MSBuild\12.0\Bin\MSBuild.exe" /t:publish /p:PublishDir="c:\publish\\" /p:Configuration=Debug /p:Platform="Any CPU"
```
/t:publishをつけると、発行までいっきにできます。
[アイデア募集🙏] navigationItem.titleViewをnavigationBarと同じサイズで表示する方法 (暫定的)

# navigationItem.titleViewにどんなに大きなframeを設定しても両サイドに8ptのマージンが設定されてしまう

この件の **やや暫定的** な対応方法です。
もっと良い実現方法ご存じの方いたら教えてほしいです😱

```swift

// protocolで実現してもいいと思います。
open class NavigationTitleFullWidthView: UIView {

}

open class MyNavigationBar: UINavigationBar {

  open override func layoutSubviews() {
    super.layoutSubviews()
    items?
      .flatMap { $0.titleView as? NavigationTitleFullWidthView }
      .filter { $0.superview != nil }
      .forEach { titleView in
        titleView.frame = self.bounds
    }
  }
}
```

- UINavigationControllerにMyNavigationBarを使うようにする 
- titleViewをFullWidthにしたい場合 `NavigationTitleFullWidthView` を設定する (サブクラス化しても良い)


```swift
let navigationController = UINavigationController(navigationBarClass: MyNavigationBar.self, toolbarClass: nil)
```

```swift
class MyViewController: UIViewController {

  override func viewDidLoad() {
    super.viewDidLoad()
    
    let titleView = NavigationTitleFullWidthView()
    navigationItem.titleView = titleView
  }
}
```

これでtitleViewはnavigationBarと同じサイズで表示されます。
CakePHP3で、プラグイン付属のTableクラスを差し替える

CakePHPにはプラグイン機能があって、機能を追加する際もやりやすいのですが、状況によってはそのまま追加するとうまくいかないことがあります。

# プラグイン付属のテーブル
プラグイン内部でデータベースを扱う場合に、`Table`クラスを自分で定義することもありますが、中には添付してあることもあります。

自分で作るのであれば、もちろん好きなように構築できます。一方、最初から付いている場合、設定なしで使えるのは便利ですが、テーブルに手を入れようとすると少し面倒なことになります。

ここでは以下のような例を考えてみます。

```
プラグイン名： Jkr2255/SomePlugin
Tableクラス： Jkr2255\SomePlugin\Model\Table\ItemsTable
Tableクラスロード時の名称： Jkr2255/SomePlugin.Items
```

## 差し替え用Tableクラスの用意
すでに`Table`クラスがある場合、それを継承して必要な処理だけ組み込んでしまうのが手っ取り早いです。`App\Model\Table`にでも作っておきましょう。なお、何もしなければ基底クラスが同じ名前になるので、`as`で改名しておいたほうがいいでしょう。

```src/Model/Table/ItemsTable.php
<?php

namespace App\Model\Table;

use Jkr2255\SomePlugin\Model\Table\ItemsTable as BaseItemsTable;

class ItemsTable extends BaseItemsTable
{
  // 上書きする内容は省略
}
```

## TableRegistryの差し替え
`TableRegistry::get`はよく使うと思いますが、`TableRegistry`には他にもメソッドがあります。今回は、`TableRegistry::configure`を使います。

これは、特定の名前に対して対応するクラスを定義するものですが、1つ制約がありまして、「一度Tableクラスがロードされてしまった後には書き換えできない」ということです。もちろんあとからクラスが変わってしまうとうまく動かなくなるからある制約ですが、これを考えれば差し替えは`AppController#initialize`の先頭あたりで行ったほうがいいでしょう。

```app/Controller/AppController.php
public function initialize()
{
    TableRegistry::configure('Jkr2255/SomePlugin.Items', [
        'className' => 'App\Model\Table\ItemsTable'
    ]);

    // 後略
}
```

これを行うことで、`TableRegistry::get('Jkr2255/SomePlugin.Items')`やコントローラー内からの`$this->loadModel('Jkr2255/SomePlugin.Items')`に、自作の`App\Model\Table\ItemsTable`を返すようになります。
iTerm2 で control+tab によるタブ切り替えの順序を変更


デフォルトだと `control+tab` で直前のタブに移動するので、隣のタブに移動するように変更。

設定画面を開いて（`command+,`）次の赤枠のところをこのように変更：

![スクリーンショット 2017-01-02 20.58.46.png](https://qiita-image-store.s3.amazonaws.com/0/155820/ba69445b-5c08-37d8-1819-6952014a975f.png "スクリーンショット 2017-01-02 20.58.46.png")
homekitのServiceの画面を確認したい

[homebridgeプラグイン作成入門](http://qiita.com/tamaki/items/cf6a09729534eae8f24b)で書かれているServiceがiPhoneでどう表示されるのか？を確認する方法を探ったところ、Simulatorがあるようで。
その導入方法です。

## 環境
- iPhone 6S iOS Version 10.2 (14C92)
- Macbook macOS Sierra Version 10.12.2
- Xcode Version 8.2.1 (8C1002)

**Apple Deployment Programs を登録した Apple ID**が必要です。

## HomeKit Accessory Simulatorを導入方法
1. [リンク](https://developer.apple.com/download/more/?=for%20Xcode) or Xcode の [Open Developer tool] → [More Developer Tools...]を開く
2. Additional Tools for Xcode 8.2 をダウンロード
3. Hardware ディレクトリにある Simulator を `/Applications` にコピー

## Accessory の設定
1. HomeKit Accessory Simulatorを起動
2. window下部の[Add Service...]から任意のServiceを追加
3. window右上のBLEをON

その後、iPhoneからAccessoryを追加することでServiceに対応するActionを確認することができます。

これでIRKitからエアコンの温度を調節するために適切なServiceを確認できますね！

## ref
[Enabling HomeKit](https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/HomeKitDeveloperGuide/EnablingHomeKit/EnablingHomeKit.html#//apple_ref/doc/uid/TP40015050-CH2-SW3)
[Testing Your HomeKit App](https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/HomeKitDeveloperGuide/TestingYourHomeKitApp/TestingYourHomeKitApp.html)
RLOで遊ぶ

### 概要
　RLOとは，Right-to-Left Overrideの略語であり，ファイルの拡張子偽装でよく用いられる方法です．実際に悪性(?)の実行ファイル"pacfdp.exe"を"pacexe.pdf"に偽装します．ただし，悪性の実行ファイルはマルウェアでないので，そこのところはご注意ください．

# まず実行ファイルをつくる
　実装するのは，時間をカウントしてコンソール状に文字列を標準出力するコードです．何も知らない人からしたら，悪性のコードに見えるかもしれませんが，特にC&Cサーバと通信しているわけでもないので問題ありません．例なので，幼稚なコードですがご勘弁ください．

```C:test.c
#include <stdio.h>
#include <unistd.h>
#include <sys/time.h>
#include <windows.h>

int main(void) {
	unsigned int usecs = 2000;
	printf("Hello Virus\n");
	Sleep(usecs/2);
	printf("ダウンロード中....");
	Sleep(usecs);
	printf("[完了]\n");
	printf("インストール中....");
	Sleep(usecs);
	printf("[完了]\n");
	printf("実行しました...");
	Sleep(usecs);
	printf("[進行中]\n");
	return 0;
}
```

次のようにコンパイルして実行します．

```
C:\Users\Sheltie> gcc test.c
C:\Users\Sheltie> a.exe
Hello Virus
ダウンロード中....[完了]
インストール中....[完了]
実行しました....[進行中]
```

# 実行ファイルの拡張子を偽装する
　さっきのバイナリ"a.exe"を次のようにリネームします．
 
+ メモ帳を開き、「pac」（なんでもいい）と入力します．
+ エディタ上で右クリック→Unicode制御文字の挿入→RLOをクリックします．
+ 「pac」の続きから「fdp.exe」と入力すると，pacexe.pdfと表示されます．
+ さっきのバイナリ"a.exe"を右クリックして名前の変更から
メモ帳の文字列をコピーして貼り付けると，「pacexe.pdf」と表示されます．

# pacexe.pdfをダブルクリックすると...

![table1](https://cl.ly/2t1U2u1M2737/malmal.JPG)


# 後はアイコンを偽装すればいいのだが...
dirコマンドでコンソールに標準出力させると，ウソがバレます．
![table1](https://cl.ly/2p0K23150f3b/cmd-cap-mal.JPG)


# おわりに
遊んだだけなので，悪いことには利用しないようにしましょう．こういう風になってたんだと古典を鑑賞するかのように読んでいただければ幸いです．
Zabbixでgroup replication準備

できるだけgroup replicationを組んでからZabbixのデータを流して下さい
再構築したほうが安全です。
構築済みに導入したところ
`ERROR 3096 (HY000): The START GROUP_REPLICATION command failed as there was an error when initializing the group communication layer.`
が出て解決方法がちょっと
まだ会社の本番で使ってないので自己責任でお願いします。

#スキーマインストール
いきなしコケます。
理由はschema.sqlでdbversionにインサートが走るのですが
dbversionにはPRIMARY KEYが存在しません。
`ERROR 3098 (HY000): The table does not comply with the requirements by an external plugin.`
とりあえずschema.sqlでdbversionへのインサートをコメントアウトして流しましょう
その後にdbversionにPRIMARY KEYを付けます。

```
# vi schema.sql
- INSERT INTO dbversion VALUES ('xxx0000','xxx0000');
+ #INSERT INTO dbversion VALUES ('xxx0000','xxx0000');
# cat schema.sql | mysql -uroot -p zabbix
# mysql -uroot -p zabbix
> ALTER TABLE dbversion ADD PRIMARY KEY (mandatory) ;
> INSERT INTO dbversion VALUES ('xxx0000','xxx0000');
> exit
```

images.sql、data.sqlも必要な場合は普通に流せます。

#本番動作
history、history_str、history_uintにPRIMARY KEYがないのでこれまたコケます。
方法として2つあります。

##1. 互換性を考慮して3複合キーのPRIMARY KEY
互換性があるもののインサートコストが高くなります。3台以上に推奨
参考
http://www.rack.sh/zabbix-partitioning-1/
実データを検証機に突っ込んでALTER　TALBLEしたところ弊社の環境では70分ほどかかりました。

```
DROP INDEX `history_1` ON `history`;
ないしはDROP INDEX `history` ON `history`;
ALTER TABLE `history` ADD PRIMARY KEY (`itemid`, `clock`, `ns`);
DROP INDEX `history_str_1` ON `history_str`;
ないしはDROP INDEX `history` ON `history_str`;
ALTER TABLE `history_str` ADD PRIMARY KEY (`itemid`, `clock`, `ns`);
DROP INDEX `history_uint_1` ON `history_uint`;
ないしはDROP INDEX `history` ON `history_uint`;
ALTER TABLE `history_uint` ADD PRIMARY KEY (`itemid`, `clock`, `ns`);
```

##2. サロゲートキーを付ける
互換性がなくなるものインサートコストが安くなります。
`group_replication_single_primary_mode= off`の状態だと
飛び飛びでオートインクリメントが発番されるので非推奨
データを検証期に突っ込んでALTER　TALBLEしたところ弊社の環境では120分ほどかかりました。

```
ALTER TABLE `history` ADD COLUMN id INT NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY(id)
ALTER TABLE `history_str` ADD COLUMN id INT NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY(id)
ALTER TABLE `history_uint` ADD COLUMN id INT NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY(id)
```
CircleCIのテストでRedisを使う

CircleCIのデフォルトイメージ（Ubuntu 14.04）では、Redisはインストールされているが起動していない状態。`circle.yml`に以下を追加すれば、テストでRedisを使うことができる。

```circle.yml
machine:
  environment:
    REDIS_URL: redis://localhost:6379
test:
  pre:
    - sudo service redis-server start
```
メモ：ViewやViewGroupのonLayoutやonMeasureの呼ばれる順番

FrameLayout中にViewを１つだけ入れた時の呼び出し順序の確認。
Nexus 5でonMeasure、onLayout、layoutメソッドの始めと終わりにログを仕込んだ時の結果。

- MyFrameLayout: begin:onMeasure(widthMeasureSpec=1073742904,heightMeasureSpec=1073743216,wMode=1073741824,hMode=1073741824,wSize=1080,hSize=1392)
  - MyView: begin:onMeasure(widthMeasureSpec=-2147482664,heightMeasureSpec=-2147482352,wMode=-2147483648,hMode=-2147483648,wSize=984,hSize=1296)
  - MyView: end:onMeasure
- MyFrameLayout: end:onMeasure
- MyFrameLayout: begin:onMeasure(widthMeasureSpec=1073742904,heightMeasureSpec=1073743360,wMode=1073741824,hMode=1073741824,wSize=1080,hSize=1536)
  - MyView: begin:onMeasure(widthMeasureSpec=-2147482664,heightMeasureSpec=-2147482208,wMode=-2147483648,hMode=-2147483648,wSize=984,hSize=1440)
  - MyView: end:onMeasure
- MyFrameLayout: end:onMeasure
- MyFrameLayout: begin:onLayout(changed=true,left=0,top=0,right=1080,bottom=1536)
  - MyView: begin:layout(left=48,top=48,right=1032,bottom=1488)
     - MyView: begin:onLayout(changed=true,left=48,top=48,right=1032,bottom=1488)
     - MyView: end:onLayout
  - MyView: end:layout
- MyFrameLayout: end:onLayout
- MyFrameLayout: begin:onMeasure(widthMeasureSpec=1073742904,heightMeasureSpec=1073743360,wMode=1073741824,hMode=1073741824,wSize=1080,hSize=1536)
  - MyView: begin:onMeasure(widthMeasureSpec=-2147482664,heightMeasureSpec=-2147482208,wMode=-2147483648,hMode=-2147483648,wSize=984,hSize=1440)
  - MyView: end:onMeasure
- MyFrameLayout: end:onMeasure
- MyFrameLayout: begin:onLayout(changed=false,left=0,top=0,right=1080,bottom=1536)
  - MyView: begin:layout(left=48,top=48,right=1032,bottom=1488)
     - MyView: begin:onLayout(changed=false,left=48,top=48,right=1032,bottom=1488)
     - MyView: end:onLayout
  - MyView: end:layout
- MyFrameLayout: end:onLayout


### モード
- AT_MOST : -2147483648 (0x80000000)
- EXACTLY : 1073741824 (0x40000000)
- UNSPECIFIED : 0
Windows10でロックするには

電源マークのとこになくて探しきれなかったのでメモ

- Windowsキー > プロフィール > ロック
- <kbd>Win</kbd>+<kbd>L</kbd>

上のどちらでもロックできます。


![image](https://qiita-image-store.s3.amazonaws.com/0/98466/1bf0df02-2ecd-5c23-feea-fe24dfad1fcf.png)
【VBA】オートシェイプの作成


AddShapeメソッドを使用して、オートシェイプの追加をコードでできます。

````構文
object.Addshape Type,Left,Top,Width,Height
````

ただ、Typeで設定可能な定数は多くて、なかなか覚えてられません。。。
備忘録として、私がよく使うものを一覧でまとめようと思います。

| msoShapeRectangle                      | 四角形                     |
|----------------------------------------|----------------------------|
| msoShapeFoldedCorner                   | メモ                       |
| msoShapeRectangularCallout             | 四角形吹き出し             |
| msoShapeRoundedRectangularCallout      | 角丸四角形吹き出し         |
| msoShapeLineCallout1                   | 線吹き出し１（枠付き）     |
| msoShapeLineCallout1BorderandAccentBar | 強調線吹き出し１（枠付き） |
| msoShapeBalloon                        | 角丸四角形吹き出し         |