OmniAICreator/Qiita-1.07M huggingface dataset:
Flowを始める


参考：https://flowtype.org/docs/getting-started.html#_

## Install

```
$ mkdir -p get_started
$ cd get_started
$ echo '{"name": "get_started", "scripts": {"flow": "flow; test $? -eq 0 -o $? -eq 2"}}' > package.json
$  touch .flowconfig
$ npm install --save-dev flow-bin
```

## Flowでのテスト用ファイルを作る

###テスト用ファイル
```index.js
// @flow


var str = 'hello world!';
console.log(str);
```

###テスト実行結果
```
$ npm run-script flow

> get_started@ flow /Users/hoge/develop/node/get_started
> flow; test $? -eq 0 -o $? -eq 2

Launching Flow server for /Users/hoge/develop/node/get_started
Spawned flow server (pid=34175)
Logs will go to /private/tmp/flow/zSUserszShogezSdevelopzSnodezSget_started.log
No errors!

```

`No errors`とのことです。めでたしめでたし。

## 怒らせてみる

```index.js 
// @flow

var str = 'hello world';console.log(str);

あ
```

どう見てもSyntax Errorですね。Flowだとこうなります。

```
$ npm run-script flow

> get_started@ flow /Users/hoge/develop/node/get_started
> flow; test $? -eq 0 -o $? -eq 2

index.js:5
  5: ???
     ^ Unexpected token ILLEGAL


Found 1 error
```

## いろいろやらかしてみる
とりあえず思いつくままにアレなコードをいろいろ書いてみて、Flowに突っ込んでみました。

```index.js
// @flow

var str = 'hello world';console.log(str);
const a = 100;
const a = 200;

test = 100;

var str: number = 'hello world!';

class Sample {
  hoge(){
    console.log(true);
  }
}

const sample1 = new Sample()
sample.hoge()

const sample2 = new sample()
sample.hoge()
```

###実行結果

```
$ npm run-script flow

> get_started@ flow /Users/hoge/develop/node/get_started
> flow; test $? -eq 0 -o $? -eq 2

index.js:3
  3: var str = 'hello world';console.log(str);
               ^^^^^^^^^^^^^ string. This type is incompatible with
  9: var str: number = 'hello world!';
              ^^^^^^ number

index.js:5
  5: const a = 200;
           ^ a. name is already bound
  4: const a = 100;
           ^ const a

index.js:7
  7: test = 100;
     ^^^^ assignment of identifier `test`. Could not resolve name

index.js:9
  9: var str: number = 'hello world!';
                       ^^^^^^^^^^^^^^ string. This type is incompatible with
  9: var str: number = 'hello world!';
              ^^^^^^ number

index.js:18
 18: sample.hoge()
     ^^^^^^ identifier `sample`. Could not resolve name


Found 5 errors
```


型が違うとか、その名前既に使われてますとか、そんなもの存在しないとか色々来てますね。

とりあえず入れてみただけなので今回はここまでにします。
Zabbix3.0系のエージェントを Amazon Linux にインストールする

「[Amazon Linux にZabbix3.0系をyumでインストールしてみた](http://qiita.com/kazumax55/items/44eed57a60c02893fd29)」を参考にさせていただいて、Zabbix サーバをインストールしました。
その後に、監視対象に対して Zabbix3.0のエージェントをインストールする方法が以下。

### インストール
```
# yum install mysql-server httpd24 php56 php56-gd php56-mbstring php56-mysqlnd php56-bcmath
# rpm -ivh http://repo.zabbix.com/zabbix/3.0/rhel/6/x86_64/zabbix-release-3.0-1.el6.noarch.rpm
# yum install zabbix-agent
```

### 起動

```
# service zabbix-agent start
```

### 設定

```
# vim /etc/zabbix/zabbix_agentd.conf
```
[postgresql] initdb で指定した文字コードとは違う文字コードでデータベースを作成する

# 概要
postgresql 8.4 で createdb した際にエラーが出たのでメモ

# エラー内容

```
$ createdb test -E UTF-8
createdb: データベースの生成に失敗しました: ERROR:  new encoding (UTF8) is incompatible with the encoding of the template database (EUC_JP)
HINT:  Use the same encoding as in the template database, or use template0 as template.
```

# 対応内容

createdb の際に template0 をテンプレートに指定するらしい

```
$ createdb test -E UTF8 --template=template0
```

OK
ネットワーク設定を含んだVagrantのBoxを元に構築するとエラーになる

## まえがき

備忘録です。
私はこれで治りましたが、保障はできませぬ。。。


## 何があったのか

作成したboxファイルを適用する際に、既にそのboxにネットワーク設定がされている場合

```shell-session
vagrant_dir> vagrant up

...

vagrant_dir> インターフェース eth1 を活性化中：デバイス eth1は存在しないようですので、初期化を遅らせます
[失敗]

```

と、なる場合がありました。

（私の場合、NAT/Private Network(Host Only Adapter)/Public Network(bridge)の３種類の設定を入れていたCentOS6.7をBox化しました。）

原因はMACアドレスの違いのようです。

ググると色んな解決策が出てきましたが、私は以下のようにしました。

## 実施内容

### ■ Step1: NATとPrivage Network のみに絞っておく（念のため）

```
# VagrantfileのPublic Networkはコメントアウトしておく
vagrant_dir> vagrant reload
vagrant_dir> ssh 192.168.33.10 # vagrantにアクセス(vagrant sshか、virtual boxからの接続でも大丈夫です)
```

### ■ Step2: ifcfg-eth*のファイルで不要なものを削除する

```
[vagrant] sudo su
[root] cd /etc/sysconfig/network-scripts
[root] mkdir bk
[root] mv ifcfg-eth* bk/
```

### ■ Step3: ネットワーク設定を整理する

ここでは現行のVagrantfileに忠実に2つの設定だけ有効とするはずです。

```
[root] ifconfig (1)
# (1) で確認した時 eth0, eth4 の二つが正常にセットされているようでしたのでその二つは戻します
[root] cp bk/ifcfg-eth0 ./
[root] cp bk/ifcfg-eth4 ./
[root] service network stop # ネットワークを止める
# eth4をeth1にしたいのでリネーム
[root] mv ifcfg-eth4 ifcfg-eth1
# NICの設定を再生成してもらうために、設定ファイルを実質削除する
[root] mv /etc/udev/rules.d/70-persistent-net.rules /etc/udev/rules.d/70-persistent-net.rules.bk 
[root] service network restart
```

service network reloadでエラーが出る場合は
使いたくない設定をdownする。
downするときはifcfg-eth*のファイルが必要みたいなのでバックアップから一時的に持ってくる。

### ■ Step4: 再構築

Public Networkを扱いたい場合はVagrantfileのPublic Networkをコメントイン（※Public Networkを扱いたい場合のみ）

```
vagrant_dir> vagrant reload
```
Facebook 100Gbps Optical への取り組み

（ネットワーク）機器・デバイスの要求仕様を本当に必要な範囲まで下げる（限定する）ことによって、大幅なコストダウンができるという良い事例なのでメモ。

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr"><a href="https://twitter.com/ebiken">@ebiken</a> <a href="https://twitter.com/ogawa_tter">@ogawa_tter</a> 「更に条件を絞る」ではなく「条件の一部を変更している」の方が正確です。</p>&mdash; Takako Saeki_φ婆 (@O_FiberLady) <a href="https://twitter.com/O_FiberLady/status/798437341027151874">2016年11月15日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

## ソース記事

* Facebook Likes 100G at \$1/G
    * EETimes, 2015/08/28: http://www.eetimes.com/document.asp?doc_id=1327552
* Katharine Schmidtke - Facebook: Optical interconnects for Datacenters and beyond
    * OCP US Summit 2016: https://www.youtube.com/watch?v=EB0PsIkbQ94
    * 6~8分のCWDM4への要求がコスト削減(1/10)のポイント。
    * 短距離 (<500m), 低温 (15-55C), 短いライフタイム (<5 years)

## 仕様や要求仕様

* 1Gbpsあたりのコスト：70\$以上 -> 10\$未満（約10分の1）
* 仕様
    * Form Factor: QSFP28
    * Application: 100GBASE-CWDM4
        * Based on CWDM4 MSA (multi-source agreement)
    * Media: 100Gbps single-mode fiber
* 要求仕様 (Facebook)/(Typical CWDM4 MSA Transever)
    * Duplex single-mode fiber
    * shorter reach (<500m)/(2m~2km)
    * Lower operating temperature (15~55C)/(0~70)
    * Shorter deployment lifetime (<5 years)/(???)

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr"><a href="https://twitter.com/ogawa_tter">@ogawa_tter</a> <a href="https://twitter.com/ebiken">@ebiken</a> 横からすみません。同じCWDM4でも、MSAはOバンドを利用、OCPはCバンドを利用するようです。OCPは、わざわざロスの高いOバンドを利用するより、Cバンドでいーんじゃない？という判断のようです。</p>&mdash; Takako Saeki_φ婆 (@O_FiberLady) <a href="https://twitter.com/O_FiberLady/status/798431534357168128">2016年11月15日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

# 参考情報

* CWDM4 MSA, CLR4 Alliance, OpenOptics MSA, PSM4 MSAの関係
    * http://www.fibre-systems.com/feature/long-and-short-it
    * IEEE 802.3bm では低価格の500mインターフェース仕様が議論されていたが、４つの提案のいずれも75%の信任を得ることができず標準化できなかった。（Parallel single mode (PSM4), coarse WDM (CWDM), pulse amplitude modulation, discrete multi-tone）
    * そのため、４つの団体による仕様策定がすすめられた
        * CLR4 Alliance, CWDM4, PSM4 and OpenOptics
* CLR4 Alliance
    * https://www.clr4-alliance.org/about
    * Founder: Intel and Arista-backed
* OpenOptics MSA
    * http://www.openopticsmsa.org/
    * Founder: Mellanox and RANOVUS
* PSM4 MSA
    * http://www.psm4.org/
* CWDM4 MSA Technical Specifications REV 1.1
    * PDF: http://www.cwdm4-msa.org/wp-content/uploads/2015/12/CWDM4-MSA-Technical-Spec-1p1-1.pdf
* CWDM4 MSAのメンバー企業一覧: http://cwdm4-msa.org/members/
    * Facebookなどサービス事業者は入ってない。
* 2014年のCWDM4 MSA によるスライド
    * PDF: http://www.cwdm4-msa.org/files/CWDM4_MSA_4-29-14_FINAL.pdf
    * Slide 5: Draft 2 Public ReviewersにFacebookやMicrosoftなどサービス事業者も入ってる。

# その他関連記事：

* Facebook Is Once Again Putting the $41 Billion Computer Network Industry to Shame
    * Entrepreneur, 2016/11/10: https://www.entrepreneur.com/article/284997
    * Facebook が40G 6-Packの後継で100GToR Wedge100を束ねる100Gスイッチ「Backpack」をリリース。
    * DC内接続向けの低出力・低発熱の光モジュールを開発することによる大幅なコスト削減。
rails - react 開発環境構築 

# 前提
os : windows10
eclipseで開発ができる状態になるまでをやる



# rubyやdevkitなどもろもろinstall

http://rubyinstaller.org/

ruby 2.1.9をdownloadしpathを通す
※Program Filesなどスペースのあるディレクトリにおいてはいけない！

画面下部にあるDevelopment Kitもdownloadしpathを通す
以下例
D:\Devkit\bin;D:\Devkit\mingw\bin;

developmentKitはインストールしたフォルダ直下に移動してコマンド
` ruby dk.rb init`

config.ymlが作られるのでrubyのパスを追記する
例）　- C:\Program Files\Ruby21-x64

追記したら以下コマンド
`ruby dk.rb install`


RubyGemsを更新
` gem update --system` 

Bundlerをインストール
` gem install bundler` 
※SSLのエラーが発生した場合はこちらを参考に
http://swiftfe0.hatenablog.com/entry/2016/10/13/194701

Rails4.2をインストール
` gem install rails --version="~> 4.2.3" --no-ri --no-rdoc ` 

node.jsをインストール
https://nodejs.org/ja/download/

gitをインストール
https://git-for-windows.github.io/

tortoiseGitをインストール(laungagePackも)
https://tortoisegit.org/download/

Eclipse(Mars Release (4.5.0))がinstall済みだったので
AptanaStudioのプラグインをインストール
ヘルプ＞新規ソフトウェアのインストールで以下を指定
http://download.aptana.com/studio3/plugin/install
※エラーになったがもっかいやったら成功した


# プロジェクト作成～DB接続して画面描画

## プロジェクト作成

` rails new プロジェクト名`

※エラー発生① 

` Gem::InstallError: The 'json' native gem requires installed build tools.`

jsonをinstall
`gem install json -v '1.8.3'`

※エラー発生②
>'make' は、内部コマンドまたは外部コマンド、



## controller & view 作成

プロジェクトルートにあるGemfileを編集する

以下を追記
`gem 'react-rails', '~> 1.0' `

インストール
`bundle install`

react generatorを使う
`rails g react:install`

コンポーネント作成
`rails g react:component コンポーネント名`

jsxが作られる
`app/assets/javascripts/components/xxxx_box.js.jsx`

コントローラー作成
`rails g controller コントローラー名`

View作成
`app/views/コントローラー名/index.html.erb`

以下を記入
`<%= react_component('reactコンポーネント名') %>`

ルーティング設定
config/routes.rb
` root 'xxxxx#index' `


## DB & モデル作成

メモ：カラムの型
string 255文字
text 無制限

`rake db:create`

モデル作成
`rails generate model モデル名 フィールド名1:データ型1 ...`
参考
http://maeharin.hatenablog.com/entry/20130212/rails_generate

テーブル作成
`rake db:migrate`

テストデータを作る場合
seeds.rbをテキストエディタで開き編集
coding: utf-8

`テーブル名.create(:name => '宇宙に行った日', :sales_date => '2011-06-28')`
`テーブル名.create(:name => '観察日記', :sales_date => '2011-11-14')`

作成
`rake db:seed`

DBの内容を見る
`rails dbconsole`

※エラー発生
>Couldn't find database client: sqlite3, sqlite3.exe. Check your $PATH and try again.

SQLite3のx64版は提供されていないので、自分の環境でビルドしないといけないらしい。
ダウンロードサイトhttp://www.sqlite.org/download.htmlからsqlite-amalgamation-xxxxxxx.zipをダウンロードし、解凍する。

解凍したフォルダでコマンドプロンプトを開き
x86_64-w64-mingw32-gcc -O2 -shared -o sqlite3.dll -Wl,--out-implib=libsqlite3.dll.a sqlite3.c
実行する。
ソースコードのあるフォルダにsqlite3.dllが生成される。

x86_64-w64-mingw32-gcc -O2 -o sqlite3.exe shell.c libsqlite3.dll.a
実行する。
ソースコードのあるフォルダにsqlite3.exeが生成される。

Rubyをインストールしたフォルダ内のbin（例：C:\Ruby200-x64\bin)へsqlite3.dll,sqlite3.exeをコピーする。


## アプリケーション起動
`rails s`

>ActionView::Template::Error (TypeError: オブジェクトでサポートされていないプロパ
>ティまたはメソッドです。):

http://qiita.com/scivola/items/ec7625118fcf6de5203a
こちらで対応

gemfile.lockにcoffeeの1.8.0を追加しbundle install 
再起動したらなおった

## プロジェクトインポート

作ったrailsプロジェクトをeclipseにimportする
インポート＞新規プロジェクトとして既存のフォルダーを使用

SourceTreeをinstall
リポジトリ ＞ リモートの追加　でgitのurlを登録する

SourceTreeで新規/クローンを作成するボタン押下
リポジトリを作成
保存先のパスをローカルのrailsプロジェクトWorkspaceに

一旦完了
はじパタの数学関連まとめ 　第2章

今回はあまり数学で躓く箇所がなさそうなので、無理やり感がありますが一応まとめてみました。

#はじパタの数学 第2章
**教師付き学習**
識別規則は $y=f(x;w)=w_1x_1+…+w_dx_d=w^{\mathrm{T}}x$ で表されます。
ここで、
$x$ :前章で出てきた特徴ベクトル
$w$ :推定されたパラメータ（特徴から識別に用いる関数値を得るためのキー）
です。
では $w$ をどう推定するかという話ですが、これは学習データセット $D_L=(x_i,t_i)$  $(i=1,2…N)$ を用いて行います。ここまで書いてある通りなんですが、この $i$ というのがデータの番号（$N$個あるうちの何番目のデータか）であることに注意しないとやや混乱するかもしれません。上の識別規則で出てきた $x_1$ はあるデータ $x$ の1番目の特徴ですので $x_{11}$ とした方が分かりやすいかもしれません。くどいですね…。
 この表記に直してテキストの $w$ を少しずつ修正する方法を見てみましょう。
分類されるクラスの数はK個、現在 $τ$ 回目の学習としましょう。まず持っているデータを、学習データ $D_L$ を $(x_1,t_1)〜(x_n,t_n)$ 、テストデータ $D_T$ を $(x_{n+1},t_{n+1})〜(x_N,t_N)$ に分けます。使うデータはi番目のデータ $(x_i,t_i)$ を使うこととします。教師データは $t_i=(1,0,…,0)^{\mathrm{T}}$ であったとします。これを用いてパラメータ $w(τ)$ が推定されたとします。
この推定された $w(τ)$ を用いて$y_i=f(x_i;w(τ))=(y_1,…,y_K)^{\mathrm{T}}$ となります。ここで先ほどの記法を用いると $x_i=(x_{i1},x_{i2},…,x_{iK})^{\mathrm{T}}$ です。
調整は、教師データ $t_i=(1,0,…,0)^{\mathrm{T}}$ と、先ほど求めた $(y_1,…,y_K)^{\mathrm{T}}$ の誤差がなるべく小さくなるように行います。これを学習と言います。
最後に評価はテストデータセットを用いて性能の評価がなされます。

**汎化能力の評価法とモデル選択**
バイアスと分散の成分を導く式を追ってみることにします。
$(y(x;D)-h(x))^2$
$=(y(x;D)-E_D[y(x;D)]+E_D[y(x;D)]-h(x))^2$
$=(y(x;D)-E_D[y(x;D)])^2+(E_D[y(x;D)]-h(x))^2+2(y(x;D)-E_D[y(x;D)])(E_D[y(x;D)]-h(x))$
最初の変形は少しテクニカルな感じですが確率・統計界隈ではよくする変形です（）　あとは普通に展開しただけです。
最後に両辺の期待値（$E_D[]$）をとります。
左辺は $E_D[(y(x;D)-h(x))^2]$ です。
右辺は第一項目は分散項 $E_D[(y(x;D)-E_D[y(x;D)])]$ になり
第二項目はバイアス項 $(E_D[y(x;D)]-h(x))^2$ になります。こちらは式が変わっていませんが、これは期待値をとったこの第二項が定数だからです。（$E_D[y(x;D)]$はもう期待値をとった後ですし、 $h(x)$ も $D$ によって変化しません）
最後に残った第三項も同じ要領で $2(E_D[y(x;D)]-h(x))$ は定数ですので問題は残った $(y(x;D)-E_D[y(x;D)])$ ですが、これは $E_D[(y(x;D)-E_D[x;D])]=0$ ですから、全体をまとめると
$E_D[(y(x;D)-h(x))^2]$ （分散項） $+$ $(E_D[y(x;D)]-h(x))^2$ （バイアス項）となります。
尚、バイアスと分散はトレードオフ関係にあります。
[Jenkins] Jenkinsに関する情報まとめ

Jenkinsに関する記事のまとめ（随時更新）
基本的には2.xを基準としての記事のまとめになります。

# 環境作成
+ [[Jenkins] Windows7にJenkinsをインストールする方法まとめ - Qiita](http://qiita.com/koara-local/items/5fea213a9cf7033a95c1)
+ [[Jenkins][Ubuntu] UbuntuにJenkinsをインストール - Qiita](http://qiita.com/koara-local/items/268dab580346fcef59b5)

# プロキシ設定
+ Jenkinsの管理(Manage Jenkins) -> プラグインの管理(Manage Plugins) -> 高度な設定(Advanced)タブ

# Jobの設定に関してのTips
+ [[Jenkins] ビルドトリガ（定期的に実行）設定についてのまとめ - Qiita](http://qiita.com/koara-local/items/79cb9c08e77ac9d94b1d)
+ [[Linux][Jenkins] 実行時にJenkins環境か否かを判定する - Qiita](http://qiita.com/koara-local/items/b724e772bd0a2c818837)

# プラグイン関連
## Git Plugin
+ [[Jenkins] Gitのsshでのクローンが失敗する場合の解決法メモ - Qiita](http://qiita.com/koara-local/items/bfa2f6966f3634e5c598)

## HTML Publisher plugin
+ [JenkinsのHTML Publisher pluginで `Blocked script execution in <URL>. because the document's frame is sandboxed and the 'allow-scripts' permission is not set`となって、画面の一部が表示されない場合の対応方法 - Qiita](http://qiita.com/koara-local/items/f487bea89e56d49c6066)

# Slaveの作成
+ [開発者（個人）のためのJenkins - Slave編 - Qiita](http://qiita.com/yasuhiroki/items/d618796a1ba1366c4f80)
zfs運用メモ

# ディスクが壊れたとき

* 物理的にディスクを入れ替える
* zfs replaceを実行する

## エラーがないとき

* そのまま完了

## エラーが有ったとき

* データが一部破損していた場合resilverが止まるので対処する必要がある
* なんのファイルが壊れたのわかるのでそれがファイルであれば削除する
* スナップショットに残っているのであれば該当スナップショットを削除する
* 元データが残っていれば上書きする

# その他

raidz2にしとかないとresilver中に破損が発覚するとそのデータを捨て無くてはならない

```
  pool: volume1
 state: DEGRADED
status: One or more devices has experienced an error resulting in data
	corruption.  Applications may be affected.
action: Restore the file in question if possible.  Otherwise restore the
	entire pool from backup.
   see: http://illumos.org/msg/ZFS-8000-8A
  scan: scrub in progress since Sat Nov 12 20:12:19 2016
        155G scanned out of 14.3T at 307M/s, 13h24m to go
        0 repaired, 1.06% done
config:

	NAME                       STATE     READ WRITE CKSUM
	volume1                    DEGRADED     0     0    57
	  raidz1-0                 DEGRADED     0     0   114
	    replacing-0            DEGRADED     0     0     0
	      9583792808441608587  UNAVAIL      0     0     0  was /dev/ada0.nop/old
	      ada0.nop             ONLINE       0     0     0
	    ada1.nop               ONLINE       0     0     0
	    ada2.nop               ONLINE       0     0     0
	    ada3.nop               ONLINE       0     0     0
	logs
	  ada8                     ONLINE       0     0     0

errors: Permanent errors have been detected in the following files:

        volume1/work:<0x1225>
        volume1/work@auto-20150121-040000:/path/filename
```

4Tをresilverすると１６ｈかかる。エラーがあると二日とか三日とかかかる

```
resilvered 3.57T in 16h57m with 0 errors on Tue Nov 15 01:09:32 2016
```
GitHubのリポジトリをBitBucketに移行する

GitHubからBitBucketに移行できるもの

- ソースコード
- Issue
- Wiki

移行できないもの

- PullRequest

# ソースコード
BitBucketのナビゲーションバーから、「リポジトリ」->「リポジトリのインポート」を選択。

「古いリポジトリ」、「新規リポジトリ」の欄を埋める。

※privateリポジトリの場合は、認証が必要なのでチェックマークをいれて認証。

「リポジトリのインポート」ボタンを押したら完了。

# Issue
[issueを移行するライブラリ](https://github.com/sorich87/github-to-bitbucket-issues-migration)をクローンする。

```sh
git clone https://github.com/sorich87/github-to-bitbucket-issues-migration.git
cd github-to-bitbucket-issues-migration
bundle install
```

リポジトリにアクセスするためのトークンを生成する。アクセストークンは、GitHubの「Settings」->「Personal access tokens」->「Generate new token」から生成できる。必要な権限は下図のように、リポジトリ権限だけあればよい。

<img width="540" alt="20161115150215.png" src="https://qiita-image-store.s3.amazonaws.com/0/2037/c4a6053a-a694-4a98-6920-242dfce40f94.png">

下記コマンドを実行してissueのデータをダンプする。

### a. 個人リポジトリの場合
```sh
bundle exec ruby cli.rb -t {your_access_token} -r {repository_name}
```

### b. 組織リポジトリの場合
```sh
bundle exec ruby cli.rb -t {your_access_token} --organization {your_organization}
```

### Issueのインポート
BitBucketのリポジトリで「インポート & エクスポート」欄が存在しない場合は、課題管理欄で「課題トラッカーなし」となっているのを「非公開/公開トラッカー」に変更する。

「設定」->「インポート & エクスポート」を選択。

先ほどダンプしたzipファイルを選択し、「インポート開始」を選択。

「ユーザ名(メールアドレス)」と「パスワード」を入力して実行。

# Wiki
BitBucketのリポジトリ上で、「設定」->「Wiki」で「Wikiを使用しない」ではなく「非公開/公開Wiki」に変更する。

```sh
git clone https://github.com/{account_name}/{repository_name}.wiki.git
cd {repository_name}.wiki
git remote rm origin
git remote add origin https://{account_name}@bitbucket.org/{account_name}/{repository_name}.git/wiki
git push -f origin master
```

# PullRequest
[今のところ対応予定はない](https://jira.atlassian.com/browse/BSERV-4554)とのこと。
AWS CloudWatch Log を使って httpd ログを監視してみる

## 手順
- IAM ロールに権限を付与
- EC2 に監視対象となる httpd をインストール・起動
- EC2 に CloudWatch agent をインストール・起動
- CloudWatch Log の画面で確認

## IAM　ロールに権限を付与
今回はここを設定するつようがなかったので、割愛。
必要な場合は以下を参照。
http://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/QuickStartEC2Instance.html

## EC2 に監視対象となる httpd をインストール・起動

```
$ sudo yum install httpd -y
$ sudo service httpd start
```

## EC2 に ClodWatch agent をインストール・起動

```
$ sudo yum update -y
$ sudo yum install -y awslogs
```

次に、設定を変更。

```
$ sudo cat /etc/awslogs/awscli.conf
[plugins]
cwlogs = cwlogs
[default]
region = us-east-1

$ sudo vim /etc/awslogs/awscli.conf
$sudo cat /etc/awslogs/awscli.conf
[plugins]
cwlogs = cwlogs
[default]
region = ap-northeast-1
aws_access_key_id = <YOUR ACCESS KEY>
aws_secret_access_key = <YOUR SECRET KEY>
```

`<YOUR ACCESS KEY>`, `<YOUR SECRET KEY>` は適切なものに変更。
また、ここでは東京リージョン(`ap-northeast-1`)を設定していますが、ここで設定したリージョンにロググループ・ログストリームが作成されるので注意。
次に、監視対象のファイルと送信先を設定。
デフォルトでは `/var/log/messages` が設定されているので、それに加えて、httpd のログ(`/var/log/httpd/access.log`)を設定してみる。`/etc/awslogs/awslogs.conf` の末尾に以下を追加。

```
[/var/log/httpd/access_log]
datetime_format = %b %d %H:%M:%S
file = /var/log/httpd/access_log
buffer_duration = 5000
log_stream_name = hogehoge
initial_position = start_of_file
log_group_name = /var/log/httpd/access_log
```

agent を起動。

```
$ sudo service awslogs start
```

下記を実行してエラーが出ていないかを確認。

```
$ cat /var/log/awslogs.log

```
agent を自動起動するように設定。

```
$ sudo chkconfig awslogs on
```

### CloudWatch Log の画面で確認
CloudWatch Log の画面でログが反映されているのを確認します。
`httpd` にアクセスするために、適当に `curl`コマンドを実行。

```
$ curl localhost:80
```

上記の設定では、`東京`リージョンに、`/var/log/httpd/access_log`というロググループの中に`hogehoge`というログストリームが作成されていると思います。
ログストリーム`hogehoge`に該当ログが表示されていれば成功です。


### 参考URL
- [クイックスタート: 既存の Amazon EC2 インスタンスに CloudWatch Logs エージェントをインストールして設定する](http://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/QuickStartEC2Instance.html)
第4回つぶやき勉強会

```rb
class Hoge
 p self # これなに？

 def piyo
   p self # これなに？
 end

 def self.fuga
   p self # これなに？
 end
end
```


----

```rb
class Hoge
  def piyo
    self
  end
end

obj = Hoge.new

obj.piyo => # これはなんですか？ （ヒント Hoge, obj, その他）
```

----

答え: obj

```rb
obj.piyo == obj
=> true
```

----

```rb
class Hoge
  def self.fuga
    self
  end
end

Hoge.fuga => # これはなんですか？ （ヒント Hoge, obj, その他)
```

----
答え: Hoge


----

```rb
class Hoge
  p self
end

# => これはなんですか？ （ヒント Hoge, obj, その他)
```

----
答え: Hoge


----
```rb
class Hoge
  @v = 1

  def piyo
    @v = 2
  end

  def self.fuga
    @v 
 end
end

obj = Hoge.new
obj.piyo
Hoge.fuga => # これはなんですか？
```

----

答え: 1

----


```rb
class Hoge < Piyo
end
```

上と同じことを、`class` キーワードを使わずに実装せよ。

----

答え：

```rb
Hoge = Class.new(Piyo)
end
```

----

# 以上、ありがとうございました :runner_tone5:
MacとAndroid間でファイル転送する

# Android File Transferを導入
#### ダウンロード
[Android File Transfer](https://www.android.com/filetransfer/)からダウンロードできる

#### インストール
1. ダウンロードした「androidfiletransfer.dmg」を開く
2. 「Android File Transfer」をアプリケーションフォルダに移動
![スクリーンショット](https://qiita-image-store.s3.amazonaws.com/0/148660/cbb31da0-de8c-31ba-6b46-cf8cd8fdcba2.png)


# 使い方
Android端末をMacをUSBケーブルで接続。

##### PC側
初回のみ以下の画面が表示される

![スクリーンショット](https://qiita-image-store.s3.amazonaws.com/0/148660/86232560-e90b-2e85-9e21-75406ce342c9.png)

以下のダイアログが表示され、Android端末に接続できない場合は、Android端末側で設定を変更する

![スクリーンショット 2016-11-15 14.14.27.png](https://qiita-image-store.s3.amazonaws.com/0/148660/f8f12801-1524-5afa-ebbd-f38885243efc.png)


##### Android端末側
Android端末側に表示される以下のダイアログの「許可」を選択する

![スクリーンショット](https://qiita-image-store.s3.amazonaws.com/0/148660/ba5e2472-98fa-863c-2b10-c5de84ada463.jpeg)

以後、Android端末をMacに接続すると自動的に「Android File Transfer」が起動する
CentOSでctrl+alt+del キーを押したときに関係するファイルの設定

# CentOSでctrl+alt+del キーを押したとき

CentOSでctrl+alt+del キーを押したきは、shutdown が実行されます。
通常は再起動なんですが、そのまま電源Offの動作に変更したかったので、
動きを調べました。

## CentOS6系の場合

control-alt-delete.confを編集します
 オプション -h を -pに変更

```
$ su -
# vi /etc/init/control-alt-delete.conf

exec /sbin/shutdown -p now "Control-Alt-Delete pressed"
```
# CentOS5系の場合

inittabを編集します
 オプション -h を -pに変更

```
$ su -
# vi /etc/inittab

ca::ctrlaltdel:/sbin/shutdown -t3 -p now
```

※ shutdown 行をコメントアウトすると 無効化できるので、大勢でCentOSを
 　利用する場合は、オペミスの防止になります。
imageを2列で並び、真ん中にする方法

## やりたいこと
画像を2列に並ぶ
画像の高さは縦横の比率で自動調整
画像のリンクはパーツのどこでも押せること

## サンプルコード
https://jsfiddle.net/yangchuntao/ovzxo2v4/

## 説明
```:css
display: flex;
flex-wrap: wrap;
```
flexを使って、改行を入れる

```:css
&__column_2 {
  width: 46%;
  margin: 5px 2%;
}
```
2列なので、margin-left margin-rightを2%にして、widthを46%にする

```:css
&__link {
  display: table;
  min-height: 100px;
  height: 100%;
}
```

画像は高さは可変なので、画像の高さと合わせる、画像の高さが100px以下の場合は、100pxにして押しやすくする

```:css
&__image_container {
  display: table-cell;
  vertical-align: middle;
}
```
画像を真ん中にする

```:css
&__image {
  width: 100%;
  height: auto;
  max-height: 150px;
}
```
画像の幅はdivの幅と同じにして、高さは自動調整
環境を汚さずにDocker+certbotで手っ取り早くサーバ証明書を取得するメモ

最近は [lego](https://github.com/xenolf/lego) を使う方がトラブルが少なくてオススメ。特に `dns-01` が使える環境だとWEBサーバも不要になるのでとても便利です。そしてlegoも[Dockerから利用](https://hub.docker.com/r/xenolf/lego)すればインストールの手間がなく便利です。

↓は今や古い記事です。当時のアレコレの参考文献までに。

# 元記事
certbot は普通にインストールしようとすると色んなパッケージとかをローカル環境に入れ始めるので気持ち悪い。
証明書さえ手に入れば良いのでプログラムは Docker 内で実行させれば十分。
ドメイン確認に http を使うが `/.well-known/acme-challenge/*` のパスが通ればよいだけなのでそこだけ Proxy する形が外側の設定がクリーンに保てて楽ちんでよい。

# 手順
certbot の実行前にホストのWEBサーバに設定しておく。

```httpd.conf
ProxyPass /.well-known/acme-challenge/ http://localhost:10080/.well-known/acme-challenge/
```

で、以下のスクリプトを作って

```bash:certonly.sh
#!/bin/bash
PORT=${PORT:-10080}
email=${1:-}
domains=("${@:1}")

if (( $# < 2 )); then
  echo "Usage: $0 email domain [domains...]"
  exit 1
fi

if [[ -n $email ]]; then
  email_opts+=( --email "$email" )
else
  email_opts+=( --register-unsafely-without-email )
fi

domains_opts=()
for domain in ${domains[@]}; do
  domains_opts+=(-d "$domain" )
done

docker run \
  --rm \
  -p "$PORT:80" \
  -v /etc/letsencrypt:/etc/letsencrypt \
  -v /var/log/letsencrypt:/var/log/letsencrypt \
  deliverous/certbot certonly \
  --standalone \
  --non-interactive \
  --agree-tos \
  --renew-by-default \
  --preferred-challenges http \
  "${email_opts[@]}" \
  "${domains_opts[@]}"
```

↓こんな感じに実行する。

```bash:
bash certonly.sh '' exmaple.jp secure.example.jp
```

上手く行けば `/etc/letsencrypt/live/example.jp/*.pem` に証明書と秘密鍵一式が出来るので、httpsのVirtualHostに以下のように証明書を読み込む設定を追記すればOK

```httpd.conf:
SSLEngine on
SSLCertificateKeyFile /etc/letsencrypt/live/example.jp/privkey.pem
SSLCertificateFile    /etc/letsencrypt/live/example.jp/fullchain.pem
```

証明書の期限は3ヶ月なのでこれを簡単に更新できるよう以下のスクリプトを作って

```bash:renew.sh
#!/bin/bash
PORT=${PORT:-10080}
docker run \
  --rm \
  -p "$PORT:80" \
  -v /etc/letsencrypt:/etc/letsencrypt \
  -v /var/log/letsencrypt:/var/log/letsencrypt \
  deliverous/certbot renew
```

crontab に以下のような感じに設定しておく。

```cron:
# 毎週火曜日の午後に証明書を更新する
0 15 * * 2 bash /path/to/renew.sh >/dev/null
```

これで取得から更新までいい感じになるはず。


# certbot メモ
- `--email` は無しでも良い。その場合は `--register-unsafely-without-email` を付ける。メール登録しておくとメンテナンス通知や期限切れリマインダーメール等が受けられる。
- `--domains` に指定するドメインリストの最初のFQDNが証明書の`CN`値と保存されるファイルのパス名に使われる。
- `--non-interactive` とか `--agree-tos` とかは指定しないとインタラクティブにCUIのダイアログや確認が出てきて自動化出来ないので付けておく。
- 同じドメインの証明書を一定期間で取得できる回数に制限があるので5回くらい試していると翌週にならないと再試験ができなくなったりするので気をつける。
- `certbot renew` は `/etc/letsencrypt/renewal/*.conf` から既存の証明書を探して前回取得時と同じやり方で証明書の更新をしてくれる。
  - 特に引数は不要で、non-interactive に動いてくれる。
  - renew はデフォルトでは30日以上期限が残ってる証明書の更新をスキップしてくれるので実際は何回実行してもかまわない。
  - 上述のcron設定は単に休みの日に自動更新されて障害になると嫌なので対応しやすい平日午後あたりにまとめてやっているだけである。
swipejsで動画を再生。

# はじめに。
Swipeは中島聡氏により開発されたオープンなコンテンツ・プラットフォームです。
画像を組み合わせたマンガ、動画、svgで書かれたvectorなどを表示、動作させることができます。マンガ、取扱説明書、プレゼンテーションツールなどなど、様々な用途で利用できます。

１回目「JavaScript版のSwipe Engine、swipejsを使う」はこちら。
http://qiita.com/isamua/items/5d40558fbed7f90b34e7

２回目「swipejsで画像のスライドショーを作成する」はこちら
http://qiita.com/isamua/items/5021c750b6e8383c82a6

３回目「swipejsのスライドショーでページめくりを変えて遊ぶ」はこちら
http://qiita.com/isamua/items/37cb69a1bd2eaa549d3f

4回目「swipejsで画像を動かして、次世代マンガを作る。」はこちら
http://qiita.com/isamua/items/291080fff9118ddfd628

５回目「swipejs timingでアニメーションを制御する」はこちら
http://qiita.com/isamua/items/85184662545ac0887a3d


## 動画を再生する。
動画を再生するのは簡単です。elementのvideoに動画のファイル名(url)を指定するだけです。

```js
{
    "dimension":[576,1024],
    "pages": [
        {
            "elements": [
                {"text":"video"}
            ]
        },
        {
            "elements": [
                {"video":"1.qt", "x":0, "y":0}
            ]
        },
        {
            "elements": [
                {"video":"2.qt", "x":0, "y":0}
            ]
        },
        {
            "elements": [
                {"video":"3.qt", "x":0, "y":0}
            ]
        }
    ]
}
```

## 動画を動かしながら再生

位置の指定やscale, to, translate, durationも画像や文字と同様に使えます。ただし、js版では、toとscaleの組み合わせは正しく動作しません。translateとscaleの関係も画像と同様で、translateで移動した後に上下左右にscale処理されます。

```js
{
    "dimension":[576,1024],
    "pages": [
        {
            "elements": [
                {"text":"video"}
            ]
        },
        {
            "duration": 1,
            "elements": [
                {"video":"1.qt", "x":0, "y":0, "scale": 0.5, "to": {"translate":[100,100] }}
            ]
        },
        {
            "duration": 1,
            "elements": [
                {"video":"2.qt", "x": -300, "y": -500, "scale": 0.7, "to": {"translate":[300,500]} }
            ]
        },
        {
            "elements": [
                {"video":"3.qt", "x":0, "y":0}
            ]
        }
    ]
}


```

## 複数の動画を再生する。

１つのページに複数の動画を置くこともできます。

```js

{
    "dimension":[1024,1024],
    "pages": [
        {
            "elements": [
                {"text":"video"}
            ]
        },
        {
            "elements": [
                {"video":"1.qt", "x":0, "y":0, "h": 1024, "w": 512},
                {"video":"2.qt", "x": 512, "y": 0, "h": 1024, "w": 512 }
            ]
        }
    ]
}
```



完成したサンプルはこちら。

### 動画を表示して再生
http://www.swipejs.net/sample6/sample1.html
http://www.swipejs.net/sample6/video.swipe

### 動画にtranslateやscaleを使う
http://www.swipejs.net/sample6/sample2.html
http://www.swipejs.net/sample6/video2.swipe

### 複数の動画を再生する
http://www.swipejs.net/sample6/sample3.html
http://www.swipejs.net/sample6/video3.swipe

@snakajima さんから codepenというweb上でjavascriptやhtmlを編集できるサイトを教えていただきました。これを使った動画のサンプルはこちら。

http://codepen.io/isamua/full/QGEmYX/
Tiny Core Linux 4.7.7のbusyboxの日本語対応

[Tiny Core Linux 4.7.7で日本語入力](3556101ce532353d80d7)で4.7.7をインストールして日本語入力できるようになったのですが、urxvtで日本語入力して削除すると半分ずつ文字が削除されてしまうようです。どうもbusyboxがunicode対応でないのが原因ぽいようです。busyboxをunicode対応にしてみたいと思います。※busyboxをunicode対応にする以外にもbashを使うという手もあるようです。

※Tiny Core Linuxでは起動時にホームディレクトリのパーミッションやオーナーを強制的に変更してしまいます。作業ディレクトリとしてホームディレクトリ/home/tcを使う場合は気をつけて下さい。可能であれば別のディレクトリを使う事をお勧めいたします。

## 事前準備
必要なパッケージのインストールと必要なファイルをダウンロードし解凍します。

コンパイルに必要となるパッケージをインストールします。

```console
$ tce-load -wi compiletc
$ tce-load -wi ncurses-dev
```

busyboxのソースコードをダウンロードします。

```console
$ wget http://distro.ibiblio.org/tinycorelinux/4.x/x86/archive/4.7.7/src/busybox-1.20.2-config
$ wget http://distro.ibiblio.org/tinycorelinux/4.x/x86/archive/4.7.7/src/busybox-1.20.2.tar.bz2
$ wget http://distro.ibiblio.org/tinycorelinux/4.x/x86/archive/4.7.7/src/busybox-1.20.2_depmod.patch
```

busyboxのソースコードを解凍しパッチをあてます。

```console
$ tar xvfj busybox-1.20.2.tar.bz2
$ cd busybox-1.20.2
$ patch -p1 < ../busybox-1.20.2_depmod.patch
```

## コンパイル

コンパイルの前にunicode対応にするために設定ファイルを変更します。この時点で不要となるモジュールを無効にして小さくする事もできます。例えばinetdやnfsは通常なら使わないと思いますので、無効すると少し小さくなります。

```console
$ cp ../busybox-1.20.2-config .config
```
```console
$ vi .config
```
```diff:.config
@@ -26,13 +26,13 @@
 CONFIG_FEATURE_INSTALLER=y
 # CONFIG_INSTALL_NO_USR is not set
 CONFIG_LOCALE_SUPPORT=y
-# CONFIG_UNICODE_SUPPORT is not set
-# CONFIG_UNICODE_USING_LOCALE is not set
+CONFIG_UNICODE_SUPPORT=y
+CONFIG_UNICODE_USING_LOCALE=y
 # CONFIG_FEATURE_CHECK_UNICODE_IN_ENV is not set
 CONFIG_SUBST_WCHAR=0
 CONFIG_LAST_SUPPORTED_WCHAR=0
-# CONFIG_UNICODE_COMBINING_WCHARS is not set
-# CONFIG_UNICODE_WIDE_WCHARS is not set
+CONFIG_UNICODE_COMBINING_WCHARS=y
+CONFIG_UNICODE_WIDE_WCHARS=y
 # CONFIG_UNICODE_BIDI_SUPPORT is not set
 # CONFIG_UNICODE_NEUTRAL_TABLE is not set
 # CONFIG_UNICODE_PRESERVE_BROKEN is not set
```

コンパイル。コンパイル時にエラーぽいメッセージがが出るものの、busyboxは作成されているようなのでとりあえずこのまま使ってみます。

```console
$ make
(省略)
  LINK    busybox_unstripped
Trying libraries: crypt m
 Library crypt is needed, can't exclude it (yet)
 Library m is needed, can't exclude it (yet)
```

実行できるようにパーミッションを設定します。

```console
$ sudo chown root busybox
$ sudo chmod 4775 busybox
```

## パッケージ化とインストール

作成したbusyboxをパッケージ化するためのファイルを集めます。

```console
$ cd ..
$ mkdir -p busybox-ja/usr/local/bin/
$ sudo cp -p busybox-1.20.2/busybox busybox-ja/usr/local/bin/
$ mkdir -p busybox-ja/usr/local/tce.installed/
```

インストールスクリプトを作成します。

```console
$ vi busybox-ja/usr/local/tce.installed/busybox-ja
```
```text:busybox-ja/usr/local/tce.installed/busybox-ja
#!/bin/sh

/usr/local/bin/busybox cp /usr/local/bin/busybox /bin
```

インストールスクリプトに実行権限を付与します。

```console
$ chmod 755 busybox-ja/usr/local/tce.installed/busybox-ja
```

パッケージ化します。

```console
$ rm -f busybox-ja.tcz
$ mksquashfs busybox-ja busybox-ja.tcz
$ md5sum busybox-ja.tcz > busybox-ja.tcz.md5.txt
```

作成したパッケージが起動時に読み込まれるようにします。

```console
$ /bin/cp -f busybox-ja.tcz* /mnt/sda1/tce/optional/
$ echo busybox-ja.tcz >> /mnt/sda1/tce/onboot.lst
```

## 動作チェック
再起動し、urxvtを起動して日本語を入力し[Back Space]キーで削除してみます。一文字ずつ削除されれば成功です。