OmniAICreator/Qiita-1.07M huggingface dataset:
Redmineを使い始めるシリーズ（4）ワークフローを見直す 

チケットの種類を決めるもう一つの設定。

### ワークフロー
それはチケットが完了するまでの流れを決める。

ワーク＝仕事、フロー＝流れ。
フローチャートや状態遷移、アクティビティとイメージは一緒。
つまり、チケットの処理の流れ、状態の流れ、更新する順序。
で、誰が、何を、どうすると流れていくのか。

でもRedmineは、DFDやERのように図で入力できるわけではない。
では、どうやってフローを表す、設定するか、と言うと。

右上メニュー
管理＞ワークフロー＞編集
を見ると。

先行（縦列、現在のステータス）と後行（横列、遷移できるステータス）のマトリクスが出てくる。

* 新規
* 進行中
* 解決
* フィードバック
* 終了
* 却下

**先行が後行のどれに遷移できるか、チェックボックスで設定。これによって、ワークフローを制御できる。**

例えば、
開発者は、新規のチケット（先行）を、進行中、解決、フィードバック、終了のステータス（後行）に変更することができる。

そして、このマトリクスがユーザーのロール毎にある。
ロールよってステータスの遷移を個別に設定できる。

例えば、
チケットの終了する権限を管理者だけにするとか、

トラッカーによってステータスの遷移を制限できるため、例えば、ベンダ問い合わせなどのインシデント管理は、バグとは異なるステータスへ遷移する運用もできる。運用も可能。

次は[ウォッチャーと閲覧者 ](http://qiita.com/ihopeyoufunit/items/f1a8c58b4a3a70966fb9)
CentOS 6.x の日本語化

CentOSを日本語化するための手順を記載します

## 環境
・CentOS 6.x 

## 前提
・root権限を持っている
・vi コマンドが利用できる

## 日本語化
CentOS 6をインストールするとこのような英語メニューになります

![01.png](https://qiita-image-store.s3.amazonaws.com/0/104535/4276e450-df67-0362-1396-dc7becefecc0.png)

画面の余白（ブルーの箇所）で、マウスを右クリックし、
メニューから（Open in Terminalを選択して）ターミナルを起動します

![02.png](https://qiita-image-store.s3.amazonaws.com/0/104535/49baea94-a298-0220-fbdd-9856cb48d339.png)

root にスィッチし、以下のコマンドを入力します

なお日本語キーボードを利用している方は、OS上キーボードがまだ英語モードなので
　"（ダブルクォーテーション）は「Shift + 2」を押しても挿入できません
（私の環境では @ になりました... in VMWare Fusion on MBA Japanese KeyBoard）

"（ダブルクォーテーション）は、「shift + :（コロン）」で入力します
もし入らなければ、適当に文字を打って探します

```bash
$ su
Password:
# yum -y groupinstall "Japanese Support"
```
![03.png](https://qiita-image-store.s3.amazonaws.com/0/104535/7a5e3660-d6b9-9ad8-e433-d0bdfe02c381.png)

日本語化パッケージのインストールが開始されます

![04.png](https://qiita-image-store.s3.amazonaws.com/0/104535/bf79a8e3-792a-b891-969f-656361d85d6a.png)

Complete! が出たらインストールは完了です
次に、スクリーンとキーボードの日本語化をおこないます

```bash
# vi /etc/sysconfig/i18n
```

![05.png](https://qiita-image-store.s3.amazonaws.com/0/104535/79c5ec2b-14f0-0fde-b06d-65b577d6c96c.png)

![06.png](https://qiita-image-store.s3.amazonaws.com/0/104535/0a9af790-c637-2cb0-0a7c-b58bdc90f3c0.png)

LANGが ```en_US.UTF-8``` を ```ja_JP.UTF-8``` に変更し保存します
:（コロン）は、「Shift + ;（セミコロン）」で入力できます

![09.png](https://qiita-image-store.s3.amazonaws.com/0/104535/99cf000f-0967-d926-81ee-311477285a76.png)

日本語キーボードを利用している場合は、続いて以下を実施します

```bash
# vi /etc/sysconfig/keyboard
```
![14.png](https://qiita-image-store.s3.amazonaws.com/0/104535/c30ba705-f5da-88b0-43eb-96b91d3eab6a.png)

KEYTBLE と MODEL と LAYOUT を以下のように変更します

```bash
KEYTABLE="jp106"
MODEL="jp106"
LAYOUT="jp"
KEYBOARDTYPE="pc"
```
![17.png](https://qiita-image-store.s3.amazonaws.com/0/104535/3fffdb31-10c2-569e-ca53-d0d32a92714d.png)

保存後、マシンをリブートします

![19.png](https://qiita-image-store.s3.amazonaws.com/0/104535/2ab22929-6a22-9f18-3b77-b3f6b5cb5d41.png)

再起動後、ログインすると以下ダイアログが表示されます
「次回から表示しない」にチェックし、希望のボタンを押下します

 *私は日本語ディレクトリ名が好きじゃないので「古い名前のままにする(K)」にしています*
 *ここで日本語ディレクトリにすると mv コマンドで簡単に英語名に戻せないので注意が必要です*

![20.png](https://qiita-image-store.s3.amazonaws.com/0/104535/b16d1a9a-6017-dfed-cd53-d43d68e24dcc.png)

メニュー含め、日本語化されてることを確認します

![21.png](https://qiita-image-store.s3.amazonaws.com/0/104535/b48fd564-7d94-6600-20f5-2eb284f24a81.png)

ターミナル（端末）を開き、キーボードが日本語化されているか確認します

![23.png](https://qiita-image-store.s3.amazonaws.com/0/104535/5430aa29-737a-2023-0332-4a79f741c000.png)

先ほどまで入力できなかった、コロンとかイゲタとかビックリとか入れてみます

![24.png](https://qiita-image-store.s3.amazonaws.com/0/104535/759d41e7-f32b-9065-aa2c-52ce049770ab.png)

以上です
Redmineを使い始めるシリーズ（3）フィールドはカスタマイズすべし 


Redmineを使い始めるシリーズ（3）フィールドはカスタマイズすべし 

### フィールドはフォーマット
初期のトラッカーは3種類（バグ、機能、サポート）あるが、いずれも同じく以下のフィールドが標準で準備されている。
ので標準フィールドと呼んでいる。

* 担当者
* カテゴリ
* 対象バージョン
* 親チケット
* 開始日
* 期日
* 予定工数
* 進捗率

つまりこれらは**チケットなどに記入する項目、つまりフォーマット（英語的にはTemplate）として標準的にある項目**、と言い切ってもよい。

例えて言えば・・・、
役所に提出する書類の定型項目イメージだと
住所、氏名、生年月日・・・のような。

住所だと都道府県はリストから選択、それ以下は直接入力とか
氏名だと直接入力、とか
生年月日だと昭和、平成はボタンチェック、28年はリスト選択、とかとか

標準フィールドは、日本語で直感的に意味は分かる。
唯一不明瞭なのがカテゴリかな～。
カテゴリはそのチケットを分類する・・・って、あれ？
チケットの種類がトラッカーと言いながら、カテゴリも分類って混乱する言葉使いじゃない。

### フィールドの項目は検索/ソートのキーと思えばOK
ということで、ここも言い切るとフィールドの項目はチケットなどをソート、検索する時のキーと思えばOK。

つまり、担当者でソート、開始日で検索とか。
同じようにカテゴリーもソートや検索のキーとして設定を考えればOKだし、次のカスタムフィールドでいくつでも新たに作成できるので、敢えてこの標準フィールドのカテゴリーではなくても良いかも。
逆に全てのプロジェクト、チケットなどに共通するカテゴリーって、担当者や期日などと違い決めるの難しいので。

### フィールドカスタマイズ
当然、プロジェクトは現場ごとに異なりフォームは千差万別。
課題管理表、バグ管理一覧、テスト実施簿・・・

となると、標準フィールドでいらないのもあるし、足りないのもあるし。
ってことで、ここでカスタマイズが登場。

右上メニュー
管理＞カスタムフィールド＞新しいカスタムフィールドを作成
で、
(●)チケット
(　)作業時間の記録
(　)プロジェクト
(　)バージョン
・・・・

のチケットにチェック(●)を入れ、次へ

* 書式は、テキストやリスト・・など
* 名称は、新しく追加するフィールドの名前

・・・でチケットに入力やリスト選択する項目が追加されフォームとして完成。

現在のPJで設定している例だと、
Classfication---PM, Infrastructure, Application, Operation
国内海外
Meeting---課題MTG, Operation Weekly, IT Weekly
Request Status
Region---APAC, EMEA, US, Japan
Category
In Charge
Group

適宜お好みで。

なおカスタムフィールドは、作業時間の記録やプロジェクト、ユーザ登録などページにも追加できるので、例えばユーザだと「チーム」というカスタムフィールドを作成し、開発、テスト、運用、PMOとかチーム単位をキーとする項目を追加することもできる。

なお、既にチケット用に作成したフィールドは、作業時間の記録、ユーザなどに後から振り向けられないので、新たに同じようなカスタムフィールドを作成が必要。

これでチケットのフォームが決まったので、
次は[ワークフローを見直す](http://qiita.com/ihopeyoufunit/items/b03df6f32e7ae719acf2)へ
USBデバイスのVendor ID、Product ID等を調べるには

USBデバイスを開発中に、Vendor ID、Product ID等のディスクリプタが正しくPCに認識されているか調べるには。

# やりかた

## Windowsの場合
Microsoft提供のusbview.exeが便利。
![1.png](https://qiita-image-store.s3.amazonaws.com/0/95394/ef61382d-3c6b-628f-2dbc-a8458b52ce0a.png)


WDK(Windows Driver Kit)にソースコードが付属しており、[GitHub](https://github.com/Microsoft/Windows-driver-samples/tree/master/usb/usbview)にも公開されている。

自分でビルドするのが面倒な場合は、[FTDI社のページ](http://www.ftdichip.com/Support/Utilities.htm#MicrosoftUSBView)でexeが公開されている。


## Linuxの場合
```
$ lsusb
```
で表示できる。`-v`をつけると詳細も出せる。
![2.png](https://qiita-image-store.s3.amazonaws.com/0/95394/cdd9ff1c-76f0-1cfb-a0ec-e37a75fd1d34.png)

# 参考文献
http://blogs.msdn.com/b/jpwdkblog/archive/2009/03/24/usbview.aspx
Git for WindowsのシェルからPageantでSSH


Windows上からGitを使う場合に「[Git for Windows](https://git-for-windows.github.io/)」という環境がありますが、このコマンドライン環境からWindowsのPageantにある鍵を使ってSSHを行うことができます。

# Windows上のUnixコンソール
Windows上で動くUnix環境を構築したい場合、メジャーなものとしては2つの選択肢があります（なお、Unix環境を構築したいだけなら「VMを立ち上げる」という選択肢もありますが、Windows上で直接動くわけではありませんのでここでは除外します）。両者は方向性が大きく違っています。

## Cygwin
[Cygwin](https://www.cygwin.com/)は、「Windows上でPOSIXを再現する」ことを主眼に置いて開発されています。そのため、Unix向けのソースコードをそのままで実行できることも多いですが、それを実現するためのライブラリは大きなものとなっています。

## MinGW/MSYS
MSYSが「Minimal SYStem」の略だということからも伝わるように、プログラム開発に当たって最低限のツールだけを移植していて、あとはWindowsのコードをそのまま使うようになっています。

Git for Windowsもコンパイラなどは付いていませんが、MSYSをベースとしたUnixライクなコンソール環境を用意しています。

# Pageantとは
[以前の記事でも触れました](http://qiita.com/jkr_2255/items/6927758094c3078e62c5#%E9%8D%B5%E3%82%A8%E3%83%BC%E3%82%B8%E3%82%A7%E3%83%B3%E3%83%88%E3%81%A3%E3%81%A6)が、SSHの秘密鍵を管理するためのツールがあって、「鍵エージェント」と呼ばれています。Windowsでよく使われる鍵エージェントとしてPageantがあって、発祥元のPuTTYはもとより、TeraTermやSourceTree、WinSCPなど、SSH/SCP/SFTPといったプロトコルを扱うWindows用ソフトウェアの多くで扱えます。

CygwinでバリバリのUnix環境を構築するというのであれば、Cygwin内に鍵エージェントを持てばいいのでしょうけど、Windowsでもそこそこ鍵を使う、あるいはWindowsで使うのがメインで、Git for Windowsを使う程度、となればそのためだけに両方で鍵のセットアップをするというのも面倒だし管理もしきれなくなってきます[^1]。

そこで登場するのが、Pageantの鍵をCygwin/MSYS環境に中継するエージェント、[cuviper/ssh-pageant](https://github.com/cuviper/ssh-pageant)です。

# 実行ファイルのインストール
## ふつうのCygwin/MSYSの場合
どちらでも、インストーラから入れられるパッケージの中に、最初から`ssh-pageant`が用意してあります。Cygwinなら`setup.exe`なり適当なラッパーから、MSYSなら`pacman`経由でインストールできます。

## Git for Windowsの場合
Git for WindowsはあくまでGitを動かすため「だけの」環境なので、追加パッケージをインストールできるようにはなっていません。しかも、どういうわけか[バイナリリリース](https://github.com/cuviper/ssh-pageant/releases)としてもCygwinの32/64ビット、MSYSの32ビットはあるのに、なぜか**MSYSの64ビット版が見当たりません**でした。仕方がないので、MSYS2をインストールして`pacman`で`ssh-pageant`を入れて、そこから`ssh-pageant.exe`だけ取り出すという、実に富豪的な手段を取りました（パッケージマネージャーで落としてこれる以上、`ssh-pageant`だけをどこかでダウンロードできるとは思うのですが）。

# シェルへのインストール
Unix系にネイティブな`ssh-agent`であれば、シェルの操作状況に応じてオンオフすることもあるとは思います。それに対して、`ssh-pageant`はあくまでPageantへの中継役に過ぎず、これに直接鍵設定をすることもありません。基本的には`.bash_profile`に書いて起動させっぱなしでいいでしょう（1つ常駐していればいいので、[.bash_profileのほうが適当です](http://qiita.com/magicant/items/d3bb7ea1192e63fba850)）。設定は、GitHubに書いてあるように、

```bash:~/.bash_profile
eval $(/usr/bin/ssh-pageant -r -a "/tmp/.ssh-pageant-$USERNAME")
```

こうするだけです。あとはBashを立ち上げ直せば、「ssh-pageant pid ****」のように出て、セットアップ完了です。あとはGitやSSHでPageantの鍵を使えます。


[^1]: 個人的な事情ですが、[スマートカード対応のPageant](http://qiita.com/jkr_2255/items/6927758094c3078e62c5)を使っているので、GitのMSYS環境で同等なものを構築するのはかなり面倒、ということもありました。
'Deploy to Heroku' Buttonを追加してみた


## 'Deploy to Heroku' Button とは

<https://devcenter.heroku.com/articles/heroku-button>

- GitHub リポジトリの README ファイルに設置するボタンで、これを押すだけで Heroku のサーバに該当リポジトリのコードをデプロイできます。

![Deploy to Heroku](https://www.herokucdn.com/deploy/button.svg)

- 仕組み的には、デフォルトでは、リンク先 (つまり Heroku 側) がHTTPヘッダの `referer` を参照 (そこにはつまり GitHub リポジトリのURLが入ってるんですが)、そこにある app.json を見に行ってアプリのメタ情報を確認、ユーザに必要な情報を入力してもらい、Gitコードを展開という流れです。

### app.json

<https://devcenter.heroku.com/articles/app-json-schema>

- `app.json` には、アプリのメタ情報を記載します。
- 特に以下の2つは重要です。
   - `env` : 環境変数。ここで書いておくと、アプリ作成時に入力欄が出てくる
      - `value` に値を設定しておくと、フォームにデフォルト値として表示される
   - `addons` : アドオン。ここで書いておくと、デプロイ時に自動でアドオンが追加される

```JSON:app.json
{
  "name": "アプリ名",
  "description": "アプリの説明",
  "keywords": [
    "XXX",
    "YYY",
    "ZZZ"
  ],
  "repository": "https://github.com/xxx/xxx",
  "logo": "https://raw.githubusercontent.com/xxx/xxx/master/logo.png",
  "env": {
    "HUBOT_HEROKU_KEEPALIVE_INTERVAL": {
      "description": "hubot-heroku-keepalive interval.",
      "value": ""
    },
    "HUBOT_HEROKU_KEEPALIVE_URL": {
      "description": "hubot-heroku-keepalive URL.",
      "value": ""
    }
  },
  "addons": [
    "heroku-redis:hobby-dev",
    "scheduler:standard"
  ]
}
```

### README

- README への追加は簡単！下記のようなコードを追加するだけです。

```Markdown:README.md
[![Deploy](https://www.herokucdn.com/deploy/button.svg)](https://heroku.com/deploy)
```

### template パラメータ

- 例えば、private な GitHub repository の場合、`referer` 情報は渡されず、上記の仕組みが使えない・・・
- そんな場合は、以下のようにボタンのリンク先に `template` パラメータを渡し、明示的にリポジトリのURLを指定してあげます。
- なお、`template` パラメータ以外にも、上述の環境変数のデフォルト値などもパラメータとして渡してあげることができるみたいです。環境別のデプロイボタンを作ってあげるとかができそうですね。

```Markdown:README.md
[![Deploy](https://www.herokucdn.com/deploy/button.svg)](https://heroku.com/deploy?template=https://github.com/xxx/xxx)
```

### ボタン画像

- ボタン画像は、なんだっていい (テキストリンクであってもいい) はずですが、Heroku がオフィシャルに使える画像を用意してくれてます
- 以下のいずれかを使いましょう
   - https://www.herokucdn.com/deploy/button.png
   - https://www.herokucdn.com/deploy/button.svg


## 所感

- Heroku へのデプロイって癖があってちょっと面倒ですが、このボタンさえあれば簡単にできて、便利ですね！！
Redmineを使い始めるシリーズ（2）トラッカーはどうする？

プロジェクトが設定できたら。
次に設定が必要なのが**トラッカー** 

### 初期設定では
* バグ
 ・障害管理、Redmineの真骨頂、チケットでトラブル解決まで対応

* 機能
 ・ソフトウェア開発に応用、新規開発の機能

* サポート
 ・問合せ対応、ヘルプデスクで受付、クローズまで対応、進捗管理

という3種類が用意されている。

### でも、この3種類の違いって何だ？？ 
この違いが理解できれば、自ずとトラッカーが見えてくる。

つまり、プロジェクトが仕事の塊なら、トラッカーは各々の仕事＝チケットなどを種類分けするためのもの。
プロジェクトの中で多数作成されるチケットをこれで分類。

と言っても今一つだな～。う～ん。
ということで、ここは無謀に言い切ってしまおう。

**トラッカーはどんなフォームか、どんなワークフローかを決めるもの**

と理解すればOKかも。
 
### そこでまずフォームを決めよう。

申請書や管理表、登録台帳などと思えば、身近なものではないでしょうか。
誰でも考えるのは、どんな項目で何を入力するか。
ということで、[フィールドはカスタマイズすべし](http://qiita.com/ihopeyoufunit/items/cb03b884f9c799f515bf)の解説へ。

・・・・・で、フィールドカスタマイズから戻ってきたら、

標準フィールドの他に独自フィールドの項目の中から、トラッカーで使用するものにチェックを入れて。
右ペインで、どのプロジェクトで利用するか、をチェックして。
トラッカー作成完了。
ということで、次は[ワークフローを見直す](http://qiita.com/ihopeyoufunit/items/b03df6f32e7ae719acf2)へ
underscoreコードリーディング（negate）



underscoreに詳しくないので、勉強半分でソースコードを読む。



##利用するバージョン
[underscore.js(v1.8.3)](https://github.com/jashkenas/underscore/tree/1.8.3)


##negateとは


###[underscorejs.orgのnegate](http://underscorejs.org/#nengate)

こんな説明。
>####_.negate(predicate) 
Returns a new negated version of the predicate function.


```javascript
var isFalsy = _.negate(Boolean);
_.find([-2, -1, 0, 1, 2], isFalsy);
=> 0

```
------------- 
predicate関数の否定されたバージョンを新しく生成して返します。

###[underscore.negate](https://github.com/jashkenas/underscore/blob/1.8.3/underscore.js#L856)
コード的にはこのあたり。

```javascript
  // Returns a negated version of the passed-in predicate.
  _.negate = function(predicate) {
    return function() {
      return !predicate.apply(this, arguments);
    };
  };
```

返り値は関数で、predicateにthisとargumentsを渡し、その否定として返す。
Redmineを使い始めるシリーズ（１）プロジェクト、全ての始まり 

ちょっと大上段ですが・・・

###ユダヤ教、キリスト教
旧約聖書『Genesis、創世記』の天地創造。
1日目　暗闇がある中、神は光を作り、昼と夜が出来た。

###日本神話
神々とともに天地の創生が語られて。
イザナギとイザナミの兄妹神が結婚し、島々や神々たちを生みもうけた。

###Redmineは
全ての始まりは、プロジェクト。
21世紀のPMはRedmineに「新しいプロジェクト」を作成することで革新的なプロジェクト管理をメンバに与え賜もうた。

**つまり、Redmineはプロジェクトありき。**

プロジェクトは一定の作業の塊。 
本当のプロジェクトならその名称を設定するし、
ルーティンワークなら、ある程度ボリュームあるものを設定すればOK。

プロジェクトを設定する時のキーワードは2つ。
①ワークフローであること
②複数人でやってること
（まあ一人Redmineってのもあるけど）

**つまり、状態を複数人が刻々更新させ完了まで持っていく**

従い、仕事であれば、ほぼ何でもプロジェクトに登録できる。
そしてプロジェクト登録が終われば、次は[トラッカーはどうする？](http://qiita.com/ihopeyoufunit/items/541b4a26241a92bef531)。
Docker + nginx-proxyでGitLab CI環境を作ってみる（3）

前回の続きです。

Docker + nginx-proxyでGitLab CI環境を作ってみる（2）
http://qiita.com/ABE_TAKASHI/items/deb516d44459eb901961

---
2016年2月11日追記

以下に「GitLab-CI環境の設定は基本はプロジェクトごと」みたいなこと書きましたが、普通にGitLab全体で使えるRunnerを登録することができますね…　登録後に各プロジェクトでそのRunnerを使うかどうかの設定をするようなインターフェースがありました。大人数で動かすプロジェクトを複数管理することがなければ、1つだけRunnerを登録しておけば事足りるような気がします。Runnerの登録の仕方などは、以下の説明と大差ありませんので、そちらをご参考ください。

---

~~GitLab-CI環境の設定は基本はプロジェクトごとになります（シェアもできるようですが）。~~WEBインターフェース上にてプロジェクトの「Settings」→「Runners」とたどると、以下のような記載がありますので、これを元にしてコマンドライン上から設定します（ここまでできてるならWEB上で完結させてほしいですが…）。

![gitlab2.png](https://qiita-image-store.s3.amazonaws.com/0/104477/df92d7e2-1548-25c1-ff0d-dd44502149b8.png)

以下はコマンドラインからです。対話式のスクリプトが走るので、基本は上の図に書かれたとおりに応答します。

```bash:
[docker-op@gitlab]$ docker exec -it gitlab-runner gitlab-runner register

Running in system-mode.

Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/ci):
http://[これまでに設定したURL]/ci

Please enter the gitlab-ci token for this runner:
UqHdxozH4z2pUgcCNPoi

Please enter the gitlab-ci description for this runner:
［72b6d08d0e51]: 
test0002（Runnerに名前をつけてあげてください）

Please enter the gitlab-ci tags for this runner (comma separated):
（ここでは未入力、タグはあとでも編集できます）

Registering runner... succeeded                     runner=vxGb_9Jx
Please enter the executor: docker, docker-ssh, virtualbox, ssh, shell, parallels:
docker

Please enter the default Docker image (eg. ruby:2.1):
ruby:2.1

Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
```

という感じで、難しいところはなにもありません。タグとかの使い方がまだよく分かってませんが、使いこなすと便利なのかもしれません。これが終わると、WEB上のページを更新すると以下のような感じでRunnersが表示されていると思います。

![gitlab3.png](https://qiita-image-store.s3.amazonaws.com/0/104477/806f159a-8ed4-88d6-3e2c-5902bdc9f6a0.png)

あとはテストやらデプロイなんかの処理をうまく連携すればいいのだと思いますが、そのへんはまだ自分も手探りの最中です。とりあえずリポジトリの一番上の階層に.gitlab-ci.ymlという以下の内容のようなファイルを置くと、コミットした際に同階層に置いたdeploy.shが実行されることは確認しました。テストもほぼ同じような方法で実行できるかと思います。

```yml:.gitlab-ci.yml
deploy:
  script:
  - chmod 700 ./deploy.sh
  - ./deploy.sh
  type: deploy
  tags:
  except:
  - tags
```

また、CI_BUILD_REF_NAMEという環境変数にコミットしたブランチ名が入ってきてるので、「developブランチにコミットした場合はdevサーバへ処理を行い、masterブランチにコミットした場合はstgサーバへ処理を行う」みたいな簡単な分岐を含む自動処理もできます。

参考
GiLab CI | GiLab CI のビルドスクリプト内で使用可能な環境変数について
http://qiita.com/tbpgr/items/7017a0ed5def79cd12e0

WEBインターフェースにもBuildsという項目が追加され、ビルドの結果が表示されるようになってます。

![gitlab4.png](https://qiita-image-store.s3.amazonaws.com/0/104477/ce1114eb-0e5f-8e47-66e0-aa8a72f1a115.png)

GitLabバージョン7以前はCI部分のUIがほぼ完全に別れていて使いにくかったのですが、統合されてすごく使いやすくなっています。そしてDockerを使ってのインストールは以前よりすごく楽になっているのでおすすめです。

Jenkinsを使うほど大げさなプロジェクトじゃない…、みたいなちょっとしたプロジェクトには使っても良さそうな気がします。自分でももう少し使ってみたいと思います。
Electronでコマンドライン引数を取得してRenderProcess受け渡す簡単な方法

# はじめに
ElectronにおけるBrowserWindowオブジェクトのloadURLには、index.htmlのように通常ファイル名を代入しますが、必ずしもファイル名である必要は無く、index.html#hoge01（アンカー）や、index.html?hoge=01（GET引数）を代入することも可能です。

したがって、単にコマンドラインから受け取った引数をRenderProcessに受け渡すだけであれば、プロセス間通信を行う必要はありません。

以下のサンプルコードは、「electron . --arg=01」のように--argというコマンドライン引数に01が代入されていた場合に、index.html#arg01というURLをloadURLに代入しています。

# サンプルコード

```js
'use strict';

var app = require('app');
var BrowserWindow = require('browser-window');

var mainWindow = null;
var url = null;
var ref = null;

app.on('window-all-closed', function() {
  if (process.platform != 'darwin') {
    app.quit();
  }
});

app.on('ready', function() {

  url = 'file://' + __dirname + '/index.html';
  ref = '';
  for (var i = 0; i < 20; i++) {
  	  if (process.argv[i] !== undefined) {
  	  	  if (process.argv[i].indexOf("--arg=") != -1) {
  	  	  	  ref = process.argv[i].replace("--arg=","");
		  	  url = url + '#arg' + ref;
  	  	  }
  	  }
  }
  
  mainWindow = new BrowserWindow({width: 800, height: 600});
  mainWindow.loadURL(url);
  mainWindow.on('closed', function() {
    mainWindow = null;
  });
});
```
無線LANアダブターの省電力OFF


## 環境
Raspberry Pi2 Model B
Raspbian JESSIE
PLANEX 無線LAN子機 11n/g/b 150Mbps GW-USNANO2A

## 目的

無線LANアダプタの省電力モードをOFFにする

## 背景

Raspberry Pi2 Model Bには、有線LAN用のポートが付いているがキャタピラー模型などを作成したい場合、無線化が必要となる。無線化したのちSSHなどでネットワークアクセスするとネットワーク状態がいいのに少しアクセスしないで放置した後での接続時に待たされたり、もっさりした動きをする時がある。

サイトをあちこち見ているとどうやら、無線LANアダプタの省電力モードが影響しているとのこと。

そこで、アダプタの省電力モードをOFFにする。

## 実施

以下を実施して状態確認

~~~
$ sudo cat /sys/module/8192cu/parameters/rtw_power_mgnt
1
~~~

ウチの無線LANアダプタのドライバは、8192cuということで、そのパラメータの状態を上記で確認。１ということは、省電力モード設定されているということ。（らしい）

以下のファイルを作成してパラメータを変更。
ちなみに、/etc/modprobe.d/ にconfファイルを作成しておくと、起動時に実行されモジュールへの設定反映を行ってくれる。

~~~
$ sudo vi /etc/modprobe.d/8192cu.conf
# Power Save Mode OFF
options 8192cu rtw_power_mgnt=0
~~~

上記を実施したら再起動

~~~
$ sudo reboot
~~~

再起動したら再度、状態を確認する。

~~~
$ sudo cat /sys/module/8192cu/parameters/rtw_power_mgnt
0
~~~

0になっていれば設定完了

試しにRaspberry Pi2 にsshでアクセスしてしばらく放置したのち、コマンド実行すると、以前は少し待ちがあったがすぐに応答が返ってきた。

### 参考にしたサイト（というかほぼそのまま）

[このサイトの推奨方式を採用　http://denshikousaku.net/fix-sluggish-response-of-raspberry-pi-wifi-adaptor](http://denshikousaku.net/fix-sluggish-response-of-raspberry-pi-wifi-adaptor)
Dropbox で特定のフォルダを無視する

# はじめに

「たとえばキャッシュフォルダを持つような開発環境一式をDropboxで共有したい、しかし、キャッシュのフォルダはアップロードしたくない」

こういったことがあるとき、Dropboxでどうするか。
その場合は「同期解除して衝突状態にする」ことで実現できます。

# 原理

Dropboxの同期解除はgitignoreのような「ローカルだけに置く」状態ではなく「アップロードしたものをそのPCから削除する」という意味なので、全く反対の意味です。
しかし、同期解除したあと、同じ名前のファイルやフォルダがあるとそのフォルダは同期の衝突状態になるため、実質ファイルをローカルだけで管理しているということになります。

# 適用例

![e228be5a2cd7ec838ba4c506e267581e-300x211.png](https://qiita-image-store.s3.amazonaws.com/0/41764/b1b63373-636b-d65e-6c7c-8f485f7a9910.png)

![6a643a77003a386e883e845bf4bb183f-300x133.png](https://qiita-image-store.s3.amazonaws.com/0/41764/4658c406-211b-6b4d-3ba2-072642153a96.png)


上がサーバー上のフォルダ、下がローカルのDropbox内フォルダです。
これは iTunes の Album Artwork フォルダを同期させています。
例えばこの cache フォルダをローカルだけに置きたい場合、次のような手順で行いました。

1. ローカルの Cache フォルダを退避させる。
2. アップロードされてしまったサーバ上の Cache フォルダを空にする
3. ローカルも Cache フォルダが空になるので、Cache を同期対象から外す。
4. ローカルの Cache フォルダが消えるので、退避させておいた Cache を戻す。
5. Cacheに進入禁止マークがつき、ローカルのみで管理される。

# まとめ

もっと良い方法もあるかもしれませんが、とりあえずはこれでいこうと思います。
Etherpad-liteのおすすめプラグイン(2016年春)

Etherpad-liteは共同編集が可能なエディタとして知られていますが、一人でメモ帳の代わりに使うだけでも充分にメリットがあります。
* すべての編集履歴が日時も含めて残ります。したがって、無限にアンドゥできます。編集履歴を残しつつ、過去のリビジョンに戻すこともできます(要プラグイン)。
* 明示的に保存操作を行う必要がなく、編集内容は自動的に保存されます。
* プラグインにより機能をカスタマイズできます。

本記事では、Etherpad-liteを自分で一年くらい運用してきた経験を元に、おすすめのプラグインを8つ紹介します。

## 1. ep_adminpads (オススメ度: ★★★)
管理画面にPadの管理機能を追加します。Padを削除する時にはこのプラグインを使います。

## 2. ep_cristo_restore_revision (オススメ度: ★★★)
Padの内容を、タイムスライダーで指定した過去のリビジョンに戻すことができます。

## 3. ep_headings2 (オススメ度: ★★★)
文字のスタイルにヘッダ（HTMLのH1～H6に相当）などを使えるようにします。他にも文字スタイル系のプラグインはいろいろありますが、特にこのプラグインは文書作成に不可欠なものです。
作者はEtnerpad-liteのメイン開発者であるJohn McLearなので、安心して使えます。(彼のプラグインでもイマイチな場合もありますが)

## 4. ep_historicalsearch (オススメ度: ★★★)
タイムスライダー上で、過去のリビジョンの中の文字列検索ができます。たとえばPadにToDoリストを書いて、実施済みのアイテムは消すという使い方をした場合に、後から実施済みのアイテムを検索することができます。

## 5. ep_padlist (オススメ度: ★★☆)
Padの一覧を表示します。

## 6. ep_simpletextsearch (オススメ度: ★★☆)
すべてのPadを対象に文字列検索ができます。各Padの現時点のテキストだけが対象なので、ep_historicalsearchのように過去にさかのぼって検索することはできません。

## 7. ep_tables2 (オススメ度: ★★)
Padに表を挿入できます。構造が決まっている情報を記録する場合にはやはり表形式が便利です。
動作は若干不安定で、編集中にテーブルが壊れてしまうことが稀にあります。したがって、多人数で使う環境ではおすすめできませんが、一人や少人数の環境に限っておすすめします。
もしテーブルが壊れてしまった時には、上記のep_cristo_restore_revisionを使って元に戻せます。

## 8. ep_comments_page (オススメ度: ★★)
Pad上のテキストを選択して、コメントを付けることができます。一人で使う場合にはあまり必要ありませんが、複数の人でコミュニケーションしながら編集する場合には有効です。コメントをアイコン化する機能を使うには、ep_page_viewも入れる必要があります。
同じ場所にコメントすると上書きされてしまうとか（同じ場所にコメントしたい場合には既存のコメントにリプライすれば大丈夫です）、コメントがエクスポートや履歴に含まれないないとか、まだ若干こなれていないところがあります。なので、コメントは一時的なメモ程度に利用して、ちゃんと残したい情報は本文に書くのが良いと思います。

## 最後に
他にもEtherpad-liteのプラグインは多数あります。
これらを含めたプラグインの一覧はこちらになります。
https://github.com/ether/etherpad-lite/wiki/Plugin,-a-list
numpyで空配列の末尾に行を追加して2次元配列を作る

# Array
pythonのarrayは`.append`メソッドを使って配列を追加することができます。

```py
>>> arr = []
>>> arr.append([1, 2, 3])
>>> arr.append([4, 5])
>>> arr
[[1, 2, 3], [4, 5]]
```

行の長さが自由な2次元配列になります。

# numpy.ndarray
numpyで同じように追加しようとしても2次元配列になりません。

```py
>>> arr = np.array([])
>>> arr = np.append(arr, np.array([1, 2, 3]))
>>> arr = np.append(arr, np.array([4, 5]))
>>> arr
array([ 1.,  2.,  3.,  4.,  5.])
```

numpyを2次元配列として末尾に行を追加するには，以下のように書く必要があります。

```py
>>> arr = np.empty((0,3), int)
>>> arr = np.append(arr, np.array([[1, 2, 3]]), axis=0)
>>> arr = np.append(arr, np.array([[4, 5, 0]]), axis=0)
>>> arr
array([[1, 2, 3],
       [4, 5, 0]])
```

ポイント

- `np.empty`で初期化しておく
- 追加する配列の要素数は初期化した行の長さ(上の例だと3)と一致させる
- `np.append`の第二引数となる`ndarray`は多重配列
- `axis=0`を忘れない

# numpy.ndarrayの参照
```py
>>> arr
array([[1, 2, 3],
       [4, 5, 0]])
>>> arr[0,1]
2
>>> arr[1,:2]
array([4, 5])
>>> arr[:, 1]
array([2, 5])
>>>
```

スライスも簡単にできて便利です。
Docker + nginx-proxyでGitLab CI環境を作ってみる（1）

Jenkinsとかその手のツールをまともに使ったことない僕ですが、CI環境をお手軽に構築して使ってみたい欲望が高まってきたので、マイナーではありますが、以前ちょっとかじったGitLab CIをDockerを使って構築してみたいと思います。ちなみにGitLab CIって知名度激低ですかね？？？

GitLab CI公式
https://about.gitlab.com/gitlab-ci/

ちなみにGitLabのバージョン7以前はGitLabのインストールまではそれほど苦労しないのですが、GitLab CIまでやろうとすると色々と苦労しました。今回はCI環境が統合されたバージョン8以降でDockerを使って構築することで、楽に構築することを目指します。

Dockerのインストールについてはこちらを参考ください。

AWS/EC2にCentOS7を入れてDockerホストを作成　その1
http://qiita.com/ABE_TAKASHI/items/2b04cf4c70f28b864134

### 2016/11/11追記

Docker + nginx-proxy でGitLab環境(Let's Encrypt付き)を構築する
http://qiita.com/ABE_TAKASHI/items/654ef6ed22071c93d6f2

という記事を新たに書いたので、こちらの投稿と合わせてご覧ください。

# nginx-proxy を立てる

GitLabを立てる場合、いちいちよく分からないポート番号を指定してWEBページにアクセスしたりするのがいやなので、nginx-proxy を立ててサブドメインとか使ってスマートにアクセスできるようにします。

nginx-proxyはnginxコンテナとdocker-genコンテナの二つを立てて運用しますので、docker-composeでまとめて管理するようにします。

（参考）
Docker + nginx-proxy + PHP7 on Apache + MySQL5.7 で WordPress の環境を作る　その1
http://qiita.com/ABE_TAKASHI/items/f0cd899fd7ac2cc9b5a0
前に書いたこの投稿では二つのコンテナを別々に立ち上げましたが、今回やろうとしていることも、docker-composeを使う以外はほぼ同じになります。

設定ファイルを置く任意のディレクトリ（/var/docker/nginx）を作成し、その中に移動します。さらにnginx-proxyのテンプレートファイルを置くディレクトリ（/var/docker/nginx/templates）を作成して、テンプレートファイルをダウンロードしてきます。

```bash
[docker-op@docker-base ~]$ mkdir -p /var/docker/nginx && cd /var/docker/nginx

[docker-op@docker-base nginx]$ mkdir templates && cd templates

[docker-op@docker-base template]$ curl -o nginx.tmpl https://raw.githubusercontent.com/jwilder/docker-gen/master/templates/nginx.tmpl
（出力略）

[docker-op@docker-base template]$ cd ..
```

そして、nginxコンテナとdocker-genコンテナをセットにしたdocker-compose.ymlファイルを作成します。

```bash
[docker-op@docker-base nginx]$ vi docker-compose.yml
```

```yml:docker-compose.yml
nginx:
  image: nginx:latest
  container_name: nginx
  volumes:
    - /tmp/nginx:/etc/nginx/conf.d
  ports:
    - "80:80"

docker-gen:
  image: jwilder/docker-gen:latest
  container_name: docker-gen
  volumes_from:
    - nginx
  volumes:
    - /var/run/docker.sock:/tmp/docker.sock
    - /var/docker/nginx/templates:/etc/docker-gen/templates
  links :
    - nginx
  command: "-notify-sighup nginx -watch --only-published /etc/docker-gen/templates/nginx.tmpl /etc/nginx/conf.d/default.conf"
```

あとは、docker-composeコマンドでnginxとdocker-genの2コンテナを立ち上げます。確認すると2つのコンテナが立ち上がっていることが確認できます。

```bash
[docker-op@docker-base nginx]$ docker-compose up -d

[docker-op@docker-base nginx]$ docker ps -a
CONTAINER ID        IMAGE                           COMMAND                  CREATED             STATUS                  PORTS                                                   NAMES
60900fa566ee        jwilder/docker-gen:latest       "/usr/local/bin/docke"   17 minutes ago      Up 17 minutes                                                                   docker-gen
83fbebe4d069        nginx:latest                    "nginx -g 'daemon off"   17 minutes ago      Up 17 minutes           0.0.0.0:80->80/tcp, 443/tcp                             nginx
```

長くなりますので、次に続きます。

Docker + nginx-proxyでGitLab CI環境を作ってみる（2）
http://qiita.com/ABE_TAKASHI/items/deb516d44459eb901961
Swift 言語仕様(2) 基本データ型

Swiftには数種類リテラルがある。
リテラル [literal] ：データ型による値を直接表記する際の書式。

#数値
```
let age = 56
```
数値にはInt型の数値リテラルと、Dobule型の浮動小数点数リテラルがある。

#真偽値
```
let x = true
let y = false
```
#文字列
```
let name = "Steve"
```
文字列リテラルはString型の値を作る
また文字列リテラル内で\()で囲うと変数の値が保管される。
```
let name = "Steve"
print("My name is \(name)")
```
※文字列を操作したい場合はvarで宣言すること

文字列の連結には「+」を使う
```
let msg = "hello " + "world"
```
データ型を変換するには次のようにする。
```
let a = "a"
let b = 22
```
 文字列の連結が出来る
```
let c = a + String(b) // "a22"
```
#nil
nilは値が存在しないことを示す。
let num: String? = nil

nilリテラルはOptional.None値を表す

#Optional
nilはリテラルでありOptional型のNoneという値になる。
nilはOptional型の定数や変数にのみ格納できる。
```
var num: Optional<String> = nil // Optinal<String>はString型の値またはnilという意
味
```
一般的には以下を使う。
```
var num: String? = nil
```
#Tuple（タプル）
タプルは複数の値をまとめて渡せるための仕組みである。
```
let steve = ("Jobs", 56)
let (name, age) = steve
print(steve.0) // Jobsが取り出せる
```
次のような記述もできる。
```
let error = (404, “Not Found”)
let (code, msg) = error
print(code) // 404
print(msg)  //  Not Found
```
![tuple.png](https://qiita-image-store.s3.amazonaws.com/0/105887/f4d77664-74b8-609b-cd06-961b0bef561c.png)
【Python＋heroku】Python入れてない状態からherokuで何か表示するまで（後編）

#これはなに？

こちらの続きです
>【Python＋heroku】Python入れてない状態からherokuで何か表示するまで（前編）
> https://zenn.dev/it_ks/articles/ba346db1fec156

ここまでで、
heroku上にデプロイしてサンプルのまま動かしました　＜イマココ

#heroku update
忘れてました。定番ですよね、やっとくといいですよね。
`heroku update`

```
>heroku update
Updating plugins... done. Updated 1 package.
heroku-cli: Updating... done.
```

このときはheroku-cliに更新があったようで、アップデートされました。

***

こちらでの掲載は終了し、
現在はzennに移っております。

前編
https://zenn.dev/it_ks/articles/ba346db1fec156

後編
https://zenn.dev/it_ks/articles/ae1e3db51fda7b
IntelliJ製品を50%オフで買う方法

「OSS Committerはタダで使える」「OSS Contributerは50%で買える」「パーソナルライセンス(PHPStormとか)だと89ドルで買える」という噂は知っていました。
しかし、法人(事業主)が50%オフで買えるというのは知りませんでしたのでメモです。(多分買えると思います）


# 情報
http://blog.jetbrains.com/blog/2014/02/19/attention-startups-get-jetbrains-tools-at-50-off/
https://www.jetbrains.com/shop/eform/startup

> small team with fewer than 10 people, working on a software product and your company hasn’t yet celebrated its 3rd birthday

╭( ・ㅂ・)و

ブログ記事を見るとライセンス提供の条件(簡易)は

- 会社が10人未満であること
- ソフトウェア事業を営んでおり、有名ではないこと
- 設立から3年までであること

ということですが、申し込みページを見ると
>This discount is available to any company that meets all the following requirements:
>Is privately held,
>Has been in business for no more than 3 years,
>Is engaged in development of a software-based product or service, and
>Is an established business with a website and/or existing public references on the Internet.
>If your company meets these criteria, apply for your discount now.
>After your application is approved, your startup discount will be available for one or more purchases of up to 10 licenses per product during 24 months.

意訳すると

* 会社は非上場企業であること（株式を公開していない会社である事）
* 商売を始めてから3年もたっていないこと（つまり会社を建ててから3年未満であること）
* ソフトウェア開発関連の事業をおこなっており、Webサイトが公開されているかインターネットでの照合が可能であること。（もしくはその両方）
* 与えられるライセンス数は10個までで、その10個は24ヶ月有効である

でしょうか。
フリーランスで99ドルで買えるならいいんじゃないかなーって思いました。
あとスタートアップとしてもいいんじゃないかなーって思いました。	


# おまけ
以下、参考になったところとかです。

## 「OSS Committerはタダで使える」
情報元：
　http://blog.hyec.jp/2013/11/phpidephpstormopen-source-project.html

## 「OSS Contributerは50%で買える」
http://blog.hyec.jp/2014/12/phpidephpstorm50.html

## 「パーソナルライセンスだとPHPStormは89ドルで買える」
https://www.jetbrains.com/store/#section=personal

## MEMO

きちんと契約内容を読んでませんがライセンスの都合上OSS用でもらったライセンスを使って仕事でつかっちゃいけないんですよね？
もし良いならオレオレOSSでタダでもらって使い回しますもんねー。
Serverlessのハマりポイントまとめ

[Serverlessフレームワーク](https://github.com/serverless/serverless)の話です。
雑多に。

## FunctionとEndpointは一緒にデプロイしよう
### 問題点
`s-function`ファイルの`endpoints`の設定を変更して、`sls dash deploy`コマンドでいくらendpointをデプロイしてもlambdaにアクセスが届かない！

### 理由
`s-function`の`endpoints`には、Lambdaの設定とAPI Gatewayの設定がごっちゃになっている。(たぶん)一度Lambdaをデプロイしないと、Lambda側の`API endpoints`の設定が反映されなくてアクセスできなくなる。ちゃんと調べてないからたぶんだけど。

## Scheduled Eventはコンソールから
2016/2/2現在、まだサポートされてないらしいです。コンソールからは普通に設定出来るので、デプロイ後に手動設定を！

## ファイルは50MBまで
Serverlessは、Component=>Module=>Functionと3階層にわかれている。Functionをデプロイしようとしても、zip化されるのはComponent単位。で、これが50MBという制限がある。kuromoji.jsという形態素解析器を突っ込もうとしたら死んだ！
Jupyter上でPIL画像を表示する

# デモ
![show_Pillow_on_Jupyter.png](https://qiita-image-store.s3.amazonaws.com/0/40987/b3266753-bbdb-12a9-f47f-4bd8f7651646.png)

nbviewer
http://nbviewer.jupyter.org/gist/Tatejimaru/9272c82e2d85a7498901

# 方法
ここではmatplotlibの`imshow`関数を使います。

```py
from PIL import Image
import matplotlib.pyplot as plt
import numpy as np

im = Image.open("hoge.png", "r")
plt.imshow(np.array(im))
```

# 参考
python - How to show PIL Image in ipython notebook - Stack Overflow
http://stackoverflow.com/questions/26649716/how-to-show-pil-image-in-ipython-notebook
Hueのhttp_hostを0.0.0.0にしてポートフォワードによる公開ができるようにする

#何があったか

ローカルネットワークにあるHueをSSHポートフォワードを設定しても公開されない現象が発生。

LISTENしているIPが192.169.x.x. みたいなIPアドレスが設定されている。

まず思ったのはhttp_hostというオプション名が問題部分に該当するというところまでは突き止めたのでCloudera ManagerのHueの設定をみましたがそれらしいものは存在せず。

じゃあ直接hue.iniファイルを変更すればいい、と直感で思うけどCloudera Managerを使っていると、Hueを再起動するたびにhue.iniが生成され直接ファイルを変更することができず困り果てる。

#解決策

やっぱりCloudera Managerに解決策がありました。

[How to bind http_host to 0.0.0.0 in hue.ini ?](https://community.cloudera.com/t5/Web-UI-Hue-Beeswax/How-to-bind-http-host-to-0-0-0-0-in-hue-ini/td-p/30147#M1031)

![上記説明文より参照](https://xgkfq28377.i.lithium.com/t5/image/serverpage/image-id/1075iFFF79387F1A5D50A/image-size/original?v=mpbl-1&px=-1)

こんなオプションがあるんかい・・・。

`Bind Hue Server to Wildcard Address`、日本語表記だと`Hue Server のワイルドカードアドレスへのバインド`というオプションを有効にすると0.0.0.0でLISTENされるようになります。
Go メモ

会社の未来のために若者向けの言語を研究する。ログを残す。
今日は 5 分で Go を始めるメモ。

``` 
brew install go
```
```
export PATH=$PATH:/usr/local/opt/go/bin
export GOPATH=$HOME
```

Hello ワールド書いた。

```go:hello.go
package main
import "fmt"

func main() {
  fmt.Println("じゃーん")
}
```
```
go build hello.go
./hello
```

![スクリーンショット 2016-02-02 21.55.34.png](https://qiita-image-store.s3.amazonaws.com/0/6496/c45a949d-d873-fedd-59b0-a05cce42d9c7.png)

- 感想
 - java 書いたことある人には書きやすそう。若者はどうなのかな？
 - 作法がよくわからない

- 明日やること
 - Go の IDE とか開発環境ととのえる
 - パッケージ管理ツールとか調べる
 - 有名なフレームワーク調べる
 - テストの仕方とか
 - 作法を調べる(スペースは2でいいのかしら？)
 - 簡単なアプリ(掲示板くらい)を作ってみる。
Zybo > Chronicles blog 07 > XADC blockの特徴 / [VP/VN] / [VAuxP/VAuxN]

@ Adam Taylor blog

https://forums.xilinx.com/t5/Xcell-Daily-Blog/Getting-the-XADC-Running-on-the-MicroZed-Adam-Taylor-s-MicroZed/ba-p/380989

> The Zynq SoC’s XADC block contains two 12-bit analog-to-digital converters. These ADCs are capable of sampling at up to 1 Msample/sec, with an ideal effective input signal bandwidth of 500kHz (250 kHz on the auxiliary inputs). The XADC can multiplex among 17 analog inputs with additional input channels connected to on-chip voltages and temperature sensors. If your design is pin-limited in terms of available analog-capable inputs for external signals, you can configure the XADC to drive an external analog multiplexer.

文章だと参照性が悪いので箇条書きにする。

- 2 x 12bit ADC
- up to 1 Msample/sec
- effective input signal bandwidth: 500kHz (250kHz on the auxiliary inputs)
- can multiplex among 17 analog inputs
  - additional > on-chip voltages sensors
  - additional > on-chip temperatura sensors
- can configure to drive an external analog multiplexer


> The XADC is capable of unipolar or bipolar measurements—each analog input is differential. The 17 differential inputs are split between one dedicated analog input pair referred to as VP/VN and 16 auxiliary inputs that can be configured as either analog or digital I/O pins, referred to as VAuxP/VAuxN. The effective input signal bandwidth depends upon whether you are using the dedicated VP/VN differential input pair, in which case it is 500kHz, or the auxiliary inputs, in which case the maximum bandwidth is 250KHz.

- each input: differential
- 17 inputs
  - 1 for [VP/VN]
  - 16 auxiliary for analog or digital I/O pins [VAuxP/VAuxN]
- effective input signal bandwidth depends ...
Zybo > Chronicles blog 07 > the XADC analog subsystem / the high-speed serial (SerDes) links / the PCIe end points.

@ Adam Taylor blog

https://forums.xilinx.com/t5/Xcell-Daily-Blog/Getting-the-XADC-Running-on-the-MicroZed-Adam-Taylor-s-MicroZed/ba-p/380989

> The real benefit of using a device like the Zynq SoC comes in the creation of a programmable system that also utilizes both the programmable logic (PL) side of the device and the dedicated, hard-IP macros in the Zynq SoC including <font color=red>the XADC analog subsystem</font>, <font color=red>the high-speed serial (SerDes) links</font>, and <font color=red>the PCIe end points</font>.


http://www.xilinx.com/products/intellectual-property/axi_xadc.html

Over the next few blogs, I will look at extending the system we have created to date by adding in <font color=red>the on-chip XADC block</font>.
Zybo > Chronicles blog 06 > create image > .bitファイルと.mcsファイルの生成

@ Adam Taylor blog

https://forums.xilinx.com/t5/Xcell-Daily-Blog/A-Boot-Loader-for-MicroZed-Adam-Taylor-s-MicroZed-Chronicles/ba-p/378855

> It is important to stress that the FPGA programming bit file must always follow the FSBL. Clicking on “create image” will create both a *.bin and a <font color=red>*.mcs file</font> for the target device.

.bitファイルは何回かPetaLinuxと一緒に使ったが、.mcsファイルは詳細をまだ分かっていない。
Zybo > Chronicles blog 06 > lscript.ld 内で DDR memory location を設定する

@ Adam Taylor blog

https://forums.xilinx.com/t5/Xcell-Daily-Blog/A-Boot-Loader-for-MicroZed-Adam-Taylor-s-MicroZed-Chronicles/ba-p/378855

> But first, we need to make a change to the linker script provided with the FSBL because it has no idea where the DDR memory is located in the processor’s address space. To do this, we need to open <font color=red>the lscript.ld</font> and specify <font color=red>the DDR memory location</font> in the file. 

## やってみた

- XSDKにおいて[File]-[New]-[Appication Project]を選択

- New Projectにおいて以下のように名前をつけた

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/09b92898-6bb0-a06b-7786-96d72534ba61.png)

- Nextを選択
- Zynq FSBLを選択し Finishを選択した

これで以下の2つが作成された

- FSBLtest
- FSBLtest_bsp

このうちFSBLtestフォルダのsrc内にlscript.ldファイルがある (下図参照)。

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/8f1eb45c-0865-c3a2-20bb-fc31c17def6a.png)


lscript.ldファイルは以下のようになっている (XSDKで開いた)。

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/5b027383-d09b-9f39-2c7f-88ad11e50fa4.png)


blogの画像が拡大表示できないのは残念。
DownloadManagerでアプリケーション専用ディレクトリ内にファイルをダウンロードすることはできない

[DownloadManager](http://developer.android.com/intl/ja/reference/android/app/DownloadManager.html)で、アプリケーション専用ディレクトリ内にファイルをダウンロードしようとすると失敗するらしい。
でもAndroid 5.0あたりからは大丈夫になっている…？

```java
File file = new File(context.getExternalFilesDir(null), "test"); // /sdcard/Android/data/com.your.app/files/test
long downloadId = downloadManager.enqueue(new DownloadManager.Request(Uri.parse(content.url))
    .setDestinationUri(Uri.fromFile(file));
```

ダウンロードが始まるが、エラーになってしまう。アプリケーション専用ディレクトリ以外の外部ストレージなら、問題なく保存できる。

```java
File file = new File(Environment.getExternalStorageDirectory(), "test"); // /sdcard/test
long downloadId = downloadManager.enqueue(new DownloadManager.Request(Uri.parse(content.url))
    .setDestinationUri(Uri.fromFile(file));
```

どうしてもアプリケーション専用ディレクトリにダウンロードしたい場合は、一旦`setDestinationUri`を指定せずにダウンロードして、完了した後にファイルを移動させる処理をしたりしないとダメっぽい。つらい。
OSX El Capitanでawscliのインストールに失敗する場合の対処方法

**OSX El Capitan** (10.11.2)で、awscliをpip経由でインストールするのに失敗しました :disappointed_relieved: 

インストール中のメッセージを抜粋するとこんな感じです。

```bash
Collecting six>=1.5 (from python-dateutil<3.0.0,>=2.1->botocore==1.3.23->awscli)
  Using cached six-1.10.0-py2.py3-none-any.whl
Installing collected packages: six, python-dateutil, docutils, botocore, pyasn1, rsa, colorama, awscli
  Found existing installation: six 1.4.1
    DEPRECATION: Uninstalling a distutils installed project (six) has been deprecated and will be removed in a future version. This is due to the fact that uninstalling a distutils project will only partially uninstall the project.
    Uninstalling six-1.4.1:
Exception:
Traceback (most recent call last):
：（略）
OSError: [Errno 1] Operation not permitted: '/tmp/pip-Pff7ay-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/six-1.4.1-py2.7.egg-info'
```

sixのver1.5以上が必要なんだけど、sixのver1.4.1がインストールされてたのを発見。でも、そのバージョンは`deprecated`だからuninstallするよって流れで、やっぱ無理だったーって感じだと思います。（たぶん）

sixは、python2系と3系の違いを吸収するユーティリティとのこと。
http://hhsprings.bitbucket.org/docs/translations/python/six-doc-ja/

# すでに解決してた

いろんな人が困ってたみたいで、すでに解決されていました。
https://github.com/aws/aws-cli/issues/1522

インストールは**`--ignore-installed`オプションでsixを指定**してあげるだけでした :grinning: 

```bash
$ sudo -H pip install awscli --upgrade --ignore-installed six
```

こんな感じでさくっとインストールが成功します。

```
Password:
Collecting awscli
  Using cached awscli-1.10.1-py2.py3-none-any.whl
Collecting six
  Using cached six-1.10.0-py2.py3-none-any.whl
Collecting botocore==1.3.23 (from awscli)
  Using cached botocore-1.3.23-py2.py3-none-any.whl
Collecting rsa<=3.3.0,>=3.1.2 (from awscli)
  Using cached rsa-3.3-py2.py3-none-any.whl
Collecting colorama<=0.3.3,>=0.2.5 (from awscli)
Collecting docutils>=0.10 (from awscli)
Collecting jmespath<1.0.0,>=0.7.1 (from botocore==1.3.23->awscli)
  Using cached jmespath-0.9.0-py2.py3-none-any.whl
Collecting python-dateutil<3.0.0,>=2.1 (from botocore==1.3.23->awscli)
  Using cached python_dateutil-2.4.2-py2.py3-none-any.whl
Collecting pyasn1>=0.1.3 (from rsa<=3.3.0,>=3.1.2->awscli)
  Using cached pyasn1-0.1.9-py2.py3-none-any.whl
Installing collected packages: jmespath, six, python-dateutil, docutils, botocore, pyasn1, rsa, colorama, awscli
Successfully installed awscli-1.10.1 botocore-1.3.23 colorama-0.3.3 docutils-0.12 jmespath-0.9.0 pyasn1-0.1.9 python-dateutil-1.5 rsa-3.3 six-1.4.1
```

最後に、インストールされているか確認します。

```bash
$ aws --version
aws-cli/1.10.1 Python/2.7.10 Darwin/15.2.0 botocore/1.3.23
```

先人の知恵はありがたいです :octocat: 

## 追記

awscliは、brewでさくっとインストールできることを教えていだきました。こっちのほうがお手軽かもしれませんね。

```
$ brew install awscli
```

[参考]
http://docs.aws.amazon.com/ja_jp/cli/latest/userguide/installing.html
https://github.com/pypa/pip/issues/3165
https://github.com/aws/aws-cli/issues/1522
Heroku上で db:seed する時に FactoryGirl を使おうとしたら、Factory not registered になって困った件 

## 前提

- ``` gem 'factory_girl_rails' ``` 使える状態
- RSpec設定済み
- Factory置き場は ```spec/factories```
- 例モデル：User

な状態で以下を進みます。

## rake db:seed でダミーデータを生成

### factories

```spec/factories/user.rb
FactoryGirl.define do
  factory :user do
    sequence :name, "ユーザーn_1"
    sequence(:email){|n| "user#{n}@example.com" }
    password 'hogehoge'
  end
end
```

### seeds

```db/seeds.rb
require 'factory_girl'

User.destroy_all

FactoryGirl.create_list(:user, 3)
```

期待： ``` rake db:seed ``` したら、毎回 users テーブルをまっさらにして、3人ダミーデータをこさえたい。

### ダミーデータを生成してみる

```
$ ./bin/rake db:seed
```


ローカルでは期待通りだけど、なぜか heroku ではうまく動かない・・

## Heroku

```
$ git push heroku master
```

```
$ heroku run rake db:seed
```

すると、

#### エラー

```
... Factory not registered ...
```

なぜに〜〜；；


## 解決の糸口

[ruby on rails - Rake Aborted Error when pushing to Heroku (factory_girl) - Stack Overflow](http://stackoverflow.com/questions/9048769/rake-aborted-error-when-pushing-to-heroku-factory-girl)

> Check your
.slugignore
spec/ and test/ directories are often ignored.

意訳： ```.slugignore``` されてんじゃない？

されてた！！

```.slugignore
spec/
```

消して、 heroku push, db:seedしたら上手くいった！

## おまけ ```.slugignore``` ???

[Slug Compiler | Heroku Dev Center](https://devcenter.heroku.com/articles/slug-compiler)

> When you git push to Heroku, your code is received by the slug compiler which transforms your repository into a slug.

どうもHeroku にコードをプッシュすると、 slug compilerというやつがコードを受け取って、よしなにデプロイしてくれるらしい。 :snail: 

参考：[Ruby - Herokuのスラグサイズを減らすためにasset_syncを使うやりかた - Qiita](http://qiita.com/katryo/items/6a615869452fbad92821)

slugのサイズは上限があるらしく、assetsなんかがやたら多いと、超えてしまうそうな。。
そういう時に無視するファイルなんかを指定する為に必要な設定ファイルらしい。

おまけ２： FactoryGirl.definition_file_paths

```.slugignore``` の存在に気づく前に、散々ググってて見かけた ```FactoryGirl.definition_file_paths``` にfactoriesディレクト以下の *.rbファイルを読み込めるように指定せよ、という記述を見かけたけど、Railsで ```db:seed``` の場合改めて指定し直す必要なくちゃんと読み込めてた。

ただ、 ```FactoryGirl.definition_file_paths``` でFactoryGirlが認識するfactoryファイルの場所を確認できたので、「もしかして、Heroku上に読み込もうとしてるFactoryないんじゃない・・？」と気づけたので、.slugignoreじゃなくて、それでもFactoryが見つからない場合、 ```definition_file_paths``` がどうなってるか調べると良いかも！
Zybo > Link > Mizrozed Chronicles


MICROZED CHRONICLES
http://adiuvoengineering.com/?page_id=285

Adam TaylorのMicrozed Chroniclesは上記から過去の記事をたどれるようだ。

リンク切れ対策のため、以下も記載しておく。
http://adiuvoengineering.com/?s=MicroZed+Chronicles

adiuvoengineeringのサイトで[Microzed Chronicles]で検索すれば、数年後にリンク切れしていても見つかるかもしれない。adiuvoengineeringのサイトがあれば。

<hr>
(追記 2016 May 23)

上記のサイトがダウンしている時、以下のリストから見つける
https://forums.xilinx.com/t5/blogs/blogarchivespage/blog-id/Xcell


### 追記 2020-09-29

以下にページが移動されたようだ。
https://www.adiuvoengineering.com/microzed-chronicles-archive
初心者のためのRSpec テストデータベースの準備 (seedがある時の注意点)

## RSpecでテストデータベースを準備

### rake db:test:prepare

#### rakeタスク

```
$ ./bin/rake db:test:prepare
```

#### 起きること

テスト用schemaを読み込んでmigrationにpendingがないかチェック
通常、テスト実行前にDBを用意する時はこれを使う！

## 開発用にDBをリセット

### rake db:reset

#### rakeタスク

```
$ ./bin/rake db:reset
```

#### 起きること

- 対象のデータベースをドロップ
- 現在の schema をロードして DB を作り直す
- シードデータを投入

参考：[第5回: データベーステーブルとモデル - Ruby on Rails 3.0 日記 - Ruby on Rails with OIAX](http://www.oiax.jp/rails/rails3/database_table_and_model.html)

> Rake タスク db:reset は、データベースを drop して全テーブルを作り直してからシードデータを投入しますので、ご注意ください。

#### 使うシチュエーション

- ```db/seeds.rb``` に開発用データがある
- 開発中なので時々DBをリセットしたい

- - -

勘違いしてたこと・・

DBリセット、なので ``` ./bin/rake db:reset RAILS_ENV=test ``` （```RAILS_ENV=xxx``` を指定すると、どの環境でタスクを実行するか指定可）としてた。
これだと、テスト実行前に ```seed.rb``` で指定するデータが投入された状態でテストが実行される。
テスト前に入れられているため、各 it 毎にロールバックもされないので、テスト実行に必要なマスタデータ投入などの目的があればOK.

自分の場合は特にマスタデータとかではなかったので、seed邪魔くさいな〜とか思いながら、it 実行前にテストデータをクリアするために、わざわざ ```DatabaseRewinder``` を入れてた。。

## DatabaseRewinder 使用時の注意

普通に初心者がキレイにテストデータをspecごとに書いてる場合、DatabaseRewinderなどで強制的にテストデータをクリアしなくて大丈夫のはず。

理由は：

- 各スペックごとに投入してるテストデータは、スペック終了後に自動でクリアされる
- 影響範囲をチェックしながら必要なスコープのみにデータが適用されるテストを書くほうが良い
- テスト終了前後にデータがクリアでない状態でテストを書くと、再現性がないテストになるので良くない

参考記事：

- [rspecのbefore(:all)の注意点 - Qiita](http://qiita.com/kiyodori/items/5862efd9c5a5ed699f81)
- [DatabaseRewinderでseedなど消さないで欲しいデータがいる場合の対処方法 - Qiita](http://qiita.com/ppworks/items/8bc28485b226e78f22c9)


- - -

#### おまけ

``` rake db:migrate:reset ``` というものがあることをついでに知った。

[rake db:reset と rake db:migrate:reset の違い | EasyRamble](http://easyramble.com/difference-bettween-rake-db-migrate-reset.html)

> rake db:reset は db/schema.rb からDB作成
> rake db:migrate:reset は db/migrate/**.rb からマイグレーション

> 新しくマイグレートファイルを作成してマイグレートを実行した後、カラムのデータ型やオプション指定を修正したくなって、その作成したばかりのマイグレートファイル自体を修正してマイグレーションを新たに適用したい場合。

ああ！コレある！！！
良いものを知った♪
HttpURLConnectionのUser AgentをWebViewと同じにする


AndroidのHttpURLConnectionのUAをセットする話。
HttpURLConnectionのUAは「System.getProperty("http.agent")」の値をセットしているので、この値を書き換える。
WebViewのUAは「new WebView(this)).getSettings().getUserAgentString()」で取得する。

これを起動時に必ず実行される箇所（ActivityのonCreate()あたり）に書くと楽です。

```java:HogeActivity.java
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
          ・・・
        System.setProperty("http.agent", (new WebView(this)).getSettings().getUserAgentString());
          ・・・
    }
```
pythonからたくさんプロセスを起動したい

プロセスを起動するのは、
`os.system(cmd)`
でも
`subprocess.check_output(cmd)`
でもいいのですが。

sshで別のサーバにたくさんジョブを投げると、
`Write failed: Broken pipe`
とか
`fork: Resource temporarily unavailable`
とか
`shell request failed on channel 0`
とかのエラーが出てきて困りました。

ulimitでプロセス数の上限を大きくしたり、
.ssh/configでサーバ応答を待つ時間を長くしたり、
いろいろ試行錯誤中。

解決したら更新します。

http://d.hatena.ne.jp/usata3/20061110/p2
http://blog.ybbo.net/2013/06/19/mac%E3%81%AEssh%E3%81%A7%E3%80%8Cwrite-failed-broken-pipe%E3%80%8D%E3%81%8C%E5%87%BA%E3%81%9F%E5%A0%B4%E5%90%88%E3%81%AE%E5%AF%BE%E5%87%A6%E6%B3%95/
S3でIPアドレス制限をかけたい

バケットポリシーを以下のような感じにします。hogehogeは該当のバケットを指定してください。192.0.2.0/24と203.0.113.1からのアクセスのみを許可したい場合の設定です。

```json
{
    "Version": "2008-10-17",
    "Id": "PolicyForCloudFrontPrivateContent",
    "Statement": [
        {
            "Sid": "AllowPublicRead",
            "Effect": "Deny",
            "Principal": {
                "AWS": "*"
            },
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::hogehoge/*",
            "Condition": {
                "NotIpAddress": {
                    "aws:SourceIp": [
                        "192.0.2.0/24",
                        "203.0.113.1"
                    ]
                }
            }
        }
    ]
}
```

気をつけないといけないのはAPI経由でのアクセスも制限される点です。デプロイサーバーを用意する場合はデプロイサーバーのIPアドレスも指定しましょう。
Linuxで画像ファイルを表示する


##pngファイル

コマンドeog filename すれば、pngファイルを表示できる。
（eog = eye of gnome）

##epsファイル

コマンドevince filenameすれば、epsファイルを表示できる。

##参考
http://d.hatena.ne.jp/beiz23/20111121/1321810069
Mac で LibreOffice を使って PowerPoint を PDF に変換する（コマンドラインで）

ダウンロードした複数の pptx ファイルを PDF に変換する方法を調べていて、やり方が分かったのでメモ。

```shell-session
$ /Applications/LibreOffice.app/Contents/MacOS/soffice --headless --nologo --nofirststartwizard --convert-to pdf --outdir ~/Documents ファイル名
```

オプションの説明等は ```/Applications/LibreOffice.app/Contents/MacOS/soffice --help``` で。

参考URL

* http://qiita.com/y_irabu/items/5d916562744b05c5fc82
* https://ask.libreoffice.org/en/question/12084/how-to-convert-documents-to-pdf-on-osx/
Bracketsをとりあえず使える子にする

まず最初に断っておきますが、Bracketsはデフォルトのままでも便利な子ですよ。
ただ、普段Intellij IDEAやSublime Textを使っているので物足りなさを補うべく、
必要最低限のプラグインを入れてみたのでご紹介。

# Emmet
名の通りEmmetを利用出来るようにするプラグイン。
これがないと効率と（私の）やる気が落ちる。

# Shizimily Multiencoding for Brackets
文字コードエンコーディング用。
とりあえず入れとかないと不安。

![スクリーンショット 2016-02-02 20.14.55.png](https://qiita-image-store.s3.amazonaws.com/0/24510/b81741a9-1350-af61-71b0-f7e3017f76d5.png)


# Beautify
HTML/CSSのコード整形。

# Minimap
ファイル内ミニマップを表示するプラグイン。
あるとジャンプしたい時に便利。いつも何気なく利用しているのでふとした瞬間に無いと戸惑う。

![スクリーンショット 2016-02-02 20.13.56.png](https://qiita-image-store.s3.amazonaws.com/0/24510/f9739ee7-3a65-85cd-e3b2-3b836475c0c5.png)


# Tabs - Custom Working
開いているファイルのタブ表示。
他のエディタと見た目が揃う＆直感的に今見ているファイルがわかりやすい。

![スクリーンショット 2016-01-28 21.11.13.png](https://qiita-image-store.s3.amazonaws.com/0/24510/0fbba975-3b95-2e79-6b18-d0d877db0ec1.png)


# Indent Guides
インデントガイドを表示する。
DOMの階層を把握しやすいのでおすすめ。

![スクリーンショット 2016-01-28 20.37.35.png](https://qiita-image-store.s3.amazonaws.com/0/24510/d2540ffd-b4de-8bf8-7f75-56541cd3ae18.png)


# Brackets Css Color Preview
CSS内のカラープレビューを行番号横に表示する。

![スクリーンショット 2016-01-28 21.06.01.png](https://qiita-image-store.s3.amazonaws.com/0/24510/3843eb13-b1a4-cdf9-eaa1-e9246c2c2bac.png)


***

公開された当初から気になっていたBracketsですが、思ったよりも便利だった。
（ライブリロードをボタンひとつでやってくれちゃったり痒いところに手が届く感じ）
紹介した以外にもプラグインは山ほどあるので試してみるのが一番。
あと定番のExtract for Bracketsですが、PSDをオンライン上にアップロードが必要だったり、日本語に弱かったりしたため上記には含めませんでした。
結局PSDはPhotoshopで開くのが一番かなー。今後のアップデートに期待。
nginxのaccess.logに記録される時間はログに書きこまれた時間

# まとめ

nginxのaccess.logに書かれる時間はリクエストを受けた時間だとずっと思っていましたが、実はリクエストを処理した後にログに書かれる時間だったというお話です。

## 経緯

```
# cat /var/log/nginx/access.log
127.0.0.1 - - [02/Feb/2016:10:56:06 +0000] "GET /sleep.php HTTP/1.1" 200 29 "-" "curl/7.40.0" "-"
```

4カラム目の時間、アクセス時間と説明してあるWebがよくあります。で、当初そういうものなんだろうとおもっていましたが、確認してみるとどうやら違うようでした。ということで確認してみました。

## 確認方法

簡単なPHPプログラムをつくってみました。時間を表示して、10秒sleep、さらに時間を表示します。

```
# cat  /usr/share/nginx/html/sleep.php
<?php
   echo date('h:i:s') . "\n";
   sleep(10);
   echo date('h:i:s') . "\n";
?>
```

そして実行

```
# date; curl http://test:8080/sleep.php ; date
Tue Feb  2 10:55:56 UTC 2016
10:55:56
10:56:06
Tue Feb  2 10:56:06 UTC 2016
```

curlの実行にはほぼ時間はかかっておらず、実行前が10:55:56、実行後が10:56:06になっています。そしてアクセスログ確認

```
# cat /var/log/nginx/access.log
127.0.0.1 - - [02/Feb/2016:10:56:06 +0000] "GET /sleep.php HTTP/1.1" 200 29 "-" "curl/7.40.0" "-"
```

実行後の時間が記録されていることがわかります。

## Apacheの場合は、アクセス時間が記録される

論より証拠、同じ方法でためしてみましょう。nginxのかわりにapache2を起動します。

```
# service nginx stop
Stopping nginx:                                            [  OK  ]
# service httpd start
Starting httpd:                                            [  OK  ]
```

アクセスしてみます。

```
# date; curl http://test/sleep.php ; date
Tue Feb  2 11:05:52 UTC 2016
11:05:52
11:06:02
Tue Feb  2 11:06:02 UTC 2016
# cat /var/log/httpd/access_log
127.0.0.1 - - [02/Feb/2016:11:05:52 +0000] "GET /sleep.php HTTP/1.1" 200 18 "-" "curl/7.40.0"
```

アクセス直後の時間が表示されていますね。ということで時間がかかる処理をしている方はご注意ください。