OmniAICreator/Qiita-1.07M huggingface dataset:
company-ternを使ってemacsでjavascriptの補完


[company-modeの紹介記事はこちら](http://qiita.com/sune2/items/b73037f9e85962f5afb7)

# 概要

[tern](http://ternjs.net/)は，javascriptのコード解析エンジン．
[company-tern](https://github.com/proofit404/company-tern)は，company-modeでternの補完を使うためのbackend．

![test.gif](https://qiita-image-store.s3.amazonaws.com/0/81323/f98e85f2-21e1-e058-d0fe-fc426888a54b.gif)

# インストール
## ternサーバ
npmを使う

```
$ npm i -g tern
```

## company-tern
MELPAからインストール可能．

```
M-x package-install RET company-tern RET
```

これで`tern-mode`も一緒にインストールされるはず．

# 設定

## サーバ側

ternサーバの設定は`~/.tern-config`に書く．`.tern-config`は以下のような形式である．

```json
{
  "libs": [
    "browser",
    "jquery"
  ],
  "loadEagerly": [
    "importantfile.js"
  ],
  "plugins": {
    "requirejs": {
      "baseURL": "./",
      "paths": {}
    }
  }
}
```

詳しくは[公式ページ](http://ternjs.net/doc/manual.html#configuration)参照．
プロジェクト単位で設定したい場合は`.tern-project`に設定を書く．

## emacs側

```el
(setq company-tern-property-marker "")
(defun company-tern-depth (candidate)
  "Return depth attribute for CANDIDATE. 'nil' entries are treated as 0."
  (let ((depth (get-text-property 0 'depth candidate)))
    (if (eq depth nil) 0 depth)))
(add-hook 'js2-mode-hook 'tern-mode) ; 自分が使っているjs用メジャーモードに変える
(add-to-list 'company-backends 'company-tern) ; backendに追加
```

`company-tern-property-marker`は[company-ternのREADME](https://github.com/proofit404/company-tern#usage)にある通り，そのオブジェクト自身のプロパティであるときのマーカだが，とりあえず表示しないようにした．
また，[issue](https://github.com/proofit404/company-tern/issues/13)にあるような現象が自分も発生したので`company-tern-depth`を再定義してる．
今後のアップデートで必要なくなると思う．

### company-dabbrev-codeと併用

javascriptは言語の性質上，どうしても意図した補完候補が用意されないことがある．
そこで，現在開いているバッファからキーワードを拾ってくる`company-dabbrev-code`を併用すると良い．
この場合，backendの設定は，

```el
(add-to-list 'company-backends '(company-tern :with company-dabbrev-code))
```

となる．
このとき補完候補は`company-tern`由来のものが上に表示されてほしいので，
`company-transformers`に`company-sort-by-backend-importance`を設定すると良い．
詳しくは[こちら](http://qiita.com/sune2/items/b73037f9e85962f5afb7#company-transformers)．

# tern-modeのショートカットキー

* `M-.` 定義ジャンプ
* `M-,` 定義ジャンプから戻る
* `C-c C-r` 変数名のリネーム
* `C-c C-c` 型の取得
* `C-c C-d` docsの表示


# 日本語（マルチバイト）対応

どうも，ファイルに日本語(マルチバイト文字)が含まれると正常に動作しないらしい．
これはemacs側の問題でなく，ternサーバ側の問題のよう．
一応，大体うまく動くようだが，docsに日本語が含まれると`tern-get-docs`や`tern-find-definition`がうまく動かない．

補完すらうまく動かない場合は，`buffer-string`内のマルチバイト文字を適当な半角文字に変換する関数を定義して，`tern.el`の中の`buffer-string`をその関数に置換すれば補完は動くはず．
solr の CoreAdmin API について


CoreAdmin API はどういう動きをするのかマニュアルを見てもよくわからんところがあるので、調べてみました。

注意： Solr 4 の時代のものです。Solr 5 系から改善されているかもしれません。

# STATUS
各コアごとのインスタンスディレクトリなど様々な情報を返してくれます。

# CREATE
コアの作成を行うAPI です。このAPI 仕様はなかなか難しい仕様になっている。

```
http://localhost:8983/solr/admin/cores?action=CREATE&name=coreX&instanceDir=path_to_instance_directory&config=config_file_name.xml&schema=schema_file_name.xml&dataDir=data
```

上のような感じで叩くそうだが、api にパラメータを渡してコアを作成するのではなく、サーバー上にある設定ファイルへのパスを指定して作成するそうだ。

これはいけてなさすぎる。使用するとしたらサーバーの設定に深く依存しないようにするために STATUS を取得する　API からに入っている instanceDir などを利用して作成したほうがいいのかもしれない。私はそもそもこのAPIを使うことを諦めてしまった。

# RENAME
そのまま。コアの名前を変える。すでに存在するコア名を指定したら、コアが上書きされるものの、datadir は上書きしたものと同じになる、という挙動をする（つまり SWAP したあとに UNLOAD したのと同じ）

# MERGE
インデックスを統合します。重複チェックは行われていないようで、同じコアに２回マージするとドキュメント数が倍になります。

データに対する操作なので、レプリケーションでスレーブにも同期されます。

データを反映させるのは commit する必要があります。

# SWAP 
指定したコア同士でdatadir をすり替えます。すり替える際はリクエストを捌くのを止めることなく、切り替えることができるます。

SWAP は API を実行したサーバーのみで反映され、スレーブでは SWAP を実行しません。ただスレイブからはマスターのすべてのデータが入れ替わったように見えるので、swap を行ったコアについてすべてのデータをマスターからスレイブに対して転送されます。

注意点はこの SWAP を実行しても状態が変化したただけで Solr の設定ファイルも一緒に変化したわけではないので、SWAP 後に Solr を restart すると SWAP する前の状態に戻ります。（これ怖い・・。
サイコロの配置に関する問題を乱数を使って解く(AOJ ITP1_11_B/C)

承前 : [サイコロの回転をシミュレート(AOJ ITP1_11_A)](http://qiita.com/EqualL2/items/e69b9c90b267ea583e43)

#問題の概要
##[ITP1_11_B](http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_11_B)
前提:サイコロの各面の数字として、6つの数が与えられる。
問題:上の数からなるサイコロを適当に回転したときの上面と前面の数字が与えられる。右面の数字を出力せよ。
##[ITP1_11_C](http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_11_C)
前提:2つのサイコロの各面の数字として、それぞれ6つの数が与えられる。
問題:2つのサイコロが同一(適当に回転させたとき面の配置が一致する)か調べよ。

#乱数を用いる動機
この問題には決定的な解法はもちろんある(はず)。
しかし、私は昔から空間認識系の問題(小学校でやった、展開図とかのあれ)が大の苦手で、どうにも解法が浮かばない。

じゃあ実際に転がして確かめればいいじゃん、という発想。

#やり方
##ITP1_11_B
上面と前面が一致するまでひたすら回転。
一致したところでその時の右面の数字`d[2]`を返す。
(停止しない可能性があることに注意)
※`d[0]`は`d`の現在の上面の数字を、`d[1]`は前面の数字を返す

```cpp
int p_r(dice d,int up,int front){
    auto rgen = std::bind(
        std::uniform_int_distribution<>(0,3),std::mt19937(time(nullptr))
    );
    char dir[]={'N','E','W','S'};
    while(up!=d[0]||front!=d[1]){
        d.mov(dir[rgen()]);
    }
    return d[2];
}
```
(この関数名当時の私はどう考えて付けたんだろう…意味が分からん)

##ITP1_11_C
適当な回数だけ転がして配置が一致すれば同じものとする。
(どれだけ回数を増やしても誤答を返す可能性があることに注意)

```cpp
bool issame(dice d1,dice d2){
    auto rgen = std::bind(
        std::uniform_int_distribution<>(0,3),std::mt19937(time(nullptr))
    );
    int i=0;
    while(i<100){
        d1.mov(dir[rgen()]);
        if(d1==d2)return true;
        i++;
    }
    return false;
}
```

このために`dice`に次の演算子オーバーロードを追加した。

```cpp
bool dice::operator==(dice d){
    for(int i=0;i<6;i++){
        if(v[i]!=d[i])return false;
    }
    return true;
}
```

#感想
高速演算さまさま。

暇な人がいたら決定的な解き方教えてください。
Xamarin.iOS でタイトルバーの色を変えるには


> 本記事は [Xamarin.iOS でタイトルバーの色を変えるには - Xamarin 日本語情報](http://ytabuchi.hatenablog.com/entry/2015/06/26/000527) の転載記事です。

こんにちは。エクセルソフトの田淵です。

[Xamarin.Forms で NavigationBar の色を変更する - Xamarin 日本語情報](http://ytabuchi.hatenablog.com/entry/2015/06/24/135407) で Xamarin.Forms で NavigationBar の色を変える方法をご紹介しましたが、Xamarin.iOS での方法を載せていませんでしたｗ

> Android のバーの色を変更する方法は  
[Android 5.0 以上のみを Material Design にするには ](http://ytabuchi.hatenablog.com/entry/2015/04/30/002909) と  
[Material Design v7 AppCompat を使用するには](http://ytabuchi.hatenablog.com/entry/2015/04/28/212118) を  
ご参照ください。


# Xamarin.iOS のステータスバーの文字色を変更するには

Xamarin.Forms と同じく info.plist などの修正は必要です。

info.plist を開きソースタブに移動して、新しい値を追加し `View controller-based status bar appearance` の bool 値を No にします。
<img src="http://cdn-ak.f.st-hatena.com/images/fotolife/y/ytabuchi/20150624/20150624132117.png" width="450" />

アプリケーションタブで Status Bar Styles を変更します。
<img src="http://cdn-ak.f.st-hatena.com/images/fotolife/y/ytabuchi/20150624/20150624132131.png" width="450" />


Windows の Visual Studio は GUI で編集できる info.plist の情報が限られているので、テキストエディタでファイルを開き、

```
<key>UIStatusBarStyle</key>
<string>UIStatusBarStyleLightContent</string>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
```

を `<dict></dict>` の最後に追加します。


ここからが今回の本編です。

# Storyboard での変更

Storyboard を開き `Navigation Controller` の上のバーをクリックすると右側の `Widget` の `Navigation Bar` に `Bar Tint` (バー色) と `Title Color` (文字色) を変更します。

<img src="http://cdn-ak.f.st-hatena.com/images/fotolife/y/ytabuchi/20150624/20150625234510.png" width="450" />

Visual Studio でも同様の操作で変更できます。


# Xamarin 気になった方は

是非 [ダウンロード(直接)](http://xamarin.com/download) / [ダウンロード(弊社経由)](https://www.xlsoft.com/jp/products/download/index.html?option=Xamarin&r=ythb) して触ってみてください。
[学習用リソース](http://ytabuchi.hatenablog.com/entry/2014/08/26/191759) や [JXUG リンクページ](http://jxug.org/links.html) に参考資料を纏めてますので併せてどうぞ。

<a href="http://blog.hatena.ne.jp/ytabuchi/ytabuchi.hatenablog.com/subscribe">Xamarin の情報が欲しい方はこのブログも購読いただいたりすると嬉しいです。</a>

以上です。
company-jediを使ってemacsでpythonの補完


[company-modeの紹介記事はこちら](http://qiita.com/sune2/items/b73037f9e85962f5afb7)

# 概要

[jedi](https://github.com/davidhalter/jedi)は，pythonの補完用ツール．
[company-jedi](https://github.com/Sarcasm/company-irony)は，company-modeでjediの補完を使うためのbackend．

![python_screencast.gif](https://qiita-image-store.s3.amazonaws.com/0/81323/da706e54-3eec-2d34-1036-77237c9f5386.gif)
# インストール
MELPAからインストール可能．

```
M-x package-install RET company-jedi RET
```

company-jediで必要なのはjedi-coreパッケージで，jediパッケージはいらないので注意．
jediパッケージはauto-complete用でむしろ邪魔．

# 設定

```el
(require 'jedi-core)
(setq jedi:complete-on-dot t)
(setq jedi:use-shortcuts t)
(add-hook 'python-mode-hook 'jedi:setup)
(add-to-list 'company-backends 'company-jedi) ; backendに追加
```

`jedi:complete-on-dot`を`t`にすると`.`を入力したときにも（メソッドを）補完してくれる．
`jedi:use-shortcuts`を`t`にすると以下のショートカットキーが使える

- `M-.` 定義へジャンプ
- `M-,` 定義ジャンプから戻る

# 使い方

初回実行時のみ，

```
M-x jedi:install-server RET
```

でjediサーバをインストールする．
jediサーバがインストールされる場所は`jedi:environment-root`で指定できる．
Robust estimation of threshold

# Algorithm description
We will describe a robust estimation of threshold for varying intensity. We consider a case to evaluate value of suited threshold $\Delta\left(\mathbf{x}\right)$. If the same value of threshold $n$ is applied to $I\left(\mathbf{x}\right)$, threshold function $T\left(n,I\left(\mathbf{x}\right)\right)$ is written as follows,

```math
T\left(n,I\left(\mathbf{x}\right)\right)	\equiv	\begin{cases}
1 & I>n\\
0 & {\rm otherwise}
\end{cases}.
```

 To estimate $\Delta\left(\mathbf{x}\right)$, we define kernel $h\left(\mathbf{x}\right)$ which satisfies a suited criterion we decide. Convolution between $h\left(\mathbf{x}\right)$ and $T\left(n,I\left(\mathbf{x}\right)\right)$ is written as follows, 

```math
  f\left(\mathbf{x},n\right)	\equiv	h\left(\mathbf{x}\right)*T\left(n,I\left(\mathbf{x}\right)\right).
```
 Though the many $h\left(\mathbf{x}\right)$ is considered for each of the criterions, we use an add-hoc criterion as follows, 
  
```math
  h\left(\mathbf{x}\right)	=	\begin{cases}
1 & \mathbf{x}\in\left\{ \mathbf{x}|0\leq x\leq a,\ x\in\mathbf{x}\right\} \\
0 & {\rm otherwise}
\end{cases}.
```

 where, $a$ decides kernel size. We decide $\Delta\left(\mathbf{x}\right)$ as such $f\left(\mathbf{x},n\right)=b$. 

 ```math
 \Delta\left(\mathbf{x}\right)	=	\underset{n}{{\rm argmax}}g\left(\mathbf{x},n\right),
g\left(\mathbf{x},n\right)	\equiv	\begin{cases}
1 & f\left(\mathbf{x},n\right)=b\\
0 & {\rm otherwise}
\end{cases}.
``` 

Therefore, if $h\left(\mathbf{x}\right)$, $a$ and $b$ are defined, $\Delta\left(\mathbf{x}\right)$ can be estimated. 

# Implimentation of Test program(very slow):
```python:test.py
import cv2
from numpy import *
from scipy.signal import *

def nothing(x):
    pass


def test_estimate_delta(a,b, wid):

    cap = cv2.VideoCapture(0) 
    flag = False
    while True:
        ret, v = cap.read()
            frame = frame[:,::-1]
    
        lst = []
        h = ones((a,a))
        for i in xrange(0,255): 
            tmp = fftconvolve(where(v >= i, 1,0),h, mode="same")
            lst += [tmp]
        f = array(lst)
        d = arange(len(f))[:,None,None] * ones(f.shape)
        
        thresh = where((f <= b + wid) == (f > t - wid), d, 255).argmin(axis=0)
        thresh = where(thresh == 0, 255, thresh)
        
        v = where(v > thresh, 255, 0).astype(uint8)
        
        
        cv2.imshow("Movie", v)
    
        k = cv2.waitKey(1) 
        if k == 27: 
            break

        cap.release()
    cv2.destroyAllWindows()
capture_camera()
```
Laravel5.1のインストール方法

_※ハンズオン系の勉強会に行く前にインストールを済ませとこうという趣旨の記事です。_

ほぼ[本家](http://laravel.com/docs/5.1)の和訳です。

# Homestead
_本家配布の[homestead](http://laravel.com/docs/5.1/homestead)を利用します。_
_Windows環境の方は、GitBashを推奨します。_

## Composerの準備
_Composer環境の準備は、割愛します。_
_以下のリンクからDLすればとりあえず動きます。_

[Composer公式サイト](https://getcomposer.org)

## Vagrantの準備
_Vagrant環境の準備は、割愛します。_
_以下のリンクからDLすればとりあえず動きます。_
[Vagrant公式サイト](http://www.vagrantup.com/)
[VirtualBox公式サイト](https://www.virtualbox.org/)

`vagrant box add laravel/homestead` を叩きます。

```
==> box: Loading metadata for box 'laravel/homestead'
    box: URL: https://atlas.hashicorp.com/laravel/homestead
This box can work with multiple providers! The providers that it
can work with are listed below. Please review the list and choose
the provider you will be working with.

1) virtualbox
2) vmware_desktop

Enter your choice:
```

`1 -> Enter` を押して次にすすみましょう。  
インストールに失敗した場合は、
`vagrant box add laravel/homestead https://atlas.hashicorp.com/laravel/boxes/homestead`
を叩いてください。

**この段階では、まだ`vagrant up`しません！！**

インストールが完了すると、以下の環境が手に入ります。

* Ubuntu 14.04
* PHP 5.6
* HHVM
* Nginx
* MySQL
* Postgres
* Node (With PM2, Bower, Grunt, and Gulp)
* Redis
* Memcached
* Beanstalkd
* Laravel Envoy
* Blackfire Profiler

## Gitの準備
_こちらもGit環境の準備は割愛します。_

以下のコマンドを叩いて、Homestead環境をダウンロードします。
`git clone https://github.com/laravel/homestead.git Homestead`

叩いたディレクトリ直下に`Homestead`ディレクトリが作成されます。

**まだ`vagrant up`はしません！！！**

## Laravel5.1の準備
Laravelのソースをダウンロードしましょう。
さくっと`Composer`でやっちゃいます。
アプリケーションを配置したいディレクトリで以下のコマンドを叩いてください。

`composer create-project laravel/laravel --prefer-dist`


## Homesteadの準備
環境が手に入ったので、続けてHomesteadの環境を整えていきます。
作成されたHomesteadディレクトリに移動し、初期化用シェルを叩きます。
`cd Homestead`
`sh init.sh`
`init.sh` が完了すると、ユーザーディレクトリ直下に`.homestead`ディレクトリが作成されます。

Vagrantの共有フォルダを設定します。
```
folders:
    - map: ~/{Laravel5.1をcloneしたディレクトリ}
      to: /home/vagrant/Code
```

続いて、`hosts`を書き換えます。

* Macの場合
    * `/etc/hosts`に`192.168.10.10  homestead.app`を追記します。
* Windowsの場合
    * `C:\Windows\System32\drivers\etc\hosts`に`192.168.10.10  homestead.app`を追記します。

この設定により、`vagrant up`後に`http://homestead.app`にアクセスすることでLaravelアプリケーションにアクセスさせることができます。

## Vagrantの起動
おまたせしました！
`vagrant up`を叩いて、`http://homestead.app`にアクセスしましょう。
灰色のLaravel画面がでてきたら、準備完了です！
minecraftのセーブデータを管理するPerlプログラム

# Macでのセーブデータのバックアッププログラム
Perlの勉強を兼ねながらMinecraftのセーブデータをバックアップやリストアするプログラムを作成した。
そのプログラムをGithubに公開した。
[minecraftBackupRestore.pl](https://github.com/chesscommands/Perl/commit/270c37b75840126ce5483349517448f668fe3c89)
GithubとQiitaの両方が初めての利用のため、どのような活用をすればいいのかわからないが、せっかくなのでつたない状態ではあるが一般公開することにした。
※5年ぶりぐらいに、Go言語でセーブデータのバックアッププログラムを組み直してみた(12/10)。


## 免責事項
基本的にこのプログラムはMacOSで作成しているため、MacOSに依存するプログラムになった。


## 使い方
使い方は、2つの引数を指定すればよく、一つ目にバックアップかリストアのどちらかを指定し、二つ目にセーブデータの名前を指定する。
例）minecraftBackupRestore.pl 1 hoge.txt
当然ながら「minecraftBackupRestore.pl」がプログラム本体名になる。
第1引数：
　　　　　1.バックアップ
　　　　　2.リストア
第2引数：
　　　　　hoge.txt
　　　　　⇒このテキストにminecraftのセーブデータ用のディレクトリを指定する。
　　　　　ファイル名はこだわらないが、記述内容を厳密にしなければ機能しないため気をつけること。名前の付け方に間違いがあればバックアップかリストアのどちらも動かないため意識すれば動いていないことに気がつくはず。どうしても名前の記述に不安があるならば直接セーブデータ用のディレクトリを開いて、ディレクトリ名をテキストに貼り付けるしかない。
![minecraft.jpg](https://qiita-image-store.s3.amazonaws.com/0/82414/784a5884-99a5-9189-624f-0c642cc01a67.jpeg)
私の環境では添付写真の名前を使用することに成功した。
　一つ目：新規ワールド
　二つ目：20150703
個人的に2バイト文字の扱いは自信ない。

バックアップ：基本的にデスクトップにtar.gz形式で作成される。
リストア：第2引数のファイルと同じ階層に配置すれば、デスクトップ上に展開される。それを手動でセーブディレクトリに移動する必要がある。
第二引数のファイル：バックアップとリストアで使い回せる。バックアップ後のファイル名を変更した場合はこの限りでない。


## Go言語でのプログラム
学生時代からゲームをしており、未だにゲームをしている。
そのため、勉強し始めたGo言語で今回のプログラムを書き直すことにした。

### GitHubで一般公開
上記Perl言語でのプログラム同様GitHubに公開している。
当時とは違い、Gitも多少は勉強した。
そのため、勉強用のプログラムとは言え、他の勉強用プログラムと分けることができるようになった。

[minecraftBackup](https://github.com/chesscommands/GoLang/tree/minecraftBackup)

具体的に言えば、1つのリポジトリに、複数のプロジェクトを入れ込むことを想定しているため、個々のプロジェクト管理をブランチで分けた。
その運用が成功するか分からないが、物は試しでやってみる。

### 使い方
GitHubに公開しているReadmeファイルに使い方を示しているが、画像を埋め込むことが出来なかったため、今回画像付きで説明することにした。
※必要な説明はReadmeファイルを参照してもらうとして、画像が無ければ分からない部分のみに絞り込んで説明する。

#### 任意のセーブデータのみバックアップ
backup.txtに、バックアップしたいセーブデータ名を記載する必要がある。
以下がセーブデータ用のディレクトリ(セーブデータそのものは2つ)

![一部のbackup.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82414/03583fe2-87e9-ddc7-8c80-5d8eebfd4dec.jpeg)

そのうち1つだけをバックアップしたいため、バックアップテキストに、対象のディレクトリ名を記載する。

![バックアップ対象.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82414/0a345a8d-995f-3aa8-2da8-81c9e1d89895.jpeg)

これで、バックアップするのは"新規 ワールド"だけになる。

![出力結果.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82414/4e415d71-b6c6-a971-a6bb-3870ba3a3879.jpeg)

以上がGoプログラムになる。
	今回は使い回しとはいえ、アルゴリズムもゼロから考えたため、3時間近くかけて完成した(慣れている人であれば30分もかけずに作り上げるだろうが・・・)。

#### 懸念点
異常系は試していない。
そのため、2GB以上のセーブデータはバックアップできない可能性が高い。

#### 本当に使う場合
セーブデータ用のPathは書き換える必要があることだろう。

## 感想
作成した感想：Perlの勉強のために作成したが、大して苦労しなかった。完成までに数週間要したが・・・。

今後の構想：Perl/TkでGUI操作をやりながらバックアップやリストア操作にこぎ着けたいと思っている。
さらに未来： ~~Gitと連携したい。今のプログラムは、バックアップやリストアを実行した場合、上書きをしてしまうためローテートできず世代管理できない。~~

Goプログラムでの今後の構想は、Perlと同じく、GUIで操作できるようになりたい。

以上だ。
AWS CodeCommit入門

## これなんだ
AWS CodeCommit入門してみました。
この辺とか見ながら
http://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-credentials-ssh.html

## 料金
入門するにあたって一番心配は料金だけ。
http://aws.amazon.com/codecommit/pricing/

5ユーザー、50GB、10000requestまで毎月無料
オーバーしたら$1、追加10Gと2000request追加

## CodeCommitの設定
Get started
↓
Repository nameとDescriptionを登録
↓
リポジトリ完成

## IAMの設定
こんな感じのコマンド打ってIAMに鍵登録
鍵の部分はお好みで変えてください。

```
aws iam upload-ssh-public-key --user-name onishi --ssh-public-key-body file://~/.ssh/id_rsa.pub
```

## ~/.ssh/config
先ほどのIAMの設定した鍵のSSHPublicKeyIdをUserの部分に入れる

Host git-codecommit.*.amazonaws.com
  User your-SSH-key-ID

## 接続確認
ssh git-codecommit.us-east-1.amazonaws.com
- 失敗
  - `Permission denied (publickey).`
- 成功

```
Warning: Permanently added the RSA host key for IP address '***.***.***.***' to the list of known hosts.
You have successfully authenticated over SSH. You can use Git to interact with AWS CodeCommit. Interactive shells are not supported.Connection to git-codecommit.us-east-1.amazonaws.com closed by remote host.
Connection to git-codecommit.us-east-1.amazonaws.com closed.
```

## gitからPushしてみる
- gitのremoteを追加する
CodeCommitで作成したリポジトリのSSHを使う
`git remote add origin [リポジトリのSSH]`

- gitでcommitまでとりあえずする
`echo hogehoge >> index.html && git add . && git commit -m 'first commit'`

- git push
`git push origin master`

あとは普通にgitを使うだけ

## 現在予定されている追加機能
- Webhook
- CloudTrailによるログ
- UI追加
TWE-Liteを使う


ミニ四駆にArduinoを載せるのだが、走行中に取得したデータをどうするか検討。
SDカードとかに〜は、走行中に外れそうなので却下。

フラッシュメモリも考えたが、扱った事ないので設計コスト考えると却下。

無線で送って仕舞えばいいんじゃない？と考えたものの、
Xbeeはでかいので、ミニ四駆には不向き。

というわけで、Twe-Liteがベストだなという事で、迷わずチョイス。

親機がUSBで使えるのと、あわよくば2nd親機みたいなものもあってもいいかも。
そんな感じでチョイスです。

##公式サイト

東京コスモス電機(TOCOS)
http://tocos-wireless.com/jp/index.html

便利ツール

ToCoNetSDK
http://tocos-wireless.com/jp/products/ToCoNet/TWESDK.html
・TWE-Liteにプログラムを直接書き込むためのSDK。要eclips。

FTDI VCPドライバー
http://www.ftdichip.com/Drivers/VCP.htm
・USBポートからドライバを経由して書き込むための、USB接続チップ用ドライバ。

TWE-Liteプログラマ
http://tocos-wireless.com/jp/tech/misc/LiteProg/
・残念ながらWindows専用。初期化したり、既存のプログラムを書き換えるのに便利。

CoolTerm
http://freeware.the-meiers.org
・Windowsのテラタームの代替え品。シリアル通信のテストなどで使える。

##設計思想
###Arduino → TWE-Lite

Arduinoでセンシングしたデータをどう無線でデバイスに送るかといった点が基本。
電源はArduino miniを使用するため、TWE-Liteと共用。

基本的にはそれぞれのTXピンとRXピンでシリアル通信をしながら、TWE-Liteで親機とシリアル通信を行うといったもの。

###センサーの電源

基本的には3.3V駆動のものをチョイスするが、5Vでないと使えないセンサーがあった時のために、レベル変換バッファを使用する必要があり。

###2nd親機

一度マシンから情報を取得して、繋がっていれば親機に情報を送るといった流れになるのが好ましい。
2nd親機は、マシンのセッティングなどに直接リーチ出来るようなポジションが好ましい。

##フェーズ１

PWMでのスピードコントローラー、走行データの送信。
送信データは、使用電力(マイコン＆マシン)、マシン温度、間に合えば加速度センサーを積んでジャイロ情報を送信。

##フェーズ２
加速度センサーのデータに基づいたスピードコントロール。モーターの回転数、コースカラーの取得。

##フェーズ３
加速度センサー、モーターの回転数に基づいた走行データの細分化。コースアウトなどの判別、継ぎ目の判断などなど。
フェーズ４

親機2ndの設計。Fabマジクラス用マシンの設計。
Mac用のMcAfeeの再インストールの手順

Mac用のMcAFeeは矢鱈起動不能になる（特にOSアップデートの後とかだと）ので、都度再インストールをしている。
mcafeeの再インストール手順をいい加減まとめといた方が良くなったほど。

尚、Applicationディレクトリ内のアンインストーラ叩くだけだと、再インストール時に、古いファイルを削除してください、のアラートは延々出続けるので、手動で古い設定を削除しなければならない。

（公式サポートの返事）
■ProdustConfigファイルの削除

1.画面上部の[移動]をクリックし、メニュー内の[フォルダへ移動]をクリックします。
2.フォルダへ移動の画面で[　/private/var/tmp/　]を入力し[移動]をクリックします。
3.表示されたフォルダ内の[　ProductConfig　]をゴミ箱へ削除します。
4.再度インストールを行います
（ここまで）

ProductConfig.xmlの位置は環境によっては異なるかもしれない。
直近の対応だと
/usr/local/McAfee/ProductConfig.xml
を消すことで再インストール可になった。
JavaとJavascript それぞれにおける円周率

##Javaにおける円周率

```java:Test01.java

public class Test01 {

 public static void main(String[] args) {
  double x=Math.PI;
  System.out.println(x);
 }

}

```

###コンパイルと実行結果

```
c:\2015>javac Test01.java

c:\2015>java Test01
3.141592653589793

```

###

##

##Javascriptにおける円周率

```js

var x=Math.PI;
console.log(x);//3.141592653589793

```

##環境
ベアボーン:Shuttle XS35GS V3
OS:win7(32bit)
JAVA SE8(jdk-8u45-windows-i586)

##解説
プログラミング言語の勉強してると、「JavaとJavascriptってどう違うか？」って考えたり、人に聞かれたりすることがある。私はプログラミング言語を全く知らない人には「プログラミング言語を食べ物に例えると、JavaとJavascriptはメロンとメロンパンくらい違います。つまり、両方ともプログラミング言語ですが、果物とパンくらい違います」って言いますが、「プログラマーとして技術的にどう違うかを詳細に説明しろ」って言われてたら説明できません。違いを理解をするため、いろんな観点でJavaとJavascriptを比較していこうと思います。

今回はJavaとJavascriptで円周率を使うときを比較します。
JavaとJavascriptの両方で円周率はMath.PIを使います。しかし、Mathの意味が違います
JavaのMath:Mathクラス(Mathクラスのメソッドはすべて静的メソッドだからインスタンス生成不要)
JavascritpのMath:Mathオブジェクト

###まとめ

JavaとJavascriptで円周率はMath.PIを使用するがMathの意味がJavaとJavascriptで違う

###
Fortran

##自由形式
１行には132文字までしか書けない

##大文字・小文字
Fortranに大文字小文字の区別はない。

##関数・サブルーチン
関数はそれ自体が変数を返す。``ineger a = func()``ってできるってこと。
サブルーチンは引数に値を代入することで値を返す。サブルーチンが変数を直接返すわけではない。だから上記のようにはできない。

###関数
定義

```func.f90
 型名 function 関数名（[引数,,...])
         引数の定義
  　　　 処理
       end [function]

もしくは

  function 関数名（[引数,,...])
    引数の定義（ここに関数の型名も記述）
    処理
  end [function]
```
呼び出し


```func.f90
 x = myfunc(a,b,c)
```
※ただし、呼び出し元のプログラムに関数名と同じ変数が同じ型で定義されてなければならない。

###サブルーチン
定義
引数ははじめは普通に使って、２行目で色々定義する

```subroutine.f90
  subroutine サブルーチン名（[引数,,...])
    引数の定義
　  処理
  end [subroutine]
```

呼び出し

```subroutine.f90
call mysub(a,b,c)
```

##getarg,iargc
コマンドライン引数にアクセスするためのサブルーチン（getarg）と関数（iargc）
ここではgetargについて書く。iargはググってhttps://docs.oracle.com/cd/E19205-01/820-1201/aetdg/index.html

こうやって呼び出す。

```
call getarg(k,arg)
```
kは引数のint番号。0がコマンド名に相当し、１つ目２つ目...の引数が1,2...となる。
argにその引数が出力される。

##write,print,read 
http://www.nag-j.co.jp/fortran/FI_14.html
これ見てがんばって
readでx使うとその分スキップって扱いっぽい
フォーマットを指定して代入したい時もreadが便利

##空白削除

```
trim(adjustl([string変数なにか]))
```
trimは後ろの空白を、adjustlは前の空白を消す。


##open

```
open([装置番号],file=[file],form=[form],access=[access],recl=[],status=[],iostat=[])
```
fileまでは普通とする。
formはフォーマットを決められる。
access='direct'は直接探査法式を示す。どのような順番でも読み取ることができる。ただし、すべてのレコードが固定長である必要がある。unformatted,directにするとバイナリ形式での読み込みになる。
reclはひとつのレコードのバイト長を示す。``バイト数×縦ピクセル数×横ピクセル数``みたいな感じで使用。
statusは元のファイルがあったらどうするかを決める。
iostatはi/oエラー発生したらなんて変数に状況を書きこむかを定める。

* 停留読み取りの際に記録終了条件が発生した場合，値 -2。
* ファイル終了条件が発生した場合，値 -1。
* 通常の完了の場合，値 0 (エラー状態，ファイル終了条件，記録終了条件のいずれでもない場合)。
* エラー状態が発生した場合，正の整数値。


##omp
並列計算をするためのもの。
いろいろやるには`!$ use omp_lib`が必要。

```
!$omp parallel
 !ここが並列化される
!$omp end  parallel
```
並列化されたところは全部のスレッドで同じ処理が行われるので注意。
さらに、同じ処理は、同じメモリを参照するために、変数が随時置き換えられてしまうのでそれにも注意。
それされたくなければ、配列にして`i(omp_get_thread_num)`ってするとか必要。
か、`thread private`（後述）

また、並列部に

```
!$omp do

!$omp end do
```
ってのを入れるとその部分のdoは並列にThreadに分割してやってくれる

まとめると

```
!$omp parallel
!$omp do
  do なんとか〜
!$omp end do
!$omp end  parallel
```
って書く。

```
!$OMP PARALLEL DO
 DO なんとか~
!$OMP END PARALLEL DO
```
でも同じ。

###THREAD PRIVATE
並列処理すると、同じ変数を別のスレッドで同時に使うことになる。
そうすると、スレッド同士で変数の上書きあいが行われる。
それを回避するためにこれを使う。

```
!$ SAVE                           ix, jx, jy, imy
!$OMP THREADPRIVATE             ( ix, jx, jy, imy)
```
こんなふうにすればここに挙げた変数はスレッドごとに置かれる。
ただし、ループの繰り返し制御変数はそもそも連れっどごとに分けて配分されるので入れてはいけない。

####ただし配列はこれだとダメ
要素数を定義してからじゃないといけないので，allocate後，実際のループの箇所で以下のようにする

```
!$OMP PARALLEL DO private(!配列名（カッコはなし。コロンもなし。）!)
```
さくらのVPSにjenkinsをインストールして、テストOKで自動デプロイする環境を構築する(4)

# サーバーの現状
これまで以下の作業を終えた状態。

* Jenkinsのインストールと初期設定
[さくらのVPSにjenkinsをインストールして、テストOKで自動デプロイする環境を構築する(1)](http://qiita.com/inaka_phper/items/f264401ed7a0bc25f407)

* GitHubにPushしたらJenkins動かす
[さくらのVPSにjenkinsをインストールして、テストOKで自動デプロイする環境を構築する(2)](http://qiita.com/inaka_phper/items/f37c71b5bc0a7ba57157)

* GithubにPushしたらサーバーに自動デプロイ
[さくらのVPSにjenkinsをインストールして、テストOKで自動デプロイする環境を構築する(3)](http://qiita.com/inaka_phper/items/fcb46982b3b74afe1e2c)

# 今回やること
[目指す完成形](http://qiita.com/inaka_phper/items/f264401ed7a0bc25f407#%E7%9B%AE%E6%8C%87%E3%81%99%E5%AE%8C%E6%88%90%E5%BD%A2)でいう
6.テスト結果をSlackのプロジェクトチャンネルに通知
の作業をします。

# 実現方法
今回もjenkinsのプラグインに「Slack Notification Plugin」があるので、ありがたく使わせていただきます。

# 作業
先に個人用にSlackのチーム作っておいた。
チャットサービスのはずなんだけど、ずっと一人運用するってどうなんだろう？

## Slackの設定
IntegrationsからJenkins CIを設定する。
1. IntegrationsにJenkinsさんがいるので選択
2. 適当に通知するchannelを選択して設定(通知するchannelはjenkins側でジョブ毎に設定可能)
3. Jenkinsへの設定の仕方が丁寧にスクショ付きで表示されるのでこれに従う。
4. 発行されるtokenをコピーしておく

## Jenkinsさんの設定
Slackで表示された通りの流れで設定する。
プラグイン入れて、基本設定を行ってジョブに通知先と内容を設定する。

1. 「Jenkinsの管理」の「プラグインの管理」を表示して
「利用可能」タブから「Slack Notification Plugin」を検索してインストールする。
2. 「Jenkinsの管理」から「システムの設定」を表示
3. 「Global Slack Notifier Settings」が増えてるので「Domain」と「token」を入れて保存。
URLはデフォでjenkinsのURLが入力されている。
4. 通知を行いたいジョブの設定画面を開く
5. 「Slack Notifications」の項目が増えてるので「高度な設定」をクリック。
6. 通知したい内容にチェックする。
7. Team Domain,Integration Token,Project Channel(#から入れる)を設定する。
8. 「Test Connection」をクリックしてテスト。問題なければSlackに書き込みがある。
9. 「ビルド後処理の追加」で「Slack Notifications」を選択する。
10. 設定を保存。
11. 試しにビルド実行。以下のように通知される。

![jenkins.jpg](https://qiita-image-store.s3.amazonaws.com/0/85113/e5fbe7c6-262b-c534-c2a4-5be769697ec8.jpeg)
何かしら失敗すると左の緑が赤くなる。
GitHubからPushした際は、前回テストから今回取り込んだCommit内容も一式表示されるので
どのCommitのテストか分かりやすい。

# 最低限の目指していた開発環境完成！
さくらのVPS借りて開発するうえで先にやっておきたい最低限の環境が整いました。
slackにはこれ以外にもいろんな通知系の情報を集約していきます。
実務だとサーバー監視系とかいいんですが、個人のVPS1台だけ監視通知してもね…
次はhubotも入れて遊ぼうかな。


![system.jpg](https://qiita-image-store.s3.amazonaws.com/0/85113/e92e4fbb-65db-2695-51d7-15cb87af0727.jpeg)

1. ローカルのVagrant上で開発
2. GitHubにPush(gitflow形式で運用)
3. GitHubに設定するwebhookでjenkinsに通知
4. jenkinsさんがGitHubからソース落とす
5. jenkinsさんがテスト走らせる
6. テスト結果をSlackのプロジェクトチャンネルに通知
7. テストOKで該当環境のDocumentRoot上にデプロイ

# 今回のシリーズ
[さくらのVPSにjenkinsをインストールして、テストOKで自動デプロイする環境を構築する(1)](http://qiita.com/inaka_phper/items/f264401ed7a0bc25f407)
[さくらのVPSにjenkinsをインストールして、テストOKで自動デプロイする環境を構築する(2)](http://qiita.com/inaka_phper/items/f37c71b5bc0a7ba57157)
[さくらのVPSにjenkinsをインストールして、テストOKで自動デプロイする環境を構築する(3)](http://qiita.com/inaka_phper/items/fcb46982b3b74afe1e2c)

# 追記
さらにLaravel&behatでテスト走らせる設定を行いました。
[Laravel5.1でbehatを使ってjenkinsで自動テストする](http://qiita.com/inaka_phper/items/f951297412d3bfa4a0d3)
gifアニメの繰り返し数を設定する

gifsicleを使う．

# インストール
```shell-session
$ brew install gifsicle
```

# 使い方

## `file.gif`の繰り返し数を無限にしたいとき

out.gifに出力するとき

```shell-session
$ gifsicle -l file.gif > out.gif
```

-bオプションを付けることでfile.gifに上書きできる．

```shell-session
$ gifsicle -lb file.gif
```

## `file.gif`の繰り返し数を0（一回再生して終了）にしたいとき

```shell-session
$ gifsicle --no-loopcount file.gif > out.gif
```

## `file.gif`の繰り返し数を指定したいとき

2回繰り返しなら，

```shell-session
$ gifsicle -l=2 file.gif > out.gif
```

このとき，gifアニメは全部で3回再生される．
OSS版 drone.io をソースからビルドする (CentOS 7)

コードをカスタムしたかったので、rpm からではなく、自分でビルドして立ち上げたメモ

Ubuntu な方はこちらの記事を見ると良い。本家も Ubuntu でビルドしているようなのでその方が確実 > http://qiita.com/udzura/items/460827c53c93ddcc28cf

## Goのインストール

golang の最新は 1.4.x であるが、drone は 1.3.x を使ってビルドしているっぽい？ので 1.3.3 を入れることにする。

```
wget https://storage.googleapis.com/golang/go1.3.3.linux-amd64.tar.gz
tar zxvf go1.3.3.linux-amd64.tar.gz
mv go /usr/local/
export PATH=$PATH:/usr/local/go/bin
```

## Droneのチェックアウト

```
export GOPATH=~/.go
export PATH=~/.go/bin:$PATH
mkdir -p ~/.go/src/github.com/drone
cd ~/.go/src/github.com/drone
git clone https://github.com/drone/drone.git
```

## ビルド

cf. https://github.com/drone/drone/blob/master/.drone.yml#L8-L16

```
cd ~/.go/src/github.com/drone/drone
yum install git hg sqlite3-devel
make deps
make test
make build
```

/usr/local/bin にインストール

```
make install
```

ついでに rpm, deb パッケージを作る


```
gem install fpm
make packages
```

これで packaging/output/drone.rpm に rpm ができる。deb もできる。
TWELiteを使うことになったのでメモ


##基礎知識
TWELiteは東京コスモス電機株式会社が出している、ZigBeeを使っている

####ZigBeeとは（ジグビーとは）
ZigBeeとはZigBee Alliance（ジグビーアライアンス）が仕様を定義している省電力で動作する無線規格です。IEEE 802.15.4上で動作します。
ZigBee（ジグビー）は大規模なワイヤレスセンサーネットワーク（WSN）を構築するために策定された規格で、WiFi（ワイファイ）やBluetooth（ブルートゥース）と同じIEEE（アイトリプルイー）という標準規格化団体により物理層とMAC層の仕様が定義されています。
http://tocos-wireless.com/jp/tech/ZigBee/ZigBee.html

##活用事例
####「TWE-Liteトワイライト」と「ToCoStickトコスティック」で カンタン無線制御
https://www.youtube.com/watch?v=MtrDNbydPMI

####スマートフォン(iPod touch) で TWE-Liteをリモートコントロール
https://www.youtube.com/watch?v=S6WeJnf118A

####モータ制御
https://www.youtube.com/watch?v=paoNYMPRi_M

####ラジコンバギーに超スロー走行とブレーキ機能をプラス！ Zigbeeとモータードライバを組み合わせて、市販のラジコンをリアルな走行に改造しよう
http://deviceplus.jp/hobby/201408/

####「新聞受けの見張り番」を作るぞ！
http://monoist.atmarkit.co.jp/mn/articles/1502/19/news006.html

##連携
####Arduino nano + TWE-Lite 
http://shirotsuku.sakura.ne.jp/blog/?p=359

####PCとつなげる方法
http://tocos-wireless.com/jp/products/TWE-Lite-DIP/TWE-Lite-DIP-step3.html

####RaspberryPiとの連携
http://tocos-wireless.com/jp/tech/misc/python_twelite/

##USB アダプター TWE-Lite R（トワイ・ライター）の使い方
####ドライバーインストール

TWE-Lite-Rは、PC上で動作する各種OS（Windows, Linux, Mac OS X）に対応したFTDI社FT-232R が搭載されています。デバイスドライバは以下より入手してください。 
http://www.ftdichip.com/
（Windows7 以降はOSに含まれていますので、原則ドライバのインストールは不要です。）

※ デバイスドライバを導入する際に、TWE-Lite-RをUSBポートに接続する必要がある場合はTWE-Lite DIPを外した状態で行ってください。
http://tocos-wireless.com/jp/products/TWE-Lite-R/index.html

####ドキュメント
http://tocos-wireless.com/jp/products/TWE-Lite-R/TWE-Lite-R_manual_v004.pdf

##その他

####パケットスニファ（パケットアナライザ
http://tocos-wireless.com/jp/tech/sniffer.html


####色々まとまってるページ
http://karaage.hatenadiary.jp/entry/2015/05/20/090000
もしkivyのScreenManagerを.kvファイルなしでやってみたら

# ScreenManagerでScreenを切り替える。

googlabilityの低いkivyだが、.kvファイルを使ったサンプルはいくつもググれたし動かせた。でもデザイン部分？を別ファイル（.kv）に分けるのが苦手なので("Builder.load"とかで内包するのも気持ち悪い)、.pyファイル内で完結しようと思ったら少し嵌った。

kvファイルを使った例はみんな、

```
root.manager.current = "screen_name"

```

みたいになっていて、このroot.managerというのにどうやってアクセスするのか色々試してみて、でてきたエラーでググったら良いコードが見つかったので参考にした。

とりあえずこんな感じ。

```python:ScreenTest.py

import kivy
kivy.require('1.9.0')

from kivy.app import App

from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.label import Label
from kivy.core.window import Window


# first screen
class SC_one(Screen):
    """docstring for SC_one"""
    def __init__(self, name,**kwargs):
        super(SC_one, self).__init__(**kwargs)
        self.screen_manager = kwargs['screen_manager']
        self.name = 'sc_one'
        

    def on_touch_down(self, touch):
        print('sc1')
        Window.clearcolor = (0.5,0,0,1.0)
        self.screen_manager.current = 'sc_two'

# second screen
class SC_two(Screen):
    """docstring for SC_two"""
    def __init__(self, name, **kwargs):
        super(SC_two, self).__init__(**kwargs)
        self.screen_manager = kwargs['screen_manager']
        self.name = 'sc_two'
        

    def on_touch_down(self,touch):
        print('sc2')
        Window.clearcolor = (0.0,0.5,0,1.0)
        self.screen_manager.current = 'sc_one'



class SMApp(App):
    def build(self):
        sm = ScreenManager()
        sm.add_widget(SC_one(name='sc_one', screen_manager=sm))
        sm.add_widget(SC_two(name='sc_two', screen_manager=sm))
        sm.current = 'sc_one'
        return sm

if __name__ == '__main__':
    SMApp().run()



```

なんとなくクラスとインスタンスがわかりかけてきたレベル。
SAN対応 x.509 証明書を取得するためのCSRを作成する

# SAN is ナニ

SubjectAltNameの意で、複数のDNS名(ホスト名)を扱う場合に利用するx.509証明書のオプションです。
これを利用することにより、複数のホスト名を取り扱うx.509証明書を作成できます。

# SAN対応 x.509 証明書を作成する

ここでは以下の2つの階層で利用できる x.509 証明書を発行するためのCSRを作成します。

- test.local
- *.test.local

## openssl-san.conf を作成する

以下の内容でopenssl-san.conf(名称は特に問わない)を作成します。

```text:openssl-san.conf
[req]
distinguished_name=req_distinguished_name
req_extensions=v3_req

[ v3_req ]
basicConstraints=CA:FALSE
keyUsage=nonRepudiation, digitalSignature, keyEncipherment
subjectAltName=@alt_names

[req_distinguished_name]
countryName=Country Name (2 letter code)
countryName_default=JP
stateOrProvinceName=State or Province Name (full name)
stateOrProvinceName_default=Kyoto
localityName=Locality Name (eg, city)
localityName_default=Kyoto
organizationalUnitName=Organizational Unit Name (eg, section)
organizationalUnitName_default=my home
commonName = saitara
commonName_max	= 64

[alt_names]
DNS.1=%HOSTNAME%
DNS.2=*.%HOSTNAME%
```

## ホスト名を環境変数に定義する

後のワンライナーで利用するため、環境変数 HOSTNAME に証明書を作成するためのホスト名を設定します。

```shell-session
$ export HOSTNAME=test.local
```

## CSRを作成する

先に設定した環境変数 HOSTNAME を有効に活用し、取得したい内容のCSRを作成します。
C/ST/L/O/OUなどはご自身の組織などにあわせて変更して下さい。

```shell-session
$ openssl req -new -newkey rsa:2048 -keyout ${HOSTNAME}.key.nopass \
    -sha256 -nodes -extensions v3_req -subj \
    "/C=JP/ST=Tokyo/L=Minato-ku/O=Iret inc./OU=cloudpack/CN=${HOSTNAME}" -out ${HOSTNAME}.csr \
    -config <( cat openssl-san.conf|sed "s:%HOSTNAME%:${HOSTNAME}:g" )
````

以下のようなメッセージが出て、CSRが作成されます。

```
Generating a 2048 bit RSA private key
....................+++
.............+++
writing new private key to 'test.local.key.nopass'
-----
```

# 作成されたものを確認する
## CSR

作成されたCSRを確認します。
(以下に示すものはこのエントリーのために試験的に作成したもので、実際には使われてないものです)

```
$ openssl req -noout -text -in test.local.csr 
Certificate Request:
    Data:
        Version: 0 (0x0)
        Subject: C=JP, ST=Tokyo, L=Minato-ku, O=Iret inc., OU=cloudpack, CN=test.local
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
            RSA Public Key: (2048 bit)
                Modulus (2048 bit):
                    00:e2:b8:a1:91:fa:ca:6b:ad:0d:bb:5a:7b:7c:66:
<略>
                    19:75:31:da:e5:23:1c:67:d9:fa:a7:4a:4a:44:23:
                    d1:9d
                Exponent: 65537 (0x10001)
        Attributes:
        Requested Extensions:
            X509v3 Basic Constraints: 
                CA:FALSE
            X509v3 Key Usage: 
                Digital Signature, Non Repudiation, Key Encipherment
            X509v3 Subject Alternative Name: 
                DNS:test.local, DNS:*.test.local
    Signature Algorithm: sha256WithRSAEncryption
        a1:27:55:64:e6:f6:15:8a:cb:f0:88:70:cc:24:f3:26:ad:ef:
<略>
        c2:51:ba:96:86:97:29:f8:40:5f:f2:33:7d:0e:a2:0a:e5:96:
        8c:5a:89:39
```

ここで

```
            X509v3 Subject Alternative Name: 
                DNS:test.local, DNS:*.test.local
```

と出ているので期待する内容でのCSRであることが確認できます。

## 秘密鍵

作成した秘密鍵にはパスフレーズはないため、必要に応じてパスフレーズの設定をして下さい。
Gemの作り方(入門編)

## はじめに

まずどうやってひな形を作るか。ですがこれは `bundle gem` という、bundlerがデフォルトで提供しているコマンドを利用するのが一番簡単です。

今回はhello_worldという名前でgemを作るので、`bundle gem hello_world`とします。

![スクリーンショット 2015-07-11 22.41.04.png](https://qiita-image-store.s3.amazonaws.com/0/5767/49931964-95ab-81a3-ae5e-3c94b4e64d07.png)

実行すると、このような形でひな形が生成されます。これを使ってgemを開発していくことになります。

## gemspec

Gemの作成でまず大事になるのが `gemの名前.gemspec` というファイルです。例えば上記で生成したひな形だと

```rb
# coding: utf-8
lib = File.expand_path('../lib', __FILE__)
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
require 'hello_world/version'

Gem::Specification.new do |spec|
  spec.name          = "hello_world"
  spec.version       = HelloWorld::VERSION
  spec.authors       = ["Takashi Nakagawa"]
  spec.email         = ["tak1240@gmail.com"]

  spec.summary       = %q{TODO: Write a short summary, because Rubygems requires one.}
  spec.description   = %q{TODO: Write a longer description or delete this line.}
  spec.homepage      = "TODO: Put your gem's website or public repo URL here."

  # Prevent pushing this gem to RubyGems.org by setting 'allowed_push_host', or
  # delete this section to allow pushing this gem to any host.
  if spec.respond_to?(:metadata)
    spec.metadata['allowed_push_host'] = "TODO: Set to 'http://mygemserver.com'"
  else
    raise "RubyGems 2.0 or newer is required to protect against public gem pushes."
  end

  spec.files         = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
  spec.bindir        = "exe"
  spec.executables   = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
  spec.require_paths = ["lib"]

  spec.add_development_dependency "bundler", "~> 1.10"
  spec.add_development_dependency "rake", "~> 10.0"
  spec.add_development_dependency "rspec"
end

```

このような形になります。

Gemの作成では、Gemの基本的な情報をほぼ全て、この `gemspec` に書いていくことになります。

この情報は、Gemを一般に公開する際、他人が見ることのできる情報として公開されるので、Gemを公開したい場合はしっかりと書いておきましょう！とくに `description`や`summary`このgemはなんのためのgemなのか、を伝えるものなので特に大事です。


## ディレクトリ構造

そして肝心のGem本体の実装は `lib/` directoryの中にあります。

ディレクトリ構造はこのようになっており

```
── lib
    ├── hello_world
    │   └── version.rb
    └── hello_world.rb
```


この場合、`hello_world.rb` が本体です。このGemをrequireすると、最初にこのファイルが呼ばれ、次にこのファイルでrequireしているものが呼ばれる、という形になります。
大きいGemになってくるとこのファイルにはほとんど`require` 文しか書かず、あとは `hello_world/` ディレクトリ以下にそれぞれの機能に応じたファイルを作り、実装していくと良いと思います。


version.rbは最初から作られており、単にGemのバージョンを管理するだけのファイルになります。わざわざgemspecに書かずこちらに書いているのは、Gem使用者がgemspecからも、コード(プログラム側)からもバージョン情報を知れるようにするためです。



## 実装

さて、肝心の実装ですが、今回の課題では

```rb
HelloWorld.exec
```


を実行して、 `Hello World!` と出力されればよかったですよね。なので今回は`hello_world.rb`を

```
require "hello_world/version"

module HelloWorld
  def self.exec
    puts "Hello World!"
  end
end
```

こうすればOKです！

## 動作確認

さて、このGemの動作確認をする方法ですが、実はひな形の中の、`bin/` ディレクトリに `console`というプログラムがあります。これをターミナルから実行すると、作成中のGemを読み込んだ状態でirbが起動します。

なので、 `bin/console` を使いirbを起動したのち、

```rb
$ HelloWorld.exec
```

とやってみて、実行されるかどうかを確かめましょう！

もちろん、複雑なGemになってくるとirbだけでは難しくなってきます。その時に初めて `テスト`　というものが重要になってきます。が、この話はまた次回で！
Xcode6のよく使う便利なショートカット集


個人的な覚え書き。随時更新する予定。

##ボタン記号
⌘：Command
⌥：Option
⌃：Control
⇧：Shift
⇪：Caps Lock
fn：Function

【注意】 ^（キャレット）と ⌃（Control）は異なる

## タブ画面の操作
###タブ画面の挿入
⌘：Command + t
###タブ画面の削除
⌘：Command + w
###タブ画面の移動
⌘：Command + [ 
⌘：Command + ]

##履歴操作
###履歴の移動
⌘：Command + ⌃：Control + →
⌘：Command + ⌃：Control + ←

##ナビゲーション操作
###プロジェクトナビゲータ
⌘：Command + 1 
###シンボルナビゲータ
⌘：Command + 2
macにpgAdmin3をインストール

## バイナリを本家サイトからダウンロードする

1.下記サイトからdmgファイルをダウンロード

　　ダウンロード先：
　　http://www.pgadmin.org/download/


2.dmgファイルをダブルクリック

　　フォルダのようなものが開く
　　（pgAdmin3のアイコンが入っている）

3./ApplicationへDrag & Drop
　　インストール完了

## まとめ：windowsとmacとの違い

・windows
　　DBMS本体をインストールするとtoolとしてpgAdmin3も付いてくる。
	
・mac
　　DBMS本体はhomebrewでインストール。
　　pgAdmin3は付いてこないのでアプリケーションとして単体でインストールが必要。



### 参考サイト
バイナリインストール
http://d.hatena.ne.jp/watanata2000/20110506/1304681144
http://blog.syuhari.jp/archives/756
unity > boxing > 異なる型をまとめることができる

```txt:動作確認
C# script
```


boxingというのを使って、objectという型の配列にて色々な型をまとめて扱える。
http://www.atmarkit.co.jp/fdotnet/csharp_abc/csharp_abc_005/csharp_abc03.html

```csharp
object [] test = new object[3];
test[0] = (int)1;
test[1] = (float)0.1;
test[2] = (string)"Hello";

for(int i=0; i<3; i++) {
    Debug.Log("Class=" + test[i].GetType().FullName + " Value=" + test[i].ToString() );
}
```

今まで使ってきた言語ではこういうのはなかった。
main-bower-files に PR を送った話

# main-bower-files に PR を送った話
## 何したの？
* .(ドット)を含むディレクトリが main-bower-files を実行するパスに含まれると、意図した通りに動かない、という話
    * 超シンプルです
    * 変更も簡単すぎてつらい。(けど調査時間は1, 2時間かかった)

* 例
    * /var/.foo/bar/zoo.scss というファイルを main-bower-files を使って scss を inject して欲しい場合。
    * (従来) ディレクトリにドットが含まれると filter の挙動が意図しないものになっていました。(filter に /**/*.scss とか書いても scss のファイルがうまく inject されない)
    * (今回のPRで修正される点) ディレクトリにドットが含まれていても filter の意図通りに inject されます。

## 所感
* ハマった時には痛い話だと思うので今回 PR を送りました。
* 案外サクッと merge してもらえたので、やっぱり「とりあえず PR 送ってみるか」の心構えは大事だと思いました。
    * ダメそうだったら、とりあえず話を聞いてやり直す、とかそういう気持ちで。
* これからも使っているツール類で不便さを感じたら気軽に送ってみようと思います。

## 参考 PR
* https://github.com/ck86/main-bower-files/pull/100
Docker 1.7にUpdateして証明書のエラーが出たら


docker 1.7に気まぐれでupdate.

```
boot2docker stop
boot2docker upgrade
```

見事トラブる.

```
% docker ps
An error occurred trying to connect: Get https://192.168.59.103:2376/v1.19/containers/json: x509: certificate is valid for 127.0.0.1, 10.0.2.15, not 192.168.59.103
```

これで直った.

```
boot2docker ssh sudo /etc/init.d/docker restart
```


https://github.com/boot2docker/boot2docker/issues/824
タブ区切りのファイルを読み込んでデータをハッシュに取り込む

Encoding.default_external = 'UTF-8'
books = {}
File.open("books.txt", encording: "utf-8") do |f|
  f.each_line do |line|
    cols = line.chomp.split(/\t/)
    books[cols[0]] = cols[1]
  end
end

books.each do |key, val|
  puts "#{key}, #{val}yen"
end
赤軸テンキーレスMajestouchキーボードを買った


入力インタフェースだけは毎日使うものなので惜しまず投資しようと思い、高級キーボードの部類をいろいろ調べて、赤軸キーボードを買いました。

## 買ったもの

http://www.diatec.co.jp/products/det.php?prod_c=886
Majestouch BLACK Tenkeyless

- 型番：FKBN91MRL/NFB2
- 赤軸
- テンキーレス
- 日本語配列91キー
- キー前面にアルファベット印刷あり、かな印刷はなし
- 接続はUSB/PS2
- Windowsキーのみ、交換用のキー前面印刷キーが付属し、キートップ印刷版のキーと交換できる

## 買う前の条件

- タイピングが楽であること
たくさん文字を入力しても疲れないこと、これが第一条件。
快適に文字を入力できるものがよいです。


- 入力ミスしにくいこと
僕はキーを一番下まで押し切らずに次の文字入力に行ってしまい、文字入力漏れが多いです。また、ミスタイプも多いほうです。
ですので、できるだけ軽いタッチで入力でき、ミスタイプの減るようなものを探しました。


- タイプ音が静かなこと
同じキーボードをもう一つ買って会社でも使いたかったため、あまりうるさいメカニカルは避けたい。


- 日本語配列
慣れている日本語配列のほうが記号が入力しやすいです。よく使うアットマークがシフトを押さずに入力できるものポイント高い。


- ファンクションキーがあること、テンキーがないこと
省スペース化のために、使用頻度の低いテンキーレスがよい。しかし、ファンクションキーはよく使うので、独立したものがよかった。ESCと半角キーも独立しておいて欲しかった。

## そして、買った
![sivOZcLUY-EeEBrb0IaCgqDHlqmsFIyn9epVzofMMn4.jpg](https://qiita-image-store.s3.amazonaws.com/0/85886/fa54a82e-399d-ff22-6dc5-705850c2d077.jpeg)

## 買った後でよかったなと思った点
まず、買う前の条件はすべて見たしており、非常にタイピングがスムーズになりました。
それ以外に良かった点。

- ずっしりと重く、キーボードがずれない
キーボードの重量がしっかりあり、タイピングのときにずれることがまずありません。また、裏の滑り止めもかなりしっかりしていて、斜面に置いても滑らない感じでした。


- キー表面に印刷がなくさらさらする
全然意図していなかったのですが、キーの表面に印刷がないと、印刷のざらつきを感じることがなく、とても心地よいです。キートップはさらさらした感じで、ずっと触っていたい感じ。

## そうでもなかったなと思った点
- キーの印刷がちょっと見にくい
ブラインドタッチできる人であれば気にならないでしょうが、キー前面に印刷されているため、記号とかがちょっと見にくいです。ただ、慣れでなんとかなりそうです。


- ケーブル直結式
なので、ケーブル断線がちょっと気になります。


## そして、CtrlとCapsを入れ替えた

http://ascii.jp/elem/000/000/927/927191/
を実施した。

## さいごに
とてもタイピングが快適になりました。使用頻度や何年も使えることを考えるとコスパの良い投資ではないでしょうか。
github ssh公開鍵登録

#ssh key 作成
ssh-keygen -t rsa -C "email adress"
#公開鍵の登録
setting→ssh keyから公開鍵内容を登録
#GitHubとの通信認証
接続元から下記コマンドを実行、
ssh -T git@github.com

Hi [ユーザー名] You've successfully authenticated, but GitHub does not provide shell access.と表示されれば成功
JavaZone Movies

JavaZone 2019: The J-Team
https://www.youtube.com/watch?v=mRQTIrmFOEA

JavaZone 2018: Stranger Strings
https://www.youtube.com/watch?v=EAH3i6l8PbY

JavaZone 2014: Game of Codes
https://www.youtube.com/watch?v=3vI_7os2V_o

JavaZone 2013: Javapocalypse
https://www.youtube.com/watch?v=E3418SeWZfQ

JavaZone 2012: The Java Heist
https://www.youtube.com/watch?v=HXvm76e2X1Q

JavaZone X : The Streaming (2011)
https://www.youtube.com/watch?v=5U1_KW6ww7Y

Java Forever And Ever Movie (Java vs Windows .Net) (2010)
https://www.youtube.com/watch?v=RnqAXuLZlaE

LadyJava Music Video for JavaZone (2010)
https://www.youtube.com/watch?v=1JZnj4eNHXE
ホストマシン外からアクセスできるVagrant内のGitサーバ構築メモ

# 環境

ホスト：Windows 7
仮想マシン：CentOS 6.6


# 概要

* VagrantでGitサーバを構築し、ホストマシン以外からGitサーバへ接続できるようにする。
* Gitサーバへの接続プロトコルはSSHを利用する。<br>
https://git-scm.com/book/ja/v1/Git-%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC-%E3%83%97%E3%83%AD%E3%83%88%E3%82%B3%E3%83%AB
* 内部ネットワークからのみ動作確認を行っていますが、ルータのポートを開放すればWAN越しに公開もできるかと思います。


# 構築手順

## Vagrantで仮想マシンの作成

Vagrantfileに下記を追記し、ホストマシン以外から仮想マシンのGitサーバのポートへ接続できるようにする。

```rb:Vagrantfile
config.vm.network "forwarded_port", guest: 22, host: xxxxx
```

※ホストマシンのポート番号については`netstat -an`等を使用して空きポートを確認して設定してください。
※外部から接続する際にはホストマシンのポートを開放する必要があります。
http://27bit.com/os-7-port.html

編集後、仮想マシンを起動してください。

```bash
vagrant up
```

仮想マシン起動後、`netstat -an`で指定ポートがリッスンしているか確認してください。(TCPの0.0.0.0:xxxxxがLISTENINGとなっているはずです)


## Gitサーバ構築

### Gitのインストール

SSHで仮想マシンへ接続後、Gitをインストールする

```bash
sudo yum install -y git
```

### Gitユーザの作成

```bash
# git-shellはGitに関する作業しかできない制限付きシェル
sudo useradd -s /usr/bin/git-shell git
cat /etc/passwd | grep git

# 公開鍵登録用のファイルを作成
#  - authorized_keysにはgitユーザ用の公開鍵を登録してください
#      ssh-keygen -b 2048 -t rsa -f ./id_rsa
sudo mkdir /home/git/.ssh
sudo vi /home/git/.ssh/authorized_keys
sudo chown -R git:git /home/git/.ssh 
sudo chmod 700 /home/git/.ssh 
sudo chmod 600 /home/git/.ssh/authorized_keys
```

### Gitリポジトリの作成

```bash
# Gitリポジトリ格納用ディレクトリの作成
sudo mkdir /var/git

# リポジトリの作成
sudo mkdir /var/git/test.git
cd /var/git/test.git/
sudo git init --bare
sudo chown -R git:git ./
```

## 外部からリポジトリをクローンする

```bash
git clone ssh://git@[host]:[port]/var/git/test.git
```

※パスはルート(/)から指定する必要あり
RedmineにBacklog Pluginを入れる

#Redmineのインストール

私の過去記事を参考に実施してください。
http://qiita.com/gitya107/items/8a876ad2ea67335c3364

#Backlog Pluginのインストール

下記URLに従って入れます。
http://www.redminebacklogs.net/en/installation.html

必要なパッケージのインストール
`gem install holidays --version 1.0.3`
`gem install holidays`
`sudo yum install -y libxml2 libxml2-devel libxslt libxslt-devel`

GitHubからBacklogをダウンロード
`git clone git://github.com/backlogs/redmine_backlogs.git`

ダウンロードしたファイルをredmineのプラグイン配下に移動
`sudo mv redmine_backlogs /var/lib/redmine/plugins`
`sudo chown -R apache:apache /var/lib/redmine/plugins/redmine_backlogs`

プラグインのフォルダに移動
`cd /var/lib/redmine/plugins/redmine_backlogs`

バージョンの表示
`git tag`

表示されたバージョンから選択します。とりあえず最新にしてみました。
`sudo git checkout v1.0.6`

インストールしたときにredmineフォルダをapacheユーザのものに権限変更してたなぁ
ゴリオシの対応
`sudo usermod -d /home/apache -s /bin/bash apache`

以降いじるフォルダはapacheユーザのものなので、ユーザ切り替え
`sudo su - apache`

環境変数の設定
`RAILS_ENV=production`
`export RAILS_ENV`

redmineインストールフォルダへの移動
`cd /var/lib/redmine`

何かnokogiriのバージョンがエラーなったので対応。。。。
`gem install nokogiri -v '1.5.11'`

nokogiriのバージョンUP。いっつもnokogiriで問題なるよなぁ
`bundle update nokogiri`

```
bundle install
bundle exec rake db:migrate
bundle exec rake tmp:cache:clear
bundle exec rake tmp:sessions:clear
```

Backlogのインストール
`bundle exec rake redmine:backlogs:install`

1 2 3を選んでみる

```
2.5.1.stable. You are running backlogs v1.0.6, latest version is 1.0.6

=====================================================
             Redmine Backlogs Installer
=====================================================
Installing to the production environment.
Fetching card labels from http://git.gnome.org...done!
Configuring story and task trackers...
-----------------------------------------------------
Which trackers do you want to use for your stories?
  1. バグ
  2. 機能
  3. サポート
Separate values with a space (e.g. 1 3): 1 2 3
You selected the following trackers: バグ, 機能, サポート. Is this correct? (y/n) y
-----------------------------------------------------
Creating a new task tracker.
```

何かトラッカーの名前入れてみる

```
Please type the tracker's name: test
You typed 'test'. Is this correct? (y/n) y
Story and task trackers are now set.
Migrating the database...** Invoke redmine:plugins:migrate (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute redmine:plugins:migrate
** Invoke db:schema:dump (first_time)
** Invoke environment
** Invoke db:load_config (first_time)
** Execute db:load_config
** Execute db:schema:dump
** Invoke redmine:backlogs:fix_positions (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute redmine:backlogs:fix_positions
done!
Installation complete. Please restart Redmine.
Thank you for trying out Redmine Backlogs!
-bash-4.1$
```

元のユーザに戻る
`exit`

サービス再起動
`sudo service httpd restart`

何か出来たっぽいです（笑）
あとで確認しよう。。。
gulp 実行時のタスク名をタブキーで補完

gulp にはタスク名をタブキーで補完できるようにスクリプトが用意されていて、
.bashrc に下の一行を追記すれば `node_modules/gulp/completion/bash` が実行され
タブキーによるタスク名の補完が出来ます。

```bash:.bashrc
eval "$(gulp --completion=bash)"
```

参照：
https://github.com/gulpjs/gulp/blob/master/completion/README.md

しかし、タブキーが押されるたびに毎回内部では `gulp --tasks-simple` が実行されているので私の環境では非常に重いです。

そこで、自前ででっち上げました

```bash:.bashrc
function _gulp_completions() {
    # The currently-being-completed word.
    local cur="${COMP_WORDS[COMP_CWORD]}"
    #Grab tasks
    local compls=$(grep task gulpfile.js | sed -e 's/gulp.task(.//' -e 's/.,.*//' -e '/default/d')
    # Tell complete what stuff to show.
    COMPREPLY=($(compgen -W "$compls" -- "$cur"))
}

complete -o default -F _gulp_completions gulp

```

これで `gulp <TAB><TAB>` と打てばタスク一覧が表示され、
先頭の一文字以上打って `<TAB>` を押せば残りを補完してくれます。
サクサク補完されるので、作業効率も上がります。
osx application data location

https://support.apple.com/kb/PH13985?locale=en_US

# ibooks
~~~
~/Library/Containers/com.apple.BKAgentService/Data/Documents/iBooks
~~~

# Stickies
~~~
/Users/Al/Library/StickiesDatabase
~~~
http://alvinalexander.com/mac-os-x/mac-stickies-save-saving-file-sticky-notes-sync


# Mail.app
~~~
~/Library/Mail/V2
~~~

# Contacts
~~~
~/Library/Application Support/AddressBook
~~~


# Safari
~~~
~/Library/Safari/
~~~


# Keychain
~~~
~/Library/Keychains/
~~~

# other
~~~
~/Library/Preferences/
~~~
Go言語の型


Go言語の主な型の一覧。

* int
* int8
* uint
* uint32
* float32
* float64
* complex64
* complete128
* byte
* string

型の特徴は以下のとおり。

* int型 != int32型
* byte型 == uint8型
* string型の変数 != byte配列
* complex64は複素数型で2つのfloat32型で構成
* complex128は複素数型で2つのfloat64型で構成
* string型の変数はC++の文字列定数（const string）と同義

参考
* [Goプログラミング言語のチュートリアル Goの型について](http://golang.jp/go_tutorial#index05)