OmniAICreator/Qiita-1.07M huggingface dataset:
JMeter入門(1) インストール編

# インストール手順
1. [公式サイト](http://jmeter.apache.org/)にアクセス
2. [Download Releases](http://jmeter.apache.org/download_jmeter.cgi)を選択<br/>
<img width="500" alt="インストール1.png" src="https://qiita-image-store.s3.amazonaws.com/0/110087/eaba42df-ca75-5fd6-ed16-4894f0f6f99c.png">
3. 今回は[apache-jmeter-2.13.zip](http://ftp.yz.yamagata-u.ac.jp/pub/network/apache//jmeter/binaries/apache-jmeter-2.13.zip)を選択し、ダウンロードします。(ダウンロード先は任意のフォルダで構いません)<br/>
<img width="500" alt="インストール2.png" src="https://qiita-image-store.s3.amazonaws.com/0/110087/a50cc857-ba48-acab-e39e-392c5b0eb390.png">
4. ダウンロードしたzipを解凍し、bin/jmeter.batを実行します
5. DOS画面が起動したあと、GUI画面が起動すればインストール完了<br/>
<img width="500" alt="インストール3.png" src="https://qiita-image-store.s3.amazonaws.com/0/110087/aaf0962b-5763-14ea-fc88-f4d782a5ef51.png">

# jmeter.batがうまく実行できない場合

* 「有効なWin32アプリケーションではありません」という警告が出た  
→ zipの解凍に失敗している可能性があるため解凍ソフトを変更してみる
LaTeX ファイルからコメントを取り除く

# 各行のコメント以降を取り除く
\% という文字列がファイルに出現しないのを確認した後に以下を実行する。

```bash
sed -e 's/^\([^%]*\)%.*/\1%/' input.tex | sed "/^%/d" > output.tex
```

ただし、\% という文字の並びが出て来た場合は、その行のそれ以降を削除してしまうので注意すること。

# 複数行のコメント行を取り除く

Emacs 上で Query replace regexp (C-M-%) を用います。

```
^%.*\(^J%.*\)* -> %
```

(^J は改行です。C-q C-j で入力できます）

さらに、前後に空行の % だけの行も取り除きます。

```
^^J%^J^J -> ^J
```

# これを行った理由
校正を依頼する前の原稿からコメント行を取り除きたかったからです。
獨立開發者的參考文章

現在正是早餐時間，收了 Qiita 的信，發現對於想要獨立運行服務或是 app 的文章兩枚，內容很豐富也還滿有幫助的，在這邊分享一下

- [ひとりぼっちのサービス開発における技術選択の遷移と戦略](http://qiita.com/appwatcher/items/057ebb08c0a5c89270d6)
- [個人開発アプリのサーバーサイド環境を金と時間をかけずに用意する方法](http://qiita.com/kazu0620/items/20ea8cd1c3a2e3bb5574)

提到的內容大致上是

- 挑選了哪些第三方服務
- 用了哪些工具支援服務的日常運行，包含監控
- Server side 的策略

等等，

來繼續吃早餐 :bread:
Basic認証をかけたRailsプロジェクトで特定のURLのみBasic認証をかけない方法


ステージング環境とかでベーシック認証を書ける場合は設定ファイル
config/environment/staging.rb に以下のように設定したりする

```rb
  config.middleware.use Rack::Auth::Basic do |username, password|
    username == "YOUR_NAME" && password == "PASSWORD"
  end
```

ここで、特定のURLのみBasic認証を使わずにアクセスしたい場合はRack::Auth::Basicを拡張する必要がある。

いくつか書き方はあるが、以下の条件を満たすようにする

* staging環境のみ有効にする
* 特定のURLを正規表現でマッチするものはBasic認証をかけ無いようにする
* 拡張するクラスのファイルはconfig.ru等に書かずにlibディレクトリ以下に設置した別ファイルとする


## libディレクトリの自動読込させる

libディレクトリ以下を自動で読み込ませたい場合は以下のように設定する
こうしておくとlibディレクトリ以下のクラスをいちいち読み込まなくて良いので楽
(各自の方式によっては読み込ませておく必要はない)

config/application.rb

```ruby
module YourApp
  class Application < Rails::Application
    # libディレクトリ以下のファイルを読み込む
    # Rails4の場合
    config.autoload_paths += Dir["#{config.root}/lib/**/"]
    # Rails5またはRails6の場合
    config.eager_load_paths << Rails.root.join("lib")
  end
end
```


## Rack::Auth::Basic拡張クラスの作成

lib/my_basic_auth.rbに以下のようなBasic認証用のクラスを拡張したファイルを作成する

```rb
class MyBasicAuth < Rack::Auth::Basic
  def call(env)
    request = Rack::Request.new(env)
    # match の正規表現でヒットするものはbasic認証しない
    if request.path.match(/^\/.well-known/)
      # basic認証をパス
      @app.call(env)
    else
      # basic認証実行
      super
    end
  end
end

```

## Staging環境用の設定ファイルにカスタムBasic認証を読みこませる


※ 適宜production.rb等に読み替える
config/environment/staging.rb

```rb
Rails.application.configure do
  # MyBasicAuthを読みこませる"
  config.middleware.use MyBasicAuth do |username, password|
    username == "YOUR_NAME" && password == "PASSWORD"
  end

  # 以下省略
end
```

refs: 
http://stackoverflow.com/questions/6049414/selectively-allow-some-urls-through-rackauthbasic
http://stackoverflow.com/questions/22336048/staging-env-password-protect-everything-except-for-webhook
pull requestでCan't automatically merge発生の場合の対応 

#pull requestでCan't automatically merge発生の場合の対応 
※用語の定義
hogehogeブランチ => 自身が開発するブランチ
developブランチ => チームの各人が開発したブランチをmergeするブランチ

《発生した問題》
git push でリモートにあげたhogehogeブランチをdevelopブランチへpull requestしたところCan't automatically mergeのエラーがでてmergeが出来ない。

![error_img.png](https://qiita-image-store.s3.amazonaws.com/0/114886/1e9b6409-2e6b-2400-c7fe-ccd375d31d15.png)

《原因》
実装前にベースコードとしてローカルにpullしたdevelopブランチとリモートにあったdevelopブランチが合致しなかったので、conflictが起きていた。

※用語の定義
実装前にリモートからpullしたdevelopブランチ => developA
pull requestした際にリモートに存在していたdevelopブランチ => developA+
developブランチのコード => ベースコード

ローカルでdevelopAをベースに作成したhogehogeブランチを実装中にも、リモート側でdevelopAの実装が進み、developA+となっていた。
そうなると、pull requestを出したときに、developの部分がAとA+の差分だけ異なるので、mergeができない。
※イメージ図の左から右へ時間が経過しています。

![fail.png](https://qiita-image-store.s3.amazonaws.com/0/114886/0c98a8f4-cbc5-8753-fa68-70ab51434132.png)

《解決策》
ローカル上のdevelopAをリモート上と同じdevelopA+にして(pullして)、hogehogeブランチがそのdevelopA+をmergeすれば差分がなくなり、developブランチへmergeできる。

![success.png](https://qiita-image-store.s3.amazonaws.com/0/114886/25819a06-5924-9acb-975e-0c80d8ef2e02.png)

#コマンド
```
//hogehogeブランチにて実装完了
$ git add .
$ git commit -m "(コメント)"
$ git checkout develop
$ git pull origin develop # リモートのdevelopA+をローカルのdevelopAへpull（fetchでも良い）
$ git checkout hogehoge
$ git rebase develop　# gitmerge develop でも良い
// conflictするので、conflictした箇所を修正　（hogehogeブランチの中のdevelopAの部分をdevelopA+へ変更する作業）
// conflictを修正したコードを保存
$ git add .
$ git rebase --continue
$ git push origin hogehoge -f # 強制的な force push 
```

以上です。
エンジニアのための英語学習法

GYAOの窓際エンジニア　玉利です。

タイトルは釣りです。語学学習全般に役立つノウハウです。

実は私、トライリンガルです。日本語　中国語　英語の順で話せます。さらに華僑とか帰国子女じゃありません。

30歳まで、まったく外国語を話せませんでした。海外で活躍するエンジニアになるためには中国語と英語は必須だと思ったので（当時は製造業の海外工場は中国が主流でした）、この２か国語を覚えようと思ったわけです。当時はCCIEを取るのに300万円くらいかかると聞いていたので、同じ金額で中国語をまず攻めてみました。このあたりは後々どこかで紹介することにして、答えから先に言います。

# 独学はNG　必ず学校に行け

20代のころは、本屋で英語の参考書を買ってきては忙しさにかまけて投げ出すを繰り返していました。同じ心当たりで行き詰まってる人はいませんか？

学校にいくと、毎週きまった時間に行かなければいけないので、優先順位が下がって投げ出すことはなくなります。宿題？もちろん授業の30分前にやるんですよ！（会社は30分早目に抜け出します）

# 語学の学習に必要な時間(中国語)

私は中国の大学に１年間留学して中国語を勉強してきました。スタートラインは、完全にゼロです。私の行った大学は、もともと外国人向けの語学大学（プロパガンダ、スパイ要員養成機関です！）で、国の威信にかけて最高の先生を揃えています。

語学大学には、ちゃんとデータを元にした学習時間と到達レベルの目安があります。

*  HSK（初级）： 适用于那些掌握基本中文的学员。学员一般接受过１００到８００小时汉语课程学习。
*  HSK（中级）： 适用于那些掌握中等汉语水平的学员。学员一般接受过４００到２０００小时汉语课程学习。 
*  HSK（高级）: 适用于那些出色地掌握汉语的学员。学员一般接受过３０００小时汉语课程学习。

高級に行くまで、約2000-4000時間の学習が目安です。日本人は漢字を覚える時間が必要ないので、2000時間程度で高級まで到達出来ます。だいたい同時通訳がぎりぎりできる位です。

1年間でどのくらい勉強できるか計算してみましょう。

漢語速成学院は1日6時間の授業があります（一般は4時間)。毎日だいたい3−4時間の学習が必要で、50個くらいづつ単語の予習が必要です。

年間220日、1日9時間勉強して1,980時間となります。私はちょうど1年で当時の旧HSK8級(一般試験の一番上で、初級通訳レベル)までいけたので、この計算式はばっちり適合しました。

感覚的には、1000時間(半年)で相手の言うことがだいたいわかるけど、うまく話せない。1年で冗談が言えるようになる、という感じです。

かかった費用は、生活費込みでだいたい250万円くらいでした。1年間海外に行くので、翌年は所得税がありません。地味に効くのが健康保険と年金ですが、無職になって所得なし：所得税も即ちナシなので、都合100万円くらいで習得できたはずです。

# 英語学習に当てはめてみる

日本に帰国したので、今度は英語にチャレンジしました。英語学校の選定基準は、中国語の学習結果からすると以下です。

* 国の関連機関として運営されている（先生の質がいい）
* 一般的な教科書を使う(実績がある）
* 英語だけで(直説法）授業を行う

最初に行った会社そばの学校は、ネットの評判は自作自演だったみたいで全然ダメでした。たんなる英語カルチャースクールでした。

英語を勉強するには、英語で習わないとダメです。そんなの無理、と思うかもしれませんが、人間、現場に立てば喋れなくてもなんとかなるもんです。中国でも韓国人やアメリカ人やインドネシア人が必死こいて中国語だけで暮らしてました。アメリカ人からすると、漢字は拷問に近い複雑さだったようです。

結局、私は上の条件を満たすアメリカ系の学校とイギリス系の学校（いずれも政府外郭機関）のうち、イギリス系に行くことにしました。外銀勤めの知人が「どうせ同じ手間ならイギリス英語の方が格上として扱われる」というアドバイスをくれたからです。金融系ではイギリス上位ですが、エンジニアだったらアメリカ系のほうが良かったかもですね。

大体、年間学費は25万、だいたい年間48週間で毎週1.5時間の授業を一回受けています。累計の授業時間数は360時間。たぶん中高大学の分を合わせると累計学習時間は500時間程度のはずです。

いまの英語レベルはTOEIC換算で800前半。学習コストは125万円でした。

学習内容がTOEIC(ビジネス）ではなくTOEFLやIELTS（一般生活英語）の範囲なので、TOEICスコアは英語力の参考にはならないのですが、英語の1時間の会話くらいはギリギリこなせます。

仕事もだいたいOKです。インド人の英語だけは聞き取れないんですけどね。
CakePHP UPDATE時のisUniqueの罠

普通以下のようにバリデーションを設定すれば、UPDATE時にはisUniqueは働かない。

```php:Model
public $validate = array(
	'username' => array(
		'isUnique' => array(
			'rule' => array('isUnique'),
			'on' => 'create',
		),
	),
);
```

しかし何度やってもisUniqueに引っかかるので調べていたら、「idが0のレコード」の時だけ引っかかるということが分かった。
おそらくフォームからPOSTするデータのIDが0の場合、IDがないとみなされてUPDATEではなくCREATEとみなされてしまうのではないかと予想。
確かに仕様上そういった動作になるのも分からなくはないが…
isUnique以外にも影響しそうなので注意。
git - インデントのスペースだけの diff を無視する


- ["config - How to make git diff --ignore-space-change the default - Stack Overflow"](http://stackoverflow.com/questions/7310033/how-to-make-git-diff-ignore-space-change-the-default)

Sublime Text がいつの間にかソースコード全体に `re indent` してしまう場合があり、困っていた。
上記 URL によれば **git にそんなコンフィグはないよ** と。

代わりに`diff` のオプションとして`--ignore-space-change` というのがあるのでこれを利用すればなんとかなる。


```bash
$ git diff --ignore-space-change --no-prefix -- indent_mixed_file.txt > ignore_SP.diff
$ git checkout indent_mixed_file.txt
$ cat ignore_SP.diff | patch -p0
```

上から順番に説明すると以下の通り。

1. `--ignore-space-change` でパッチを作成して
2. チェックアウトしてファイルをリセット
3. (1)のパッチを当てる。
c++ builder / FastReport > A4一枚のレポートにページヘッダを追加 > frxReport1->Script->Variables["myPageHeader"] = "page header test";

```txt:動作確認
C++ Builder XE4
```

A4一枚のレポートにページヘッダを追加したい。

FastReportではバンドというものでできるようだが、複雑だ。
http://qiita.com/7of9/items/1a6ff62f691bfac0e7bb

今のところ一枚のレポートなので、バンドを使わずにただのテキストを追加することで対応可能だ。



## 手順

手順は 山本隆さんのブログが参考になった。感謝。
http://www.gesource.jp/weblog/?p=6232

変数名は [myPageHeader] とした。ビルトインの変数などとかぶらないようにmy付き。

C++ Builderでは
frxReport1BeforePrint()において以下を追加した。

```
frxReport1->Script->Variables["myPageHeader"] = "page header test";
```

"page header test"の部分はString型のプライベートメンバ変数にしておけば、Setter()で適宜ページヘッダを変更できる。
Azure 仮想マシンを PowerShell で操作する

Azure仮想マシン環境を PowerShell で操作する Tips をメモ。

## 仮想マシンをリストアップする
```ps1
PS C:\WINDOWS\system32> Get-AzureVM
```

## 仮想マシンを起動する
```ps1
PS C:\WINDOWS\system32> Start-AzureVM -Name computerName -ServiceName serviceName

OperationDescription OperationId                          OperationStatus
-------------------- -----------                          ---------------
Start-AzureVM        12345678-1001-2002-3003-999cb67d1b9b Succeeded
```


## 仮想マシンを停止する
ゲストOS内からシャットダウンしても課金はされたままなので、ポータルサイトから明示的にシャットダウンするか、このコマンドレットで停止するべし。

```ps1
PS C:\WINDOWS\system32> Stop-AzureVM -Name computerName -ServiceName serviceName

確認
The specified virtual machine is the last virtual machine in this deployment. Continuing will result in a new IP address for your deployment. To shut down without losing the
deployment IP use -StayProvisioned.
[Y] はい(Y)  [N] いいえ(N)  [S] 中断(S)  [?] ヘルプ (既定値は "Y"): Y

OperationDescription OperationId                          OperationStatus
-------------------- -----------                          ---------------
Stop-AzureVM         12345678-1001-2002-3003-999cb67d1b9b Succeeded
```
scrollreveal 3系 仕様変わりすぎ問題

## ScrollReveal?

https://scrollrevealjs.org/

スクロールするとびゅんびゅんアニメーションしてくれるやつ。
今も開発が進んでて割とアクティブなjQueryプラグイン。

これを2系から使っている人は、3系にバージョンアップした時にとまどうだろう。
なんせ仕様が変わりすぎなのだから。

## 2系までの使い方

```
<div data-sr="enter left and move 24px over 0.8s">
```

HTMLに動きを定義してた。
さらに

```
window.scrollReveal = new scrollReveal();
```

newする。ここ地味に重要。

## 3系からの使い方

```
window.sr = ScrollReveal({ delayType: 'onload' });
```

newしない。ここ地味に重要。
ここで定義したsrに動きをつける。

```
sr.reveal( '.enter-left', {origin: 'left'});
```

後はここで定義したclassをHTMLに設定する。

```
<div class="enter-left">
```

## 2系からの変更点

- newしない
- HTMLに動きを定義しない
 - data-srがなくなった

詳しい使い方は全部GitHubに書いてある。

https://github.com/jlmakes/scrollreveal.js/tree/master

### 3系の移行ではまっちゃったよ、なissue

- https://github.com/jlmakes/scrollreveal.js/issues/194
- https://github.com/jlmakes/scrollreveal.js/issues/205
- https://github.com/jlmakes/scrollreveal.js/issues/207
Java SE7 Gold 取得を目指して (2)

Java SE7 Gold をとりたい…!
===

本日は第2回目です。

## 本日知ったこと(2章)

* 可変長引数
  * 可変長引数を持つメソッドより、引数を明示的に指定したメソッドの方が優先して呼ばれる

    ```java
    // obj.method(10, 20);
    void method(int... args) { }
    void method(int a, int b) { }; // ← こっちが呼ばれる
    ```
  * メソッドがオーバーロードされた場合、以下の順で上から一致するものが探される
     
    ````java
    // obj.method(10);

    // 完全一致
    void method(int a) { }

    // 暗黙の型変換
    void method(long a) { } 

    // オートボクシング
    void method(Integer a) { } 

    // 可変長引数
    void method(int... a) { } 

    ````

* 継承・実装
  * 抽象クラスのstaticメンバは、`AbstClass.staticMethod()` で呼べる
  * 同一名のメンバを持つことができるが、使う際は明示的にクラス名を指定しないとコンパイルエラー
  
    ````java
    interface I {
      String str = "X";
    }
    class Super {
      static String str = "Super";
    }
    class Sub extends Super implements I {
      public void print() {
        // System.out.print(str);
        System.out.print(I.str);
        System.out.print(Super.str);
      }
    }
    ````

  * Superオブジェクト型でSubクラスを保持した場合、非staticメソッド以外は親クラスのメンバが呼ばれる

    ````java
    class Super {
      String str1 = "Super val";
      static String str2 = "Super static val";
      void method1() {
        System.out.println("Super method");
      }
      static void method2() {
        System.out.println("Super static method");
      }
    }
    class Sub extends Super {
      String str1 = "Sub val";
      static String str2 = "Sub static val";
      void method1() {
        System.out.println("Sub method");
      }
      static void method2() {
        System.out.println("Sub static method");
      }
    }
    
    Super obj = new Sub();
    System.out.println(obj.str1); // Super val
    System.out.println(obj.str2); // Super static val
    obj.method1(); // Sub method
    obj.method2(); // Super static method
    ````

staticメソッドを同一シグネチャで上書きすることは、オーバーライドではなく隠蔽と呼ぶらしいです。隠蔽、メダロットで覚えた言葉ですね。
綺麗なコードを書くためのコツ

綺麗なコードとはなんですか？と聞かれるとは思いますが、これは人によって答えが違いますね。しかし、答えは最終的に人が簡単に読めるかどうかになりますね。
綺麗な字は読みやすい字ですよね？綺麗な絵は見やすい絵ですよね？
そう考えて綺麗なコードを書くことを求めます。

## マシンのためじゃなくて、人のためのコード

PHPとLaravelで考えていますけど、どんな言語でも同じです。
個人的に綺麗なコードはマシンが発動できることを考えながら書かれたコードではなく、人間が読めることを考えながら書かれたコードです。

下記のコードを見てください。

```php
// 日本語で読むとこうなります
// もし $post の user_id がログインしているユーザーの id と同じだったら
@if ($post->user_id == Auth::user()->id)
```

読みやすくて、誰でも理解できると考えているなら…　**ちょっと待って！**これで本当に確認したいことは、idが同じかどうかじゃないんですね！明らかに確認したいのは**ユーザーがポストの作成者かどうか**ですね。

下記のコードと比べてみてください

```php
// もしログインしているユーザーがポストの作成者だったら
@if (Auth::user()->owns($post))
```

今の方がいいですね！`User`クラスの中にコードが増えるのが別に問題ありません。
`owns()`の中でどうやって比べているかは全く構いません。Viewの責任じゃありません。

```php
// ownsは一応こうなっています。 :)
class User
{
	public function owns(Post $post)
	{
		return $this->id === $post->user_id;
	}
}
```

一つの比較でコードは確かに複雑になりませんけど、コードは大きくなっていくと複雑になっていく一方ですから、簡単でいられるようにするのが目的です！　
たとえ数カ月後に、ビジネス・ルールが他にも追加されて…　ポストが出版されているかどうかをチェックしなきゃいけなくなるとか？そしてシステム管理者の場合、ポストの作成者じゃなくても編集できるとか？

```php
// 重ねて行くと地獄になっていきますね

@if (($post->user_id == Auth::user()->id || Auth::user()->admin === true) && $post->published_at !== '0000-00-00 00:00:00' && $post->published_at < Carbon::now())

// ↓　上記より、読むコードが
// ↓　下記のようだったら、読むときは簡単ですね

@if ((Auth::user()->owns($post) || Auth::user()->isAdmin()) && $post->isPublished())

// ↓　最終的に本当に確認したいのは編集できるかどうかですね？
// ↓　それなら、下記の方が簡単です

@if (Auth::user()->canEdit($post) && $post->isPublished())
```

そして`User`と`Post`クラスの中のメソッドも綺麗に読めます。

```php
class User 
{
	public function canEdit($post)
	{
		return $this->owns($post) || $this->isAdmin();
	}
	
	public function owns($post)
	{
		return $this->id === $post->user_id;
	}
	
	public function isAdmin()
	{
		return $this->admin === true;
	}
}

class Post
{
	public function isPublished()
	{
		return $post->published_at !== '0000-00-00 00:00:00' 
			 && $post->published_at < Carbon::now()
	}
}
```

## 文章を書いてるように考えること

マシンに近い低いレベルのコードで考えるより、人間に近い高いレベルのコードで書くほうが綺麗なコードになります。

たとえユーザー登録のとき、メールを送る方法はSMTPか他なのか、メールのタイトルや、誰から飛ばされるのか、コンテンツはどうなのか、コントローラーは構いません。登録に関して細かいことと、メールに関して細かいことはそれぞれのメソッドに書き込めばいいですね。


```php
AuthController extends Controller
{
	public function postRegister(Request $request)
	{
		// 文章 Extract from the request only the name, email and password.
		extract($request->only('name', 'email', 'password'));
		
		// 文章 Register a new user with the name, email and password. 
		// Then send a welcome email.
		(new RegisterUser($name, $email, $password))
			->sendWelcomeEmail();
	}
}
```

## 結論

細かいコードを理解しやすいメソッド名で隠せばいいです。

## プログラミング言語は他の言語と同じ
日本語で「ポストは出版されていますか」って聞くと、「はい」か「いいえ」の答えを期待しますよね？
「ポストの出版のタイムスタンプが現在のタイムスタンプより低いですが、ゼロですからね」って答えたら、ふざけてると思われるんですよね？ｗ
Berkshlfによるコミュニティクックブックの管理


# berkshelfとは
コミュニティクックブックをBundlerを使用するように管理することができるgem。
クックブック名とバージョンを設定ファイルに記述することで、対象のコミュニティクックブックの取得、
バージョン管理等を行うことができる。

# 使用方法

## berkshelf gemをインストール

```bash:Command
gem install berkshelf
```

## リボジトリを作成

```bash:Command
knife solo init <リポジトリ名>
```

## Berkfsfileファイルの記述
リポジトリ内にBerksfileというファイルが作成されているので
これに使用したいクックブック名を記述する。

yum-epel, apach2クックブックを使用する例。

```:berkfile
source "https://api.berkshelf.com"
cookbook 'yum-epel'
cookbook 'apache2'
```

## berksコマンドの実行
berksコマンドを実行することでberksfileに記述されたコミュニティブックを取得する。
Berksfileと同じ階層で実行すること。

```bash:Command
berks
```

## ノードにコミュニティクックブックを適用する
Nodeオブジェクトへ記載し、プロビジョニングを実行することでコミュニティクックブックが使用される。

```
{
  "run_list": [
    "recipe[yum-epel]",
    "recipe[apache2]"
  ]
}
```

ノードへのレシピ適用

```bash:Command
knife solo cook <ノード名>
```

## クックブックの詳しい内容を確認する
berksコマンドによってダウンロードされたコミュニティクックブックは以下のディレクトリに保存される。

```
~/.berkshelf/cookbooks/
```

詳しくクックブックの内容を確認したい場合はドキュメントを参照するか、クックブックの内容を直接確認する。
また、カスタマイズする際には、Attributeに値を設定するだけで動作を変更できるものもあるので、
クックブックの中身を確認して適宜Attributeを設定する。
rails5.0.0を導入する。

Gakuです。
最近rails界隈が熱いっすね〜。
ということで、この波に乗り遅れないためにもrails5を自分のPCにも導入してみました。
とりあえず動くとこまでです。
(※前提 rbenv,ruby,railsが導入されているPCで、あくまでもrails5へのアップデートを行います。)

# 導入

## ruby2.2.3のインストール

まずrails5app専用のフォルダを作成します。
(※ここのフォルダはrails5専用みたいな感じで構築してきます。他フォルダは以前のrailsが使えるようにしていきます。)

    mkdir rails5app
最新のrubyのバージョンを確認しインストールします。

    rbenv install --list
    rbenv install 2.2.3
rails5appフォルダへ移動して以下コマンドで先ほどインストールしたrubyバージョンを指定します。

    rbenv local 2.2.3
    ruby -v
これで、ここのフォルダはruby2.2.3を使用、それ以外のフォルダは以前のrubyを使用するといった設定を行うことができました。

## rails5のインストール

    gem install rails --pre
これだけです。簡単ですね。
で、バージョン確認しておきましょう。

    gem search ^rails$ -l
     
    *** LOCAL GEMS ***
 
    rails (5.0.0.beta2)
他フォルダでrailsのバージョン確認をしてみてください。
以前のrailsが適用されていることがわかります。
(※rbenvすんばらしぃい！)

rails5アプリケーションの作成

いつも通りrails5アプリを作成し、起動してみます。

    rails new hello_world
    rails s -b 0.0.0.0
(※vagrant上で起動しているので -b 0.0.0.0をつけないといけないです。ここなんとかならないものか。。。)
でhttp://0.0.0.0:3000へアクセス！
![スクリーンショット-2016-02-18-7.24.29.png](https://qiita-image-store.s3.amazonaws.com/0/47132/10b58fa0-7fc3-7282-8881-317c8f36f852.png)

# 終わりに

新しいWebSocketの機構、apiモード、railsコマンドの一新といろいろ楽しそうです。
なんなんだろうこの魅惑の世界！
railsやっぱ好きです。愛してます(=ﾟωﾟ)
今回は導入だけでしたが、次回は触ってみます。

# 転載元
こちらでも掲載しております。
[Gaku's Memo-rails5.0.0を導入する。](http://www.gakusmemo.com/?p=292 "Gaku's Memo")
React Nativeを使ってiOSアプリ作る

Gakuです。
reactでiOS,Androidアプリが作れるそうなので環境構築してみた備忘録です。
React勉強すれば、iOS,Android,Webのフロントが作れるので、うまくいけば一石三鳥くらいありそうです。

# 環境構築

1.Xcodeをインストールする。

2.brewをインストール&アップデート
ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”
brew update

3.nodeをインストールする
brew install node

4.watchman,flowをインストール
brew install watchman
brew install flow

5.react-nativeのインストール
npm install -g react-native-cli

6.プロジェクトを作成する
react-native init testapp

これで、React-nativeプロジェクトが作成されるので、iOSフォルダ内のプロジェクトファイルをXcodeで開けばOKです(=ﾟωﾟ)ﾉ
こんな感じになります。
![スクリーンショット-2016-01-30-16.03.40.png](https://qiita-image-store.s3.amazonaws.com/0/47132/7e052e44-6a8f-e42e-4e99-ed68c58f9905.png)

# おわりに
楽しいreact!地獄のredux(´･ω･｀)
もっと勉強したい今日この頃。。。

# 転載元
こちらでも掲載しております。
[Gaku's Memo-React Nativeを使ってiOSアプリ作る](http://www.gakusmemo.com/?p=257 "Gaku's Memo")
message station > ..v0.20 > シリアル基本コマンド実装完了 

https://hackaday.io/project/9526-bring-your-own-pizero-byop
でBYOPの核となるMessage stationの実装

http://qiita.com/7of9/items/ba3a4ca8b05786f89239
の続き

[v0.20 @ github](https://github.com/yasokada/esp8266_160220_BYOP/releases/tag/v0.20)

## シリアルコマンド

通信プロトコル
http://qiita.com/7of9/items/a62a6f21b00923fe3658


## 実行例

### シリアルモニタの入力例

```
hello,1,7of9
check
post,Vital,hello_Vital,0
bye
```

```
hello,2,Vital
check
get
bye
```

### シリアルモニタの出力例

```
hello,7of9
check,0
[DEBUG] proc_post > line126 > post,Vital,hello_Vital,0
rcver:Vital
msg:hello_Vital
```

```
bye,7of9
hello,Vital
check,1
get,hello_Vital
bye,Vital
```

DONE: 一部デバッグ用出力(rcver:xxx, msg:xxx)が残っている。
TODO: 電源OFFでメッセージが消える鬼仕様。SPIFFS使用など検討中。
TODO: postした時にLCDには"msg,posted"と表示するが、シリアルでは応答を入れてなかった
Hamlにハマル

Ruby on Rails 4でHaml gemを入れたら書きやすいと聞いて入れたが苦戦。特にリンクタグ！
リスト化とネスト構造で迷子になりました。

```lang:
%body
　%ol
　　%h3
　　　%li
　　　　%a{:href => "リンク1"}表示される文字1
　　　%li
　　　　%a{:href => "リンク1"}表示される文字2
```

この記事に助けられました
[RailsのHTMLテンプレートエンジン Haml入門](http://ruby-rails.hatenadiary.com/entry/20141001/1412097051 "RailsのHTMLテンプレートエンジン Haml入門")
技術英語 > I design [the way I normally do], and make the forms the way I normally do. / You can't treat people the way you do. / We've got a long way to go.

@ AXIS Feb. 2016 > Cover interview: Frank Gehry

> I design <font color=red>the way I normally do</font>, and make the forms <font color=red>the way I normally do</font>.

通常のやり方でやっていますということ。

<hr>
関連して思い出したのは

> You can't treat people <font color=red>the way you do</font>.

「そんなやり方で人を扱ってはダメだ」

ソースは失念。
ぞんざいに人を扱っている人に対して同僚からの言葉。

<hr>
関連して思い出したのは

> We've <font color=red>got a long way to go</font>.

「私達はまだまだですね」

http://qiita.com/7of9/items/69e43e3a12533c4704f0
RFCとは何か、そしてその区分

# RFCとは

Requests for Commentsの略。インターネット技術の標準仕様。
The Internet Engineering Task Force(IETF)という組織が管理している。

各ベンダーのオレオレ実装が蔓延しインターネットが機能不全に陥る、という事態を防ぐためにこのようにしっかり仕様策定している。というのが自分の認識。

「とある仕様がいかにして標準化されるか」という過程は、これ自身RFCとして定義されている
 [RFC2026 The Internet Standards Process -- Revision 3](https://tools.ietf.org/html/rfc2026 "RFC2026")

# Standards TrackとNon-Standards Track

RFCはStandards TrackとNon-Standards Trackの2つのカテゴリに大別され、各カテゴリにはさらに複数のレベルがある。

## Standards Track

標準化の過程にあるRFCはこのカテゴリに入る。
[Standards Track Maturity Levels](https://tools.ietf.org/html/rfc2026#section-4.1 "Standards Track Maturity Levels")

Proposed Standard =>  Draft Standard => Internet Standard(Standard)という順で標準化されていく。


## Non-Standards Track
Standards Track以外のRFCはこちらのカテゴリに該当する。
[Non-Standards Track Maturity Levels](https://tools.ietf.org/html/rfc2026#section-4.2 "Non-Standards Track Maturity Levels")

そもそも標準化を目指していなかったり、標準化の過程に入るには時期尚早なもの、また仕様のアップデートによって標準で無くなったものなどがある。

Experimental、 Informational、Historicという状態がある。

# 参考
https://ja.wikipedia.org/wiki/Request_for_Comments
http://www.atmarkit.co.jp/ait/articles/0006/13/news001.html

なんだかんだいってWikipediaを参考にしてしまう。。。
phpインストール apache連携まで

apacheをソースから入れている場合、phpのインストールにハマったのでメモ
ソースから入れたapacheは以下のパスにある前提です。

```
/etc/httpd
```
#yumでphpをインストールする。

```
yum install php
yum install php-zts
yum install php-mbstring
```

#apacheとの連携モジュールの設定
```
yum install php-zts
```

を実行したことで
libphp5-zts.soがインストールされる。

apacheをソースから入れている場合など、
複数apacheが入っていると意図しない所に上記のモジュールが入る場合がある。
私の場合

```
find / -name libphp5-zts.so
```
の結果以下にあったので、

```
/usr/lib64/httpd/modules/libphp5-zts.so
```
シンボリックリンクを張って対応

```
ln -s /usr/lib64/httpd/modules/libphp5-zts.so /etc/httpd/modules/libphp5-zts.so
```
#httpd.conf
以下を追加しました。

Include conf.d/php.conf
※phpをインストールしたときに上記ファイルが配置されます。
この中で先ほどのlibphp5-zts.soを読み込んだりしています。

#php.ini編集
とりあえず最低限だけ修正しました。

```
;date.timezone = 
↓
date.timezone = "Asia/Tokyo"
```
phpinfo.php
以下の内容を記載してドキュメントルートに配置

```
<?php
phpinfo();
?>
```
あとは再起動して、
http://localhost/phpinfo.php
にアクセスしたときにphpの紫色の画面がでれば、
apache設定,phpのインストールはOKです。

phpのインストールで調べていたらいろいろな方法があって、困惑しました。。。
python でテキトーにパスワード生成


`string` モジュールには色んなカテゴリの文字の集合が定義されてる。

```pycon:console
>>> import string
>>> string.ascii_letters
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
>>> string.ascii_uppercase
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
>>> string.ascii_lowercase
'abcdefghijklmnopqrstuvwxyz'
>>> string.digits
'0123456789'
>>> string.punctuation
'!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
>>> string.whitespace
'\t\n\x0b\x0c\r '
>>> string.printable
'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~ \t\n\r\x0b\x0c'
```

これを使ってテキトーにパスワード生成してみる。

```pycon:console
>>> import random, string
# 4文字な数字の場合
>>> ''.join([random.choice(string.digits) for i in range(4)])
'7602'
>>> ''.join([random.choice(string.digits) for i in range(4)])
'7531'

# 8文字な英数字の場合
>>> ''.join([random.choice(string.ascii_letters + string.digits) for i in range(8)])
'84xemCAc'
>>> ''.join([random.choice(string.ascii_letters + string.digits) for i in range(8)])
'cjiGNd2k'

# 12文字な英数記号の場合
>>> ''.join([random.choice(string.punctuation + string.ascii_letters + string.digits) for i in range(12)])
'9f58EN+}rbW8'
>>> ''.join([random.choice(string.punctuation + string.ascii_letters + string.digits) for i in range(12)])
'DP4E,N}jtT;W'
```

必要に応じて長さや文字の種類が変えれるから、パスワード以外にも使える。かも？
毎回対話シェル叩くのはめんどくさいので、 `argparse` モジュールとか使ってシェルから叩けるようにしとくと良いかと。
3D Touchのpeek状態判定とpeekキャンセル判定

# 3D Touchでやりたいこと
+ peekされる側のview controllerでpeek状態を判定することで、peek時だけレイアウトを変更したい
+ peek中にpopまで行かず、指をはなしてキャンセルしたときのイベントを取得したい

3D Touch用のプロトコル[`UIViewControllerPreviewing`](I wrote sample code in Swift: [ShingoFukuyama / 3DTouchDetectStateOfPeekPopCancel](https://github.com/ShingoFukuyama/3DTouchDetectStateOfPeekPopCancel))にはキャンセルイベント用のメソッドや、peek状態を表すプロパティは定義されていません。
そこで、数少ないプロパティのうちの一つ`previewingGestureRecognizerForFailureRelationship`:`UIGestureRecognizer`から推測する方法を使っています。

:octocat: [ShingoFukuyama / 3DTouchDetectStateOfPeekPopCancel](https://github.com/ShingoFukuyama/3DTouchDetectStateOfPeekPopCancel)
Swift sample code: Detect 3D Touch Peek/Pop and Peek-Cancel 

# Demo
![demo](https://raw.githubusercontent.com/ShingoFukuyama/3DTouchDetectStateOfPeekPopCancel/master/demo.gif)
go言語でhttpモックサーバを作る方法(2016/02時点)

# やりたいこと

外部API叩くようなプログラムを書いていてインテグレーションテストのためにHTTPモックサーバがほしい(Rubyの[webmock](https://github.com/bblimke/webmock), javaの[WireMock](http://wiremock.org/)みたいな感じ)。

# 解決法

GO言語にそれ用のいいライブラリはない。
[httpmock](https://github.com/jarcoal/httpmock)はまさにこの目的のためのライブラリだが、このライブラリを使用するとnet/httpを使った接続をすべて奪いとってしまう。具体的には一度モックを作成するとそのURL以外へアクセスしようとするとエラーが出る。
定義したURLへのアクセスのみモックするようなオプションは今のところないようだ。

そこで、純粋にモック用途のhttpサーバが立てばいいだけのケースでは標準ライブラリの[httptest](https://golang.org/pkg/net/http/httptest/)を使う。

```go
func TestWithMockedServer(t *testing.T) {
	ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
		fmt.Fprintln(w, "Hello, client")
	}))
	defer ts.Close()

	// ここにモックサーバーを利用したテストを記述。ポート番号は自動で決定されるので ts.URLで取得
}

```

httptestのポート自動決定は便利だがポートを指定する必要がある場合はこう書く。

```go
func TestWithMockedServer(t *testing.T) {
	handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
		fmt.Fprintln(w, "Hello, client")
	})

	l, _ := net.Listen("tcp", ":8080")
	ts := httptest.Server{
		Listener: l,
		Config:   &http.Server{Handler: handler},
	}
	ts.Start()
	defer ts.Close()

	// ここにモックサーバーを利用したテストを記述。ポート番号は8080で固定
}
```

httptestを用いた時の欠点はそのモックしたAPIの呼び出し回数などをチェックできないことである(モックではなくスタブ的になる)。

# 蛇足
ローンパターンを用いて関数化するとスマートになるが、golangの文化と合っているかわからない。
Go 1.6 templateパッケージ新機能

Go1.6が2016/02/17にリリースされましたね。

今回はHTTP/2のサポートなどはあるものの、地味なアップデートな印象ですが、個人的に現在作成中のWebサイトでhtml/templateパッケージを使っているので、テンプレート機能の改善に期待をしつつ、試してみました。

## Go1.5までの実装

親テンプレートでは`{{ template xxx . }}`のように、templateで指定します。ここではデフォルト値を入れて、子テンプレートで上書きというよくあるテンプレートエンジンのような利用ができませんでした。

```html:base.gohtml
<!DOCTYPE html>
<html>
	<head>
		{{ template "head" . }}
	</head>
	<body>
		{{ template "body" . }}
		<footer>
			{{ template "footer" . }}
		</footer>
	</body>
</html>
```

続いて子テンプレートです。`{{ define xxx }}`で指定します。ただし、例えば下記の例だと、footerは子テンプレートでそもそも指定しないとエラーになりますし、さらに孫テンプレートを作りたいというときに孫で上書きができないという問題がありました。

```html:child.gohtml
{{ define "head" }}
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- 以下、略 -->
{{ end }}

{{ define "body" }}
<h1>タイトル</h1>
<!-- 以下、略 -->
{{ end }}

{{ define "footer" }}
{{ end }}
```

## Go1.6からの実装

Go1.6より、親テンプレートにて、`{{ block xxx . }}yyyy{{ end }}`のように指定することにより、親側でデフォルト実装が定義可能となりました。

```html:base.gohtml
<!DOCTYPE html>
<html>
	<head>
		{{ block "head" . }}{{ end }}
	</head>
	<body>
		{{ block "body" . }}{{ end }}
		<footer>
			{{ block "footer" . }}{{ end }}
		</footer>
	</body>
</html>
```

親テンプレートでデフォルトが定義されていることにより、子テンプレートでは上書きが必要ない定義の実装が不要になりました。

```html:child.gohtml
{{ define "head" }}
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- 以下、略 -->
{{ end }}

{{ define "body" }}
<h1>タイトル</h1>
<!-- 以下、略 -->
{{ end }}
```

ふむ、地味に便利ですね :smile: 
通常はテンプレートを2,3個利用しているケースが大半だと思いますので、こういった改善はうれしいです。

本機能は、text/templateでもhtml/templateでも利用可能です。

そういえば、GoでHTMLのサーバサイドレンダリングの需要がどこまであるのか。。。

## スペースのトリム

Go1.6では、RailsのERBなどでもお馴染みのトリム機能も追加されてます。

`{{- .title }}`のように指定すれば、左側のスペースがトリムされるようになります。
HTMLやテキストのマークアップを美しく保ちたい方にはうれしい機能ですね。

## 参考

- Go 1.6 is released - The Go Blog
  - https://blog.golang.org/go1.6
- template - The Go Programming Language
  - https://golang.org/pkg/text/template/#hdr-Text_and_spaces
  - https://golang.org/pkg/text/template/#hdr-Actions
gitbook-plugin-mermaid-2の導入

久しぶりに完全新規でgitbook + mermaid.js環境を作ったらハマったのでメモ

[mermaid.jsが素晴らしいけどなかなか使ってる人見かけないので実例晒す](http://qiita.com/uzuki_aoba/items/a01f8b0b52ced69c8092) を書いた頃に作ったプロジェクトは以下の構成

- gitbook-plugin-mermaid : "0.0.4"
  - ただし、ganttとか使いたかったので手動でmermaid.js本体の 0.4.0 を当ててた。
- gitbook-cli : "1.0.1"

で、完全新規でつくることになったので前回と同じ勢いで gitbook-plugin-mermaid をnpmで入れると、0.0.9 になった。

Haroopad や既存の gitbook + mermaid 環境で作っていたドキュメントが大量にあったので、それを流用しようとすると、見事にレンダリングされなくなった。なんで？

## gitbook-plugin-mermaid の変更

0.0.4当時では、mermaidを記載する方法はmarkdownのコードとして記載する方法だった。

> ```
> 　```mermaid
　graph TD;
　  A-->B;
　  A-->C;
　  B-->D;
　  C-->D;
　```
```

これが、最新の0.0.9ではこうなっている

> ```
{% mermaid %}
graph TD;
  A-->B;
  A-->C;
  B-->D;
  C-->D;
{% endmermaid %}
```

詳細 : https://github.com/JozoVilcek/gitbook-plugin-mermaid

確かに便利だけど、Haroopadや既存の資産との互換性も保ちたい・・・


## gitbook-plugin-mermaid-2

https://github.com/morlay/gitbook-plugin-mermaid-2

ググるとこっちの方が上位に出る。
記法が古い gitbook-plugin-mermaid と同じで、互換性も高い。

### Good

既存との互換性。

コードブロックなので、markdown的にも直感的だし、mermaidが無くてレンダリング出来ない場合の体裁もマシ。

あと、 book.json の `pluginsConfig` にテーマ設定を書けるので楽。

```json:book.json
{
    "plugins": [
       "mermaid-2"
    ],
    "pluginsConfig": {
      "mermaid-2": {
         "theme": "forest" 
      }
    }
}
```

### 初見でハマったところ

どこが悪さしているかちゃんと追っていないけど、リンクのテキストにダブルクォーテーションが入っているとレンダリングに失敗する。
他の記号でも、前は動いてたけど現在はNGなものがあるかもしれない。

**OK**

```mermaid
graph TD;
  A-. ほげ<br>"ho"ge .->B;
  A-->C;
  B-->D;
  C-->D;
```

**NG**

```mermaid
graph TD;
  A-. ほげ<br>hoge .->B;
  A-->C;
  B-->D;
  C-->D;
```



## まとめ

2016/02/24 現在でそれぞれのプラグインをインストールして落ちてくるmermaid.jsのバージョンは以下の通り。

- gitbook-plugin-mermaid : 0.5.6
- gitbook-plugin-mermaid-2 : 0.5.8

既存や他のエディタとの互換性&最新が使えるという点を考えると、2 の方でいいかもしれない。

## その他

少し前だが、本家が大幅にイメチェンした。
https://knsv.github.io/mermaid/

ライブエディタが意外と凝っている。とりあえずどんなもんか見たい人はオススメ。ハッシュ化してURLにできるので、やろうと思えばこのまま共有もできる。
http://knsv.github.io/mermaid/live_editor/


## 追記(2017/02/28)

新規プロジェクトで作り直したところ、gitbook-cli側でpluginの `'head:end'` がdeprecatedになった影響で、gitbook-plugin-mermaid-2はうまく動かなくなっていました。
互換性は諦めて、gitbook-plugin-mermaidを使うべきかなぁ。
Developer Toolset 4でCentOS6にお手軽にGCC5.2をインストール

#注意
この記事の内容は古いです。最新の情報は
https://www.softwarecollections.org/en/scls/?search=Dev&policy=&repo=&order_by=-create_date&per_page=10
などをご覧ください。

#導入
CentOS(・RHEL)6のデフォルトのコンパイラはC++11にすらまともに対応していない<del>クソ</del>コンパイラです。RedHatは定期的に標準でインストールできるGCCを含む各種ソフトのバージョンが腐っていくのを見かねて定期的に比較的新しいバージョンを別の場所にインストールするパッケージを用意しています。それの<del>パクリ</del>クローンOSであるCentOS6もRedHatのサーバからソースをパクって独自ビルドし、使えるようにしています。これらのパッケージの中の1つがGCCの新しいバージョンが含まれているDeveloper Toolsetと呼ばれているものです。従来、バージョン3までが知られていました。しかし、これだとGCC4.9までのバージョンしかインストール出来ません。しかし、2015/11にRedHatがGCC5.2を含んだ[バージョン4が利用できるというアナウンス](http://developerblog.redhat.com/2015/11/17/gcc-5-developer-toolset-4-generally-available/)を出しました。つい最近までこれがCentOSでも利用できるという情報はなかなか回ってこなかったのですが、バージョン3が置いてあるサイトを探してみるとそれらしきものがありました。バージョン3までに比べるとビルド元の信頼性は下がりますが、ここではそれをありがたく頂戴する方法を紹介します。

なお、時間がかかってでもいいから最新版をソースビルドでインストールしたい方は[過去記事をご覧ください。](http://qiita.com/Tats_U_/items/5fed0f9dafb4ecb15c12)

#インストール前の注意
これは一個人がRedHatのサーバからソースコードを取ってきて独自にビルドしたものだと思います。万が一動作不良などが起こっても*自己責任でお願いします。* **特にお仕事で利用しているサーバにインストールする場合はご注意ください。**
正直に言ってダウンロード数が異常に少ないのでかなり怪しいです。

#リポジトリの詳細
devtoolset3のリポジトリがあるサイトに概要があります。ただし、devtoolset3の人とは別人です。特に詳細もありません。ビルド自体は2015年末あたりに全て完了しているようです。
https://copr.fedorainfracloud.org/coprs/hhorak/devtoolset-4-rebuild-bootstrap2/

#インストール方法
当然管理者権限が必要です。C/C++のみを使用する場合は次の方法でインストールします。

```bash
cd /etc/yum.repos.d/
sudo wget https://copr.fedorainfracloud.org/coprs/hhorak/devtoolset-4-rebuild-bootstrap2/repo/epel-6/hhorak-devtoolset-4-rebuild-bootstrap2-epel-6.repo
sudo yum install devtoolset-4-gcc devtoolset-4-binutils devtoolset-4-gcc-c++
```

#有効化方法

```bash
scl enable devtoolset-4 bash #bashはシェルなどのコマンド(スペースで区切る場合は全体を引用符で囲ってください)
```

シェルを起動した場合は通常より1回多く`exit`コマンド・Ctrl+Dなどで終了する必要があります。

常時有効にする場合は
http://qiita.com/aqn/items/08da3ac2b8f3d70efcfa
を参考にするとよいと思います。

#バージョン確認
```bash
[tatsu@localhost yum.repos.d]$ scl enable devtoolset-4 $SHELL
[tatsu@localhost yum.repos.d]$ gcc --version
gcc (GCC) 5.2.1 20150902 (Red Hat 5.2.1-2)
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
```

#使用上の注意
GCC5は、ソースビルドするとメッセージの一部が日本語になりますが、この方法でインストールすると全て英語になってしまいます。<del>一部日本語でエラーメッセージを表示してくれるっていうのがGCCの大きなメリットなのにこんなんじゃ続けてClangソースビルドしたほうがマシだよ・・・</del>

```bash
[tatsu@localhost yum.repos.d]$ gcc
gcc: fatal error: no input files
compilation terminated.
[tatsu@localhost yum.repos.d]$ gcc5 --version
gcc5 (GCC) 5.3.0
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

[tatsu@localhost yum.repos.d]$ gcc5
gcc5: 致命的エラー: 入力ファイルがありません
コンパイルを停止しました。
```

※`gcc5`は以前にソースビルドしたGCC5.3.0です。(参照:http://qiita.com/Tats_U_/items/5fed0f9dafb4ecb15c12)

#参考(旧バージョンのインストール方法)
http://www.task-notes.com/entry/20151114/1447492231
MovableTypeでログインログアウト周りのトラブルの解決方法

Qiitaで初めての投稿
記事のストックはしたことあるけど、書いたことはなかった。

さて、今回はMT(MovableType)を使っていて、何かの調子でログイン・ログアウト(サインイン・サインアウト？)がおかしくなる場合の対処法を自分メモ

# 事象
## ログイン(サインイン)時のトラブル

1. ログイン画面が出てきてログイン
2. ダッシュボードなどが表示された時に別の画面に移動するためにリンクをクリック
3. なぜかまたログイン画面が表示されてしまう

## ログアウト(サインアウト)時のトラブル

1. ログアウト(サインアウト)をする
2. サインアウトしてログイン画面が出てくるまでに10秒以上かかる

# 解決方法

mt_sessionテーブルのデータが悪さしている可能性が高いので、mt_sessionテーブルを一度クリア
コメント認証などでログインしているユーザや、他にログインしているユーザなどは一旦全てログアウトされてしまうので、
削除する場合には注意が必要。

ログアウトで時間がかかっている場合、下記のようなSQL文を実行した時に、複数レコードが表示される。

```sql
select count(*) from `mt_session` where `session_name`='ユーザ名';
```

mt_sessionテーブルを掃除

```sql
delete from `mt_session`;
```

or

```sql
truncate table `mt_session`;
```
SSH認証鍵をBitbucketに設定

# 1. コンソールでSSH認証の公開鍵と秘密鍵を作成
はじめに、コンソール上で以下のコマンドを入力し、公開鍵と秘密鍵を生成します。

```
$ cd ~/.ssh
$ ssh-keygen -t rsa -C hoge@example.com  # 自分のメールアドレス
```

以下のファイルが生成されます

```
$ ls -l 
合計 12
-rw------- 1 hoge hoge 1675  2月 23 15:06 id_rsa
-rw-r--r-- 1 hoge hoge  404  2月 23 15:06 id_rsa.pub
```

各ファイルは以下を表しています。

* id_rsa 秘密鍵
* id_rsa.pub 公開鍵

# 2. 公開鍵の内容をクリップボードに保存
lessやcatコマンドなどで公開鍵の内容を表示し、クリップボードにコピーします。

```
$ less id_rsa.pub
```

または

```
$ cat id_rsa.pub
```

# 3. Bitbucketに公開鍵を登録
まず、Bitbucketにログイン後右上のユーザアイコンをクリックし、以下を選択します。

* ユーザアイコン => 「Bitbucket setting」

続いて、左側のメニューの項目「セキュリティ」から以下を選択します。

* 「セキュリティ」 => 「SSH キー」 => 「鍵を追加」

出力されたフォームに適当な「Label」を入力し、「Key」の箇所に手順2でクリップボードにコピーした公開鍵の内容をペーストします。

最後に「鍵を追加」をクリックします。

# 4. 動作確認

git pushで問題なく Bitbuchet上のリポジトリにpushできれば成功です。

```
$ git branch
* master
$ git push origin master
```

# 参考文献
1. SSH認証キーをBitbucket_GitHubに設定しよう！ [Mac簡単手順] - 酒と泪とRubyとRailsと, http://morizyun.github.io/blog/ssh-key-bitbucket-github/, Online; accessed 24-Feburary-2016.
Python(3)を関数電卓代わりに使用してみた

#準備
使用したPythonのバージョンは3.5.1です。パッケージとしてnumpy・(scipy・)matplotlib・sympyをインストールすると便利ですが、今回は使用しません。
LinuxでパッケージでPythonをインストールした場合は同じくパッケージからインストールできます。それ以外の人はpipを使用します。(Windowsの場合は予め管理者権限でコマンドプロンプト・パワーシェルを起動し、pipでwheelパッケージをインストール(`pip install wheel`)します。pipでのインストールに失敗する場合には https://pypi.python.org/pypi/wheel/ からPythonのアーキテクチャ(32/64ビット)・バージョンに合ったwheelを予めダウンロードしてから「`pip install`」に食わせてください)

#関数電卓代わりに使用する
Unix系の場合は端末から起動します。(`python3`)
Windowsの場合はパスさえ通せばコマンドプロンプト・パワーシェルから起動できますが、鷗などShift-JISにない文字列が使用できません。

まずは基本的な演算です。

```py3
>>> 1 + 1
2
>>> 2**3
8
>>> 1/2
0.5
>>> 1 % 2
1
>>> 5 % 3
2
>>> 0.5 * 0.25
0.125
```

変数の設定・使用・削除は次のようになります。

```py3
>>> x = 5
>>> x ** 2
25
>>> del(x)
```

次に各種関数を使用します。

まず、
$\sin \frac{\pi}{4}$
を求めてみます。

```py3
>>> import math as MT
>>> MT.sin(MT.pi * 0.25)
0.7071067811865476
```

次に、610!を求めてみます。

$n! = \prod_{k=1}^n k = \prod_{k=2}^n k\qquad(n \geq 2)$

の両辺に常用対数を取って

$\log_{10} n! = \sum_{k=2}^n \log_{10} k$

$n = 610$を代入して


$\log_{10} 610! = \sum_{k=2}^610 \log_{10} k$

610!をそのまま求めると桁数がヤバイことになるので、$a\times 10^b\quad(1\leq a < 10 \wedge b \in \mathbb{Z})$の係数で求めます。

$610! = a \times 10^b $

の両辺に常用対数を取って

$\log_{10} 610! =\log_{10} a + b$

$0 \leq \log_{10} a < 1 \wedge b \in \mathbb{Z}$から、

$\begin{cases}
\log_{10} a & = \log_{10} 610! - \lfloor\log_{10} 610!\rfloor\newline
b & = \lfloor\log_{10} 610!\rfloor
\end{cases}$

すなわち、

$\begin{cases}
a & = 10^{\log_{10} 610! - \lfloor\log_{10} 610!\rfloor}\newline
b & = \lfloor\log_{10} 610!\rfloor
\end{cases}$

となります。

関連:
![https://pbs.twimg.com/media/Cb4JVdcUEAANma0.jpg](https://pbs.twimg.com/media/Cb4JVdcUEAANma0.jpg)

これをPythonに書き下すと次のようになります。

```py3
>>> val = 0
>>> for i in range(2,611):
	val += MT.log10(i)

	
>>> print("610! = ", 10 ** (val - MT.floor(val)), "×10^", MT.floor(val), sep = "")
610! = 8.382616099017579×10^1435
```

うわ～マクドボッタクリだ～(棒読み)

#numpy・scipy・sympy・matplotlib
numpy・scipyを使用すると行列・ベクトル演算をはじめさらに高度なことができます。(e.g. `numpy.array`)
また、sympyは変数式の変形・方程式の求解などができます。(e.g. `sympy.symbols`)
matplotlibはグラフの描画ができます。すなわちgnuplotの仕事を奪えます。
Revel(Golang)でViewを理解する


# Revelとは

RailsっぽいGoのWebFrameworkです。
遅い重いとは言われていますが、思想を統一するというのもチーム開発で大事だと思うので、
そこのコストを削減するために導入はありだと思います。

# Revelの構成
revelでプロジェクトを作るとREADME.mdが勝手に作られてそこに色々説明が書いてあります。

 Description of Contents

The default directory structure of a generated Revel application:

    myapp               App root
      app               App sources
        controllers     App controllers
          init.go       Interceptor registration
        models          App domain models
        routes          Reverse routes (generated code)  # also in frontend source
        views           Templates
      tests             Test suites
      conf              Configuration files
        app.conf        Main configuration file
        routes          Routes definition
      messages          Message files
      public            Public assets # also in frontend source
        css             CSS files
        js              Javascript files
        images          Image files


## Controllerを用意する
こんな感じでControllerを追加してあげます。
<img width="252" alt="スクリーンショット 2016-02-24 0.28.03.png" src="https://qiita-image-store.s3.amazonaws.com/0/31237/bb7b6b64-c621-17cd-b3f6-f0383f317b96.png">

```
// top.go
package controllers

import "github.com/revel/revel"

type Top struct {
	*revel.Controller
}

func (h Top) Index() revel.Result {
	return h.Render()
}
```

## Viewを用意する

上記の下のメソッドが重要でGoだと命名規則がとても大事で、Indexという名前をつけると以下のように用意しておいたViewのtemplateが呼び出されます。

<img width="255" alt="スクリーンショット 2016-02-24 0.31.31.png" src="https://qiita-image-store.s3.amazonaws.com/0/31237/5beace9d-c8d4-8089-6415-11db30bf3626.png">

## Routeをいじる

myapp/conf/route.confに以下のように書くと
localhost:9000でtop.htmlが表示されるようになります。

```
# Routes
# This file defines all application routes (Higher priority routes first)
# ~~~~

module:testrunner

# top
GET     /                                       Top.Index

```

Revelのbookingのサンプルが一番わかりやすいのでぜひ見てみてください。
https://revel.github.io/samples/booking.html
Mac OS Xのgitでhttpsクライアント認証を使用する

# クライアント認証に失敗する問題

gitでSSLクライアント認証が必要なhttpsサイトを使用する場合、通常以下のような設定を行いますが、OS Xではエラーとなります。

```bash
$ git init 
$ git config --local http.sslCert ~/.ssh/Hoge.crt
$ git config --local http.sslKey  ~/.ssh/Hoge.key
$ git config --local http.sslVerify false #オレオレ証明書なので
```
リモートを登録してpullしてみます。

```bash
$ git remote add origin https://gitlab.example.com/test/sample.git
$ git pull origin master
```

以下のようなエラーとなります。

```
* Couldn't find host gitlab.example.com in the .netrc file; using defaults
*   Trying xxx.xxx.xxx.xxx...
* Connected to gitlab.example.com (127.0.0.1) port 443 (#0)
* WARNING: SSL: CURLOPT_SSLKEY is ignored by Secure Transport. The private key must be in the Keychain.
* WARNING: SSL: Certificate type not set, assuming PKCS#12 format.
* SSL: Can't load the certificate "/Users/tad/.ssh/Hoge.crt" and its private key: OSStatus -25299
* Closing connection 0
fatal: unable to access 'https://gitlab.example.com/test/sample.git/': SSL: Can't load the certificate "/Users/tad/.ssh/Hoge.crt" and its private key: OSStatus -25299
```

*エラーの内容がわかりやすいように `export GIT_CURL_VERBOSE=1` してから実行しています。*

`curl --version`するとわかるのですが、OSXではOpenSSLではなくSecure Transportが使用されているためPKCS#12フォーマットの証明書を必要とするようです。

しかし、gitではPKCS#12のファイル(*.p12)を指定できないようです。
はてさて……

# 解決方法

OpenSSLにリンクしたcurl及びgitをbrewからビルド&インストールします。

## curlのインストール

`--with-openssl`を付けてインストールします。

```bash
$ brew install --with-openssl curl
```

## gitのインストール

```bash
$ brew install \
--with-brewed-curl \
--with-brewed-openssl \
git
```

`--with-brewed-openssl`は要らんかも :sweat_smile:
Xcode ビルド設定をxcconfigに書き出す方法

ビルド設定を微妙に変えて、別のTargetを作りたいなと思った時に、
xcconfigで一部を管理したいと思いました。
その時に、xcodebuildコマンドを使うと楽にファイルに書き出せたのでメモしておきます。

```
xcodebuild -target "TargetName" -configuration "ConfigurationName" -showBuildSettings >> Configuration.xcconfig
```
もしくは、

```
xcodebuild -scheme "SchemeName" -showBuildSettings >> Configuration.xcconfig
```

これでビルド設定の全てが書き出されるので、必要な部分だけ残せばいい感じに出来そうです。
Google BigQueryからtoo largeなデータを取得する（Java編）

# 目的
みなさんBigQuery使ってますか？
大量データを安く楽に管理できてクエリの実行も早くて、一度使うとなかなか離れられませんね。
ところで、BigQueryを使っていて以下のエラーに出くわしたことはありませんか？

```
Error: Response too large to return.
```

これはBigQuery側の制約で結果のサイズが128MBを超えた場合に起こります。
Bigなデータを扱ってるのにBigなデータを取り出せないなんて！
Webコンソールからクエリを実行した場合もJava等のプログラムからAPI経由で実行した場合もこの制限は同様です。
BigQuery側ですべて集計するのが正義かもしれませんが、大量の結果に対してさらにプログラムで処理したいことは結構あるのではないでしょうか。

# 解決方法
Webコンソールでは以下の手順を踏むことでBig（Large?どっち?）なデータを取り出せます。
* クエリのオプションで"Destination TableSelect"のテーブルを指定
* 同じくクエリのオプションで"Allow Large Results"にチェック
* クエリを実行
* "Destination TableSelect"で指定したテーブルをGoogleCloudStorageにCSVファイルとしてエクスポート
* CSVファイルをダウンロード

今回紹介するBeBigQueryはこの面倒な手続きを裏でやってくれるJavaライブラリです。
まずはサンプルから見てみましょう。

```java
// 認証情報
BeBigQuery bbq = new BeBigQuery("project-id", "servic-account", new File("path/file.p12"));
// クエリ実行
Iterable tableRows = bbq.query("select * from dataset.table where condition=11")
    .asIterableViaGcs("temp_dataset", "temp_gcs_buckt");
// 結果を表示 TableRowはGoogleのライブラリの型
for (TableRow row : tableRows) {
    for (TableCell cell : row.getF()) {
        System.out.print(cell.getV().toString() + ",");
    }
    System.out.println();
}
```

asIterableViaGcsメソッドの引数に一時的にエクスポートするテーブルのデータセット名、GCSバケット名をそれぞれ指定します。
認証部分も含めて結構シンプルに書けているのではないでしょか。
実はこのBeBigQueryは私がつくったライブラリで[手前味噌](http://zokugo-dict.com/19te/temaemiso.htm)ではございますが。。
アリと思った方はGitHubのスターをしていただけると嬉しいです。
https://github.com/kamiru78/be-bigquery

# 使うための準備
## Mavenを使う人
pom.xmlに以下を追加してください。

```
<dependency>
    <groupId>com.github.kamiru78</groupId>
    <artifactId>be-bigquery</artifactId>
    <version>0.4.0</version>
</dependency>
```
ちなみに最新のバージョンは以下から確認できます。
http://search.maven.org/#search|ga|1|be-bigquery

## Mavenを使わない人
以下からJARをダウンロードできます。
http://search.maven.org/#search|ga|1|be-bigquery
右のほうのDownloadの下の"jar"のリンクから。
Binding Pryがいつも使いこなせない@Rails

binding pryを使ってよく迷子になるもの

- pryコンソールを終了させる方法
`!!!`
※exit!をするとサーバーごと終了してしまう

- pryコンソールでパラメーターの中身を見る方法
`params`
と入力する
※キーの名前はこのパラメーターの中に表示されるものを使用する。ただしコロンの位置が移動するので気をつけること
Git が dirty か判定する方法と CMake での応用例

# 方法

```
git diff --shortstat --exit-code --quiet
```

- 結果が `0` である -> dirty ではない
- 結果が `0` ではない -> dirty である

# 実用例

## CMake での応用

```cmake
execute_process(
  COMMAND git diff --shortstat --exit-code --quiet
  WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
  RESULT_VARIABLE version_git_dirty_flag
)

if( version_git_dirty_flag )
  message( "repository is dirty." )
endif()
```

Git リポジトリーの状態により branch や commit と併せて `target_compile_options` で渡して翻訳するソース内で使ったり、cmake の処理で扱いたい場合に使う。

### Note

- コマンドが出力する result とシェルの世界の true/false 、 cmake の世界の true/false それぞれ混乱しないように取り扱い注意。

# Reference

- [stackoverflow - Checking for a dirty index or untracked files with Git](http://stackoverflow.com/questions/2657935/checking-for-a-dirty-index-or-untracked-files-with-git)
- [CMake - v3.5 - execute_process](https://cmake.org/cmake/help/v3.5/command/execute_process.html)
jQueryを使う（準備だけ）

jQueryに触れてみる。
だいたいはこの本から
http://www.amazon.co.jp/jQuery%E6%9C%AC%E6%A0%BC%E5%85%A5%E9%96%80-%EF%BD%9EJavaScript%E9%96%8B%E7%99%BA%E3%83%BB%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E5%8A%B9%E7%8E%87%E5%8C%96%E3%81%AE%E5%9F%BA%E7%A4%8E%E3%81%8B%E3%82%89-Ajax%E3%83%BBQUnit%E3%81%BE%E3%81%A7-%E6%B2%96%E6%9E%97-%E6%AD%A3%E7%B4%80/dp/477414892X/ref=cm_cr_pr_product_top?ie=UTF8

jQueryを利用するのには2通りの方法がある。
1.JQueryをダウンロードする
2.ダウンロードせず、インターネット上で利用する

今回は、1の必要が生じなければ2でやってみたいと思う。

#jQueryをHTMLで利用する際の記述
`
<script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-V.E.R.min.js"></script>
`


※V.E.Rはバージョンを指す。
<head>要素内に組み込む。
また、jQueryを利用するどのソースコードよりも先に組み込む。


#jQueryのソースコードを組み込む
上記のjQueryの後であれば`<head>`内でも`<body>`内でもよい。

・独立したソースコードを組み込む
・ソースコードを直接記述する
の２通り方法があるが、独立したファイルを組み込むほうがよい。


```lang:first.html
<!DOCTYPE html>
<html>
	<head>
		<title>タイトル</title>
		<script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.6.4.min.js"></script>
		<script type="text/javascript" src="myscript.js"></script>
　　　　　　　　　<!--↑が独立したjQueryのソースコード-->　　
		<script>// <![CDATA[
			jQuery(function($) {
		 	$('<span>', {text: 'テキスト'}).appendTo('div');
		 	});
		 	// ]]></script>
	</head>
	<body>
	
	</body>
</html>
```

myscript.jsも作成したんですが、
このHTMLはずっとテキスト部分が表示されずになんでかなと思ってたら
appendじゃなくてapeendって書いてました。ベタ。
AttributeとData Bagの使用方法


# 概要
レシピやテンプレートの記述などで動的な値を利用したい場合は、AttributeとData Bagといった機能を利用することができます。
複数箇所に同じ値を設定する必要がある場合などは、事前にAttributeまたはData Bagに値を設定しておき、その変数をレシピやテンプレートに記載するといった使い方ができます。

それぞれ以下の違いがあります。

### Attribute
ノード固有の情報を設定しておく場合に使用するもの。

#### Data Bag
ユーザーの情報を複数のノードで共有して使用する場合に使用するもの。
LDAPでユーザー情報を管理するようなもの。

それぞれの利用方法については以下で説明します。

# Attributeの利用方法

Attributeの値を設定する方法は２つあります。
１つはNodeオブジェクトへの記述、もう１つは"attributes/default.rb"への記述です。
同じ設定内容が両方の記述にあった場合、優先度としてはNodeオブジェクトへの記述が優先されます。

## Nodeオブジェクトへの記述

```json:nodes/xxx.json
{
  "httpd": {
    "port": 80
  },
  "run_list":[
    "recipe[git]"
  ]
}
```

上記のようにNodeオブジェクトへ記述した場合は、レシピやテンプレート上で次の変数でport番号を参照できます。

```ruby
default['httpd']['port']
```

## attributes/default.rbへの記述

```ruby:attributes/default.rb
default['apache']['dir'] = "/etc/apache2"
default['apache']['listen_ports"] = [ '80', '443' ]
```

このように記述することができ、同様に次の変数で参照することができます。

```ruby
default['apache']['dir']
```

# Data Bagの利用方法
## ユーザーの情報を記述する
以下のディレクトリを作成し、json形式でユーザーの情報を記述する。

```bash:Command
mkdir -p data_bags/users/<ユーザー名>
```

```json:data_bags/users/sample
{
  "id": "sample",
  "username": "sample",
  "home": "home/sample",
  "shell": "/bin/bash"
}
```

## Data Bagからの値の取得
data_bagメソッドに引数で、'users'を渡すことで、data_bag/users 以下のユーザー一覧を取得できる。
data_bag_itemメソッドで、'users'、ユーザーIDを渡すと、個々のユーザー情報を取得することができる。

```ruby:recipes/default.rb
data_ids = data_bag('users')

data_ids.each do |id|
  u = data_bag_item('users', id)
  user u['username'] do
    home  u['username']
    shell u['shell']
  end
end
```
【自分用】iLO（CLI）について

-

基本、これまで `iLO` 使うときは `GUI` だったけど、
最近 `CLI` 使って全然分からん状態だったので参考にしたサイトURLをメモメモ。

 http://h50146.www5.hp.com/products/software/oe/hpux/developer/column02/ilo/
location.href使ってたらGAのページ解析対象にならなかった


反省を込めて

## 状況
- angularJsを利用
- アナリティクスの計測などを分けるため、Webブラウザ用のページとアプリのwebview用のページを別URLで持っていた
	- {{domain}}/web/hogehogeと{{domain}}/app/hogehogeみたいな
- viewファイルを別管理するのはめんどいので見た目変わらないとこはtemplate化
- ng-clickのfunctionでページ遷移を管理  
  

```
js
//isApp:boolean アプリかどうか
$scope.href = function(url){
	if(isApp){
		location.href = "/app" + url;
	} else {
		location.href = "/web" + url;
	}
} 
```

```
view
<a href="javascript:void(0)" ng-click="href('/hogehoge')">/hogehogeへ</a>
```

## 問題点
- google analyticsのページ解析が数字出してくれない
	- https://support.google.com/analytics/answer/2558811?hl=ja

	```
	ページ解析レポートでは、後続のページへの参照 URL として表示されるページの回数からページ要素のクリック数が推定されます。
	``` 
hrefのリンク先ページのページビューのうち、参照URLがこのページのものを計測してる模様
href="javascript:void(0)"、あかんやつ。。

## 修正方法
- ng-hrefでリンク先を生成するfunction呼べばよかった。。。
	- ていうかng-hrefでfunction動くもんだと思ってなかったしその発想がなかった…

```
js
//isApp:boolean アプリかどうか
$scope.setLink = function(url){
	if(isApp){
		return "/app" + url;
	} else {
		return "/web" + url;
	}
} 
```

```
view
<a ng-href="{{setLink('/hogehoge')}}">/hogehogeへ</a>
```

ページ解析動いた＼(^o^)／

## 感想
今までこれで動いてたからなんとなくこうやってたけど、そもそもこのやり方どうなんだろ・・？  
なんかいい方法あれば教えて下さい