OmniAICreator/Qiita-1.07M huggingface dataset:
テキスト(tsv)の異なる列に対し異なる加工をしたい


##問題
`"#\t1\tAB,CD"`なる文字列を、`a=="#" b==1 c==[[0, 1], [2, 3]]`となるよう加工して代入したい。

##解法
普通であれば、このように書くことが多いと思われる。

```rb:parse_orthodox.rb
id,num,segs="#\t1\tAB,CD".split
num=num.to_i
segs=segs.split(',').map{|e|e.bytes.map{|f|f-65}}
```

ところが、この方法だと、残念ながら値の再代入が発生してしまう。特に型が異なる再代入は好まれないことが多い。
この件についていろいろ考えたところ、このように、Procをzipすれば再代入が発生しないようにできた。

```rb:parse_heterodox.rb
if RUBY_VERSION<'2.2'
	module Kernel
		def itself
			self
		end
	end
end

def parse_data(s)
	s.split(',').map{|e|e.bytes.map{|f|f-65}}
end

id,num,segs="#\t1\tAB,CD".split.zip([:itself.to_proc,:to_i.to_proc,method(:parse_data)]).map{|x,y|y.call(x)}
```

##最後に
勿論この方法は最善ではないと思われますし、C(++)に始まる静的な型を持つ言語には適用できません。
これより良い方法を知っていたら是非ご教示いただけると嬉しいです。

##追記1
鍋谷さんから指摘がありました。
関数に切り出せば実用上問題ないとのこと。
言われてみれば、確かに読みやすいかも。あと、C++でも使える。

```rb:separate_function.rb
def solve(id,num,segs)
	:do_something
end

def parse_data(s)
	s.split(',').map{|e|e.bytes.map{|f|f-65}}
end

id,num,segs="#\t1\tAB,CD".split
solve(id,num.to_i,parse_data(segs))
```
翻訳：4章.戦争指揮(The Conduct of war) 序文

# 翻訳者の感想(小並感)
割とどうでもいいわこれ

# 本文
軍の形は水に喩えることができる。水は高いところを避けて、低いところへと流れる。軍も敵の兵力が充実した「実」の地を避けて、手薄になっている「虚」の地を攻めることで勝利を得る。
- 孫子 -

速度は戦いの基本である。敵の備えていないところをつき、優位をいかす。予測されていないところを移動し、警戒されていないところの敵を叩く
- 孫子 -

はるか昔、私がいつの日か士官になりたいと望む候補生だった時、曹長が私の近くを通った時、私は古い野外勤務令の中にあった孫子の兵法を熟読していた。
曹長は親切な好奇心とともに私をしげしげと見た。
「若人よ、すべてのことで悩んではいけない」
彼はそういった
「戦争にはたった一つの大事なことがあり、それがすべてだ。一番弱っていて、こっちを見ていないやつを、できるだけ速く、できるだけ派手にぶん殴るんだ」
William Slim卿(訳注：イギリス陸軍元帥)

アメリカ海兵隊が目指すたった一つの目標は、平和的な解決策によってそれが成し得ない時に、軍事力によって国家政策目的の安全や防衛を行うことである。
海兵隊がこの大目標を完遂するために提案する手法は戦争の本質と法則の理解による結果であり、戦争に備えた上で軍を動かすことでなければならない。
Vec<T>::iter()はどこにあるの？

*この記事は執筆時点での情報を元にしています。 たぶん近い将来には公式ドキュメントが改良されてこの情報は必要なくなります。*

こんにちは。 やる気は感じられるけどいつまで経っても仕様がstableにならないことで知られていたRust言語ですが、この度ついに、ついに1.0のリリーススケジュールが決まり、とりあえず触ってみるなら今かな？ という時期が到来しています。
しかし残念ながらこの言語、くっそ難しい言語です。 ダイクストラ法ぐらいの規模のアルゴリズムを書くだけでも、意味不明なリファレンスと意味不明なコンパイルエラーに悩まされまくること請け合いです。 がんばってください。
皆さんに私と同じ苦しみを味わせたいのは山々ですが、ここでは涙を呑んで私が最近触ってハマったところをQiitaに書いていきたいと思います。

# `Vec<T>::iter()`の定義ってどこに書いてあるの？
`Vec<T>::iter()`だけに限らず、特に`Vec<T>`型と`String`型には、(2015年2月末現在)[リファレンス](http://doc.rust-lang.org/std/vec/struct.Vec.html)にぱっと見で載ってないように見えるメソッドが多数存在します。 その中でも特に代表的なものとしてこの`Vec<T>::iter()`を挙げました。 なんで特にこいつかというと、**`Vec`型のリファレンスページのサンプルコード中で普通に呼んでるにもかかわらずそのリファレンスページ中のどこにも説明がない**という、ちょっとアホかと言いたくなるような状態になっているからです。

順を追ってこの`iter()`メソッドがどこにあって、どうやって呼ばれるのかを説明していきます。

### 参照型のメソッド呼び出し時の暗黙の参照外し
まず思い出してほしいことその1です。
Rust型では参照型(`&Hoge`)も普通の型(`Hoge`)も、どちらも同じようにメソッドを呼び出し可能です。

    let val : Option<i32> = Some(10);
    println!("{}", val.unwrap());  // もちろん.unwrap()の呼び出しは合法
    
    let refval : &Option<i32> = &val;
    println!("{}", refval.unwrap());  // 参照型に対しても同じように.unwrap()を呼び出せる
    println!("{}", (*refval).unwrap());  // 参照外しを明示的にやってもよい

Rustのコンパイラは、この動作を実現するために、`a.b()`という構文を見かけたら、

1. `a`の型の impl の中に、`b`という名前のメソッドがあるか調べ、あったらそれを呼び出す。
2. 1. に失敗したら、`*a`という参照外しの式が合法かを調べる。
   `a`の型が参照ではないただの型だった(例えば`a`が`i32`型だった)場合は、コンパイルエラー。
3. `*a`の型の impl の中に、`b`という名前のメソッドがあるか調べ、あったらそれを呼び出す。
4. 3. に失敗したら、今度は`**a`という参照外しの式が合法かを…(2.に戻る)

という感じの処理を(たぶん)やっています。

### 演算子オーバーロードがあります
RustはJavaではないので、演算子オーバーロードがあります。
`std::ops`モジュール内にある、`Add`や`BitAnd` traits を impl することにより、`+`演算子や`&`演算子をオーバーロードすることができるようになっています。 もちろん、参照外しの`*`演算子も、`Deref`または`DerefMut` traits を impl することで実現できてしまいます。
`Deref` trait のリファレンスページには、traitの定義がこう載ってます。

    pub trait Deref {
        type Target;

        fn deref(&'a self) -> &'a <Self as Deref>::Target;
    }

いろいろすっ飛ばして説明すると、`Deref<Target=T>` trait を impl する型は、参照外し演算子`*`で`&T`型に変換できるということです。

### 犯人探し

ここまで分かった上でもう一度よくリファレンスページを見てみると、犯人が見つかります。

![deref.png](https://qiita-image-store.s3.amazonaws.com/0/67508/84d15f7b-93a5-bada-c8a8-485650f7db79.png)

**お前か！** 
この impl のおかげで、`Vec<T>`型の変数に参照外しをかけると、`&[T]`型に変身するのです。 のみならず、
**`Vec<T>`型に impl されていないメソッドを呼びだそうとすると、`[T]`型の impl にその名前のメソッドがないかを確認しに行く**ようになるのです。ちょっとした継承(どちらかというと委譲？)みたいなものですね。
果たして`[T]`型(slice型)の[リファレンスページ](http://doc.rust-lang.org/std/primitive.slice.html)を見に行くと……ありました、`iter()`メソッド。
ということで、**型のメソッドを調べたい時は、その型のリファレンスページだけでなく`Deref`で変換される型のリファレンスページも見ないとダメだよ！**というのが今回の記事の結論になります。 お疲れさまでした。
近い将来、このわかりづらい仕様はドキュメントの方をなんとかする方向で調整が進んでいるようなので(でも1.0には間に合わなさそう……)、修正に期待しましょう。

[参考: rustdoc: Include (or link to) methods "inherited" through auto-deref](https://github.com/rust-lang/rust/issues/19190)
a*x + b*y = gcd(a,b)  を解くプログラム


何名かの方が最大公約数を求めるプログラムを作っていたので、その応用問題です。受験数学とかで見たことあるのでは？

整数 a, b に対して、以下を満たす整数 x, y を求めよ。

```math
ax + by = gcd(a,b) 
```
* ベズーの等式(Bézout's identity)、というようです。
  でも identity 恒等式でなく equation 方程式なんだけど……

* 解は無限にあるので、1組の $(x,y)$ を求めればよいです
* びっくりするくらい簡単なので、せめて５分間だけでもアタマをひねってみてください

   [ヒント](http://qiita.com/kuh96/private/0f84d1089cff01bb7096)
ASP.NET MVC5（C#） 共通のレイアウト

# 共通のレイアウト

複数のページで共通して使うレイアウトのビュー

## レイアウトファイルの所在

初期値は以下

・ Views/Shared/_Layout.cshtml

各ページの設定は、各ビューのcshtmlファイルの冒頭に下記のように記述してある。

<pre><code class="c#">
@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}
</code></pre>


なお、初期状態でここをコメントアウトしても見た目は変わらない。
各ビューのcshtmlファイルの冒頭に記述がない場合、Views/\_ViewStart.cshtml に記載してあるレイアウトファイルを参照する。
見た目が変わらないのは、ここで指定してあるレイアウトが Views/Shared/_Layout.cshtml であるため。

## レイアウトファイルの編集

### ヘッダのタイトル文字列の編集

下記の箇所を編集する
<pre><code class="c#">
@Html.ActionLink("Application name", "Index", "Home", new { area = "" }, new { @class = "navbar-brand" })
</code></pre>

編集後
<pre><code class="c#">
@Html.ActionLink("MyApp", "Index", "MyPage", new { area = "" }, new { @class = "navbar-brand" })
</code></pre>

→表記がMyAppに変わり、クリックするとhttp://ホスト名/MyPageに遷移する

（参考）
[Adding a View](http://www.asp.net/mvc/overview/getting-started/introduction/adding-a-view)
翻訳： COMMANDER’S INTENT (司令官の意図)

#出典
http://www.clausewitz.com/readings/mcdp1.pdf
ここのCommander's intent の章を翻訳します

# なぜ翻訳したし
アメリカ海兵隊はベトナム戦争後の改革が求められた時期に、上位者が下位者に大きな裁量を許すことで、より「素早い」戦争をできるように人事改革をしました。
このあたりは野中先生の著書、アメリカ海兵隊に詳しいです。
これを翻訳することで、上位者が下位者に大きな裁量を許す、アジャイルっぽいマネジメントを考えるときに役に立てばいいなと思ったからです

# 翻訳者の感想(小並感)
アジャイルサムライで超かんたんに触れられていた司令官の意図の細かい部分
上級者はすごいふわっとしたことを言って逃げることを許さず、「完全に明確なレベルで目的をはっきりさせねばならない」とする一方で、「下級者の行動を制約してはならない」としている。

# 本文
## Commander's intent
「司令官の意図」を通して我々は大規模な状況における協調的な主導を達成した。
司令官の意図とは下級者が行動を取り巻く周囲のコンテクストを彼らが理解することを助けるように設計された仕組みである。
意図を明確に伝える目的は、不測の事態が発生し、当初の計画から状況が外れ始めた時に、下級者に(より上位の司令官の意図と矛盾のない方針で)自己判断や決断をすることを可能にすることにある。

どんなMissionにも二つの部分がある。
完遂されるべきタスクと、そのタスクの背後にある目的や意図だ。
司令官の意図とは、いかなるmissionにおいてもその一部として存在する。
司令官の意図(intent)は説明する行動の目的を説明する一方で、タスクはなされるべき行動について説明する、
タスクは何がなされるべきかについて説明する。ときには、いつ、どこで、という部分も含まれる。
一方で意図は「なぜ」を説明する。
このふたつのうち、意図の方が優先される。
状況は変化すればタスクは前提が変わって意味がなくなる。一方で、意図は変わらずありつづけ、我々が何をなすべきかを示し続ける。
司令官の意図を理解することは我々に司令官が望むことを、隷下の部隊が協調して主導的に行動することを可能にする。

司令官が(常にではないが、軍隊ではこの仕事は大抵副司令がやる)unitに作戦目標(mission)を割り当てたときに部隊が達成すべき司令官の意図は確立する
司令官は普通は作戦目標(mission)を割り当てられた下級者に、作戦説明の一部として意図を説明する。
もし、下級者に発令された作戦の意図が不明瞭であるなら、それをたずねはっきりさせねばならない。
発令された作戦目標(mission)にもとづき、司令官は作戦行動(operation)の指針を立案する。指針とは部隊がどのようにして作戦を完遂するかを説明する。そして司令官はそれを下級者達に命令する。
それぞれの下級者への作戦説明は下級者一人ごとに単一の意図を含む
下級者それぞれに与えられた意図は、司令官の意図を完成することに貢献する。また司令官の意図は、さらに上級者から与えられた意図に基づいたものである。
意図のTop-Downフローは、我々の行動に一貫性と継続性を与える。またこのフローは自己判断による適切なBottom-Upの行動に必須のコンテクストを確立する。

与えられたタスクの前に置く「〜するために」というフレーズは、簡単に狙いを捉えることを可能にする
敵(enemy)に対する集中を維持することで、我々は敵に関する狙いを表現する
例えば、"敵が河を渡って撤退することを妨げるために、橋を押さえろ"みたいな感じで。
「〜するために」文に加えて拡大した指導(guidance)を与えることもしばしば必要である
どんな出来事であっても、司令官の狙いを示す一文は簡潔かつ有無を言わせぬもの(compelling)でなくてはならない。簡潔であればあるほど良い。
上級者の意図を下級者は常に意識するべきである、なぜならそれはすべての決定を影響を与えるからである。
複雑で難解な司令官の意図は目的の完遂を失敗させるだろう。

明快な表現と意図の理解は、各員の努力が一方向にまとまって用いられるために必要不可欠である。
理解することの負荷は、上級者と下級者に同様にふりかかる。
上級者は完全に明確なレベルで目的をはっきりさせねばならない。しかしそれは(下級者の)自己判断を過度に縛るものであってはならない。
司令官が期待するものを、下級者は明快に理解せねばならない。
さらに押し進めるならば、下級者は最低でも二段階上のレベルの上級者の意図を理解せねばならない。

allow: 可能にする
initiative: 自己判断
UnityでListを使いたい



List構造で何かを管理したいときに配列やArraryList,type[]とかあるがここでは List<> を使う用法を紹介する。

	using System.Collections.Generic;

なんとこれを冒頭に入れないとList<>は使えない。入れると


	private List<GameObject> myList = new List<GameObject>();


というように宣言できる。intやfloatをリスト管理したい場合は

	private List<int> intList = new List<int>();	//int型のリスト
	private List<float> floatList = new List<float>();	//float型のリスト


のように書いてやれば良い。
使う際は


	myList.Add(newObj1);	//GameObject型 newObj1をmyListに加える
	GameObject newObj2 = myList[0]; //Listへのアクセス
	myList.RemoveAt(0); //Listの0番目の要素を消す
	myList.Clear(); //Listすべての要素を削除



要素はAddで加える。アクセスは配列のように行える。要素の削除はRemoveAtで行えるのだが、なんとこれは削除した要素より後ろの要素を前詰めしてくれる。素晴らしい。例えば

	List<int> intList = new List<int>();
	intList.Add(1);	// intList = {1}
	intList.Add(2);	// intList = {1,2}
	intList.Add(3);	// intList = {1,2,3}
	intList.RemoveAt(1);	// intList = {1,3}
	int b = intList[1];	// bには3が入る


とういことが出来る。
ピクシブのブクマするときのユーザーのモチベーションを分析してみた

# 前提
ピクシブのブクマって通常のブクマ機能とは違うよね、って思ったので、欲求ベースで分類してみた

# 動機
## 後で見返したいから
一般的な意味のブクマ動作の動機にもっとも近い
収集欲求が近い

## 作者へのファンアピール
記名式の評価？
アイドルのライブで最前列でアピールするようなもの
「xxさんがブクマしました」って出るから。あるいは作品をブクマした人一覧にアイコンが出るから。
作者に対して自分を認知してもらいたいという欲求に基づくもの  

逆に作者が「xxさん(有名絵師)からブクマされている！うおおおおお！！！」的な反応がある

## 作者への応援
ブクマはランキングの重要な評価要素である
ランキング入りすると絵の作者が喜ぶ
作者を喜ばせるために、ランキング入りできるようにブクマする
貢献欲求っていうんだっけ？そういうの
(この動機においては見返したいという欲求はない。むしろブクマ一覧の純度を汚染するため後で削除する人もいる。)
httpdの簡易アクセス解析

access_logを指定して，どのIPアドレスからどれだけアクセスされたかざっくり見る

```
sudo cut -d" " -f1 /var/log/httpd/access_log | sort | uniq -c | sort -r
```

過去分も含める場合

```
cd /var/log
sudo find httpd -name access_log* -exec cut -d" " -f1 {} \; | sort | uniq -c | sort -r
```

データが多すぎると無理かも
Swiftのオプショナル型からBoolを返すメソッド呼ぶときの書き方


Swift 1.1です。

例えばこんなクラスがあるとして、このURLがhttps://から始まってるかを判定したいとします。

```swift
class User {
  var url: String?
}
```

Swiftぽいかなと自分が思ってる書き方はこうだけど、ifがネストするのがちょっと嫌。elseがしんどい。

```swift
if let url = user.url {
  if url.hasPrefix("https://") {
    println("HTTPS!")
  }
}

```

これはコンパイルエラーになります。

```swift
if let url = user.url && url.hasPrefix("https://") {
  println("HTTPS!")
}
```

これもコンパイルエラー。戻り値がnil or Boolだからダメみたい。

```swift
if user.url?.hasPrefix("https://") {
  println("HTTPS!")
}
```

これは通るけど、、、、負けた気がする。美しくない！

```swift
if user.url?.hasPrefix("https://") == true {
  println("HTTPS!")
}
```

これもなんかオプショナル型の敗北を感じてしまうので間違ってる気がする。

```swift
if user.url? && user.url!.hasPrefix("https://") {
  println("HTTPS!")
}
```

Ruby on Railsならこれでいいのに

```ruby
if user.url.try(:start_with?, "https://") 
  puts "HTTPS!"
end
```

どう書くのがいいんだろう。

### 追記

コメントで教えていただきましたが、swift 1.2では`if let where`でこの悩みが解決するそうです。
便利！そしてタイムリーな悩みでしたｗ

```swift
if let url = user.url where url.hasPrefix("https://") {
  println("HTTPS!")
}
```
Gitlab-7.8.0 Omnibusにアップデート

Gitlab Ominibusを7.8.0にアップデートした

前にもやったのですが、メモするの忘れて色々ぐぐったり500エラーだったり時間がかかった。

今回は、メモをして次回アップデートはスムーズに行なう

すでインストール済みだったので、新規インストール手順は割愛させて頂きます。

```
$ curl -o gitlab-7.8.0_omnibus-1.el6.x86_64.rpm https://downloads-packages.s3.amazonaws.com/centos-6.6/gitlab-7.8.0_omnibus-1.el6.x86_64.rpm
$ sudo rpm -Uvh gitlab-7.8.0_omnibus-1.el6.x86_64.rpm
$ sudo gitlab-ctl reconfigure
$ sudo gitlab-ctl restart
```

# その他、ハマった部分

## Error executing action `create` on resource 'user[gitlab-www]'というエラーが出たら

```
$ sudo gitlab-ctl stop nginx
```

## メモリが足りないため、ブラウザにアクセスすると502エラーになる（swapファイル作成）

[Gitlabでチーム専用のGithubを構築する。](http://qiita.com/xkumiyu/items/3191a0d262b9e616c973)でも書いてましたが、公式サイトの要件ではメモリ1GBがらしい。。。

### swapファイルを作成し仮想メモリを作成

```
$ sudo dd if=/dev/zero of=/swapfile bs=1G count=1
$ sudo mkswap /swapfile
$ sudo swapon /swapfile
$ sudo vi /etc/fstab
```

```
/swapfile none swap defaults 0 0
```

## メモリなどの調べ方

```
$ sudo du -sh /var/opt/gitlab /var/log/gitlab
```

## アバターが表示されない（ReverseProxy時）

ReverseProxyをかましたGitLabではAvatar画像が表示されない

[ReverseProxy時におけるGitLabのAvatar問題](http://xnn.sakura.ne.jp/blog/2014/08/gitlab_avatar_problem_under_reverse_proxy/)で対応方法が書いてあったので、試したところうまくいきました。


```
$ sudo -s
# vi /opt/gitlab/embedded/service/gitlab-rails/app/models/user.rb

  def avatar_url(size = nil)
    if avatar.present?
      [gitlab_config.url, avatar.url].join
    else
      GravatarService.new.execute(email, size)
    end
  end

```

```
  def avatar_url(size = nil)
    if avatar.present?
      # [gitlab_config.url, avatar.url].join
      avatar.url
    else
      GravatarService.new.execute(email, size)
    end
  end
```

## その他コマンド（Starting and stopping）

```
$ sudo gitlab-ctl start
$ sudo gitlab-ctl stop
$ sudo gitlab-ctl restart

$ sudo gitlab-ctl restart sidekiq
$ sudo gitlab-ctl hup unicorn
```

# 公式ドキュメント

* [GitLab.org / omnibus-gitlab](https://gitlab.com/gitlab-org/omnibus-gitlab/tree/master)


# 参考サイト

* [ReverseProxy時におけるGitLabのAvatar問題](http://xnn.sakura.ne.jp/blog/2014/08/gitlab_avatar_problem_under_reverse_proxy/)
* [Vagrant + CentOS6.6 + GitLab Omnibus 7.7.2（アップグレード方法もあるよ）](http://qiita.com/murachi1208/items/9f35fec67c9c15d7f809)
* [Error on migrating from 7.3.0 to 7.3.1 using omnibus](https://gitlab.com/gitlab-org/omnibus-gitlab/issues/260)
* [postgresql down](https://gitlab.com/gitlab-org/omnibus-gitlab/issues/169)
* [Vagrant内のCentOS 6.5にGitLab Omnibusをインストールしてみた話](http://qiita.com/tacck/items/d025f02e1db656a6fc66)
* [Gitlabでチーム専用のGithubを構築する。](http://qiita.com/xkumiyu/items/3191a0d262b9e616c973)
consul membersの結果でbash補完する

consulでホストを管理してる状態で、bash-completionでのsshの補完候補に`consul members`の結果を使いたかったんです。個別にsshすると最近は若者にdisられるそうですが、それはそれこれはこれとして…

`/etc/bash_completion` の `_known_hosts_real` の定義を以下のように置き換えるととりあえずできました。共通のを上書きしたくなければ個別に .bash_profile などで再定義すればよいですね。

```bash
_known_hosts_real()
{
     local members=$(consul members -status=alive | awk '!/Node/{printf("%s ", $1)}')
     COMPREPLY=( $( \
        compgen -W "$members" \
                ${COMP_WORDS[COMP_CWORD]} \
    ) )
    return 0
}
```
静的メソッドとは

静的メソッドについてメモ。ググれば出るような内容
static 戻り値　メソッド名() {実装}
static void main(String[] args) {

}

メソッドの宣言の先頭にstaticがつけられたメソッド

staticクラスは呼び出す際にインスタンスを必要とせず
クラス.メソッド名で呼び出せる。
【超初心者向け】GetterとSetterについて。

GetterとSetter
オブジェクト指向言語でプログラムを書いているときに、単純なメンバ変数を参照したり操作するために使う。

まずは、この状態でgenerateをしてあげる。

```

public class Name {
    String name;
}

```


![Screen Shot 2015-02-24 at 17.57.46.png](https://qiita-image-store.s3.amazonaws.com/0/55731/722de1c8-5553-d85e-84d8-5ca29117c6dd.png)

そうすると、nameの選択ができるので選択をすると以下のようになる。

```
public String getName() { return name; }

public void setName(String name) { this.name = name; }
```
MeCabのセットアップ



# MeCabのインストール

Chaosなるのが嫌なので`yum`で入れる。

まず、リポジトリを登録。
※　なぜかgroongaのとこにいました。

```:/etc/yum.repos.d/groonga.repo
[groonga]
name=Groonga for CentOS $releasever - $basearch
baseurl=http://packages.groonga.org/centos/6/$basearch/
gpgcheck=1
enabled=1
gpgkey=http://packages.groonga.org/centos/RPM-GPG-KEY-groonga
```

`yum`でインストール

```shell
$ yum install -y mecab mecab-devel
```

## NAIST辞書のインストール

ipaよりこちらが主流らしいので。

```shell
$ wget http://iij.dl.sourceforge.jp/naist-jdic/53500/mecab-naist-jdic-0.6.3b-20111013.tar.gz
$ tar xvzf mecab-naist-jdic-0.6.3b-20111013.tar.gz
$ cd mecab-naist-jdic-0.6.3b-20111013
$ ./configure --with-charset=utf8 --with-mecab-config=/usr/bin/mecab-config
$ make
$ make install
```

`/etc/mecabrc`を編集し、`dicdir`の参照先を変更する。

```:/etc/mecabrc
;
; Configuration file of MeCab
;
; $Id: mecabrc.in,v 1.3 2006/05/29 15:36:08 taku-ku Exp $;
;
; dicdir = /usr/lib64/mecab/dic/ipadic
dicdir = /usr/lib64/mecab/dic/naist-jdic

; userdic = /home/foo/bar/user.dic

; output-format-type = wakati
; input-buffer-size = 8192

; node-format = %m\n
; bos-format = %S\n
; eos-format = EOS\n

```

## 動作確認

```shell
$ mecab -D

filename:	/usr/lib64/mecab/dic/naist-jdic/sys.dic
version:	102
charset:	utf8
type:	0
size:	485863
left size:	1396
right size:	1396
```

# システム辞書に他のソースをいれる

今回はcsvの作成は割愛して、S3の取得から。
辞書ソースになるcsvを`/usr/lib64/mecab/dic/naist-jdic`に配置する。

```shell
$ aws s3 cp s3://hoge/wikipedia.csv /usr/lib64/mecab/dic/naist-jdic/wikipwdia.csv
$ aws s3 cp s3://hoge/hatena.csv /usr/lib64/mecab/dic/naist-jdic/hatena.csv
$ aws s3 cp s3://hoge/nikoniko.csv /usr/lib64/mecab/dic/naist-jdic/nikoniko.csv
```

naistのcsvファイルのエンコードを変更する。

```shell
$ iconv -f EUC-JP -t UTF-8 /usr/lib64/mecab/dic/naist-jdic/naist-jdic.csv > /usr/lib64/mecab/dic/naist-jdic/naist-jdic.csv
```

コンパイルする。
※　なぜか他のディレクトリに出力しないとコケる。

```
$ /usr/libexec/mecab/mecab-dict-index -f utf8 -t utf8 -d /usr/lib64/mecab/dic/naist-jdic -o /usr/local/src/
```

配置して完了。

```shell
$ cp /usr/local/src/sys.dic /usr/lib64/mecab/dic/naist-jdic/sys.dic
```
three.jsのCanvasRendererが一部のWindowsで上手く動作しなかった件と対応


## はじめに
three.jsと言えばJavascript用のWebGLライブラリとして有名ですね。
three.jsにはCanvasRendererというWebGLを使わずにレンダリングする機能があります。

**今回はthree.jsのCanvasRendererを使ったときに一部のwindowsマシンだけで生じた現象について**です。

## やりたかったこと

![](http://i.gyazo.com/cf7364e383736f8a6e12e1eb72305ade.png)
こんな感じで白い背景に線を引いていくアニメーションを作りました。

## 現象: windowsで真っ黒に表示される件
![](http://i.gyazo.com/e4335a0fe4abdef1ba82785ad024aba1.png)
一部のwindowsマシンで白黒が逆転するという現象が起きました。

http://threejs.org/docs/#Reference/Renderers/CanvasRenderer

## 原因

よくあるthree.jsのコードです。`render`関数内で`setCrearColor`メソッドを呼んで色を指定しています。この指定で基本的にWindowsとMacは色が変わってくれます。

```
function render() {
  camera.lookAt( scene.position);
  renderer.setClearColor('#fff', 0.1);
  renderer.render(scene,camera);
  controls.update();
}
```

一部のWindowsマシンだけが`setClearColor`が効かなくなってました。

## 対策

このように修正したところ問題が発生していたWindowsマシンでも通常動作できました。

```js
  renderer.setClearColor('#fff', 0.1);
```

↓

```js
  renderer.setClearColor(0xffffff, 0.1);
```


原因がよく分かってないからもやもやしますね汗
誰か分かる方がいたら教えてください汗
FIFO

うんこーどだけどどこかで役に立つかも…立たないか(´д｀)

【追記】使う度にfifo_init()する仕様です、さーせんm(__)m

```c:tinyfifo.c
/* Tiny FIFO */

#include <stdio.h>

#define		TINY_FIFO_SIZE		5

typedef		unsigned char		fifo_t;

typedef enum tiny_fifo_code {
	FIFO_COMPLETE,
	FIFO_ERROR
} fifo_e;

static struct s_tiny_fifo_cntx {
	fifo_t		buff[TINY_FIFO_SIZE];
	int			count;
	int			length;
} tiny_fifo;

static void fifo_init(void)
{
	tiny_fifo.count = 0;
	tiny_fifo.length = 0;
}

static int fifo_count(void)
{
	return tiny_fifo.length - tiny_fifo.count;
}

static fifo_e fifo_set(fifo_t x)
{
	fifo_e result = FIFO_ERROR;

	if (tiny_fifo.length < TINY_FIFO_SIZE) {
		tiny_fifo.buff[tiny_fifo.length++] = x;
		result = FIFO_COMPLETE;
	}

	return result;
}

static fifo_e fifo_get(fifo_t *x)
{
	fifo_e result = FIFO_ERROR;

	if (x != NULL) {
		if (tiny_fifo.count < tiny_fifo.length) {
			*x = tiny_fifo.buff[tiny_fifo.count++];
			result = FIFO_COMPLETE;
		}
	}

	return result;
}

/* for TEST */

static fifo_e fifo_set_(fifo_t x)
{
	fifo_e result = fifo_set(x);
	if (result == FIFO_COMPLETE) {
		printf("Set %d.\n", x);
	}
	else {
		printf("ERROR : Set %d.\n", x);
	}
	return result;
}

static fifo_e fifo_get_(fifo_t *x)
{
	fifo_e result = fifo_get(x);
	if (result == FIFO_COMPLETE) {
		printf("Get %d.\n", *x);
	}
	else {
		printf("ERROR : Get.\n");
	}
	return result;
}

int main(int argc, char* argv[])
{
	fifo_t x;
	fifo_init();
	fifo_set_(1);
	fifo_set_(3);
	fifo_get_(&x);
	fifo_set_(8);
	fifo_set_(9);
	fifo_set_(2);
	fifo_set_(6);
	while (fifo_count()) {
		fifo_get_(&x);
	}
	fifo_get_(&x);
	getchar();
	return 0;
}

```
Ruby で URL をリテラルみたいに書けるように

しました。
※2/27:解説を追記しました。

```rb
require 'uri'

def https(string)
  yield(URI.parse("https:#{string}"))
end
def http(string)
  yield(URI.parse("http:#{string}"))
end
class Symbol
  def /(string)
    "#{self.to_s}/#{string.to_s}"
  end
end
class String
  def /(string)
    "#{self.to_s}/#{string.to_s}"
  end
end
class Token < Struct.new(:name, :prev)
  def method_missing(name, *args)
    Token.new(name, self)
  end
  def /(string)
    "#{self.to_s}/#{string.to_s}"
  end
  def to_s
    if self.prev 
      "#{self.prev.to_s}.#{self.name}"
    else
      self.name
    end
  end
end
def Object.const_missing(name)
  Token.new(name, nil)
end
def method_missing(name, *args)
  Token.new(name, nil)
end
```

（※実用性を考えていないのでめっちゃ雑な実装です）

これで、

```rb
https://twitter.com/aoitaku/status/416459501827411968 do |url|
  p url
end
```

こうなります。

## かいせつ

何が起こっているのかというと、これをわかりやすく書き直すとこうなります。

```rb
https(:/ / twitter.com / aoitaku / status / 416459501827411968)
```

``:/ 割る twitter.com 割る aoitaku 割る status 割る 416459501827411968``

の結果を ``https`` メソッドの引数に渡しています。``twitter.com`` は ``twitter`` メソッドの戻り値に対して ``com`` メソッドを呼んでます。そんなメソッドはもちろんないんですが、method_missing を使って「あることにします」（なので逆に存在するメソッド名と同じ名前を使うと容易に死にます）。

なお ``/`` は左結合なので、

```rb
https((((:/ / twitter.com) / aoitaku) / status) / 416459501827411968)
```

こうなります。数値が途中に挟まっても平気ですね（もちろん+とか-とか%とか演算子に使われる記号が入ってくると容易に死にますし記号系は全般ダメです）。

## 罠
やったー！

と喜ぶのは早くて、こういうことやってもちょっとしたことで簡単に字句解析に失敗します。

```rb
p https://twitter.com/aoitaku/status/416459501827411968
# => unknown regexp options - twttr
```

``//`` が正規表現リテラルとみなされるのでだめ。

```rb
p({ https: ((//twitter.com / aoitaku) / status) / 416459501827411968) })
```

こうなります。``https`` がハッシュのキーとして扱われてしまうんですね。

```rb
p https ://twitter.com/aoitaku/status/416459501827411968
```

こうやって ``:`` を ``https`` から分離してしまえばちゃんとパースしてくれます（嬉しくない）。

あと既に書いたようにめっちゃ雑な実装なので既に存在する変数名とかメソッド名とかが URL に含まれると容易に死にます。  
ちゃんとやろうと思ったら適当なブロックの中だけ ``method_missing`` 拾うとかにしないとだめなので ``{ ~ }`` で囲ってあげることになるんだけどそれってひょっとして最初から``" ~ "`` で囲えばよくない？？？？？？？

## まとめ

おとなしく文字列使おう。
<!--[if lt IE 9 ]> <![endif]-->をJavaScriptでやりたい

参考：http://stackoverflow.com/questions/17907445/how-to-detect-ie11

```js
// IEだった場合はバージョン番号を返す。それ以外ではNaNを返す。
function ieVer(){
  var msie = parseInt((/msie (\d+)/.exec(navigator.userAgent.toLowerCase()) || [])[1]);

  if (isNaN(msie)) {
    msie = parseInt((/trident\/.*; rv:(\d+)/.exec(navigator.userAgent.toLowerCase()) || [])[1]);
  }
  return msie;
}

// IEかどうかの判定
var isIE = !isNaN(ieVer());

// IEのバージョンを取得
var version = ieVer();

// IE9未満かどうか
var ver = ieVer();
if (!isNaN(ver) && ver < 9) {
  // IE9未満の場合のみ
}
```
c++ builder XE4 > 文字列のHash値を求める > MD5使用

動作環境

    C++ Builder XE4

UnicodeString文字列のHash値をMD5で求めたい。

バージョンXEについては[こちら]( http://www.gesource.jp/weblog/?p=5226 )の通りでいい。
XE4になるとIndyの部分が変わってくるため、以下のようにする。

```cpp
    #include <IdHashMessageDigest.hpp> // for MD5
    String msg;
    msg = L"Hello, world";

    TIdHashMessageDigest5 *md5;
    md5 = new TIdHashMessageDigest5();

    String hash = md5->HashStringAsHex(msg, IndyTextEncoding(TEncoding::ASCII)).LowerCase();
    ShowMessage(hash);
```

### 訂正
(追記 2018/11/14)

上記ではnewしたままなので、`delete md5`をした方が良さそう。
target="_blank" target="_parent"　違い

target="_blank"
別窓ウィンドウを開いてリンク先を表示する。

target="_self"
現在いるウィンドウに表示（普通のページ遷移）

target="_top"
フレーム分割を解除し、ウィンドウ全体でページ遷移

target="_parent"
親フレームに表示

### iframeを使った例：

```html
<HTML>

  <iframe>←(△)
    <iframe>←(■)

      <a href="http://qiita.com/" target="★"></a>

    <iframe/>←（■）終わり
  <iframe/>←（△）終わり

<HTML/>
```

＞リンク先の表示場所が違います。

①★に`_self`を入れた場合、iframe(■)のなかにQiitaのページが表示。

②★に`_blank`を入れた場合、別窓ウィンドウがひらき、そこでリンク先を表示。

③★に`_top`を入れた場合、現在のウィンドウでページ遷移する。ウィンドウ全体でQiitaページ表示。

③★に`_parent`を入れた場合、iframe(△)のなかにQiitaのページが表示。
iPython notebookで並列計算


iPythonでmultiprocessing.Poolのmapを使うと
kernelを停止した時にPythonがゾンビ化するためできるだけ使いたくない．
そこで，iPythonのデフォルトの機能で並列化する．

ここではiPyhtonによる並列化の最低限の使い方を示します．
詳細は [Parallel Computing with IPython]を参照してください．


追記
-----
ipython notebook がjupyterに移行したことにより初期設定では
クラスタの起動画面でipyparallelをpipインストールするように要求されるようになりました．(ずいぶん前から移行してましたが今頃になって追記します 2016/1/19)

インストールコマンド

	pip install ipyparallel


さらに，jupyter_notebook_config.pyに以下の１行を書き加えないと有効になりません．．．

	c.NotebookApp.server_extensions.append('ipyparallel.nbextension')
	

jupyter_notebook_config.pyはホームディレクトリの.jupyter内にありますが．．．．以下の１行を実行しないとデフォルトでは生成されていないようです．．．

	jupyter notebook --generate-config


クラスタの起動
--------------
iPython notebook起動時の画面からClustersを選択する.
下記のようにnotebook起動時に指定したprofileに対応するエンジン数を設定・開始する.

![Screen Shot 2015-02-24 at 4.38.46 PM.png](https://qiita-image-store.s3.amazonaws.com/0/65106/9b571d18-3b57-aca4-62fe-44b0c31f0feb.png "Screen Shot 2015-02-24 at 4.38.46 PM.png")


コードの実行
----------

```py
import numpy as np
from IPython import parallel
clients = parallel.Client()
# 同期実行(並列計算中に制御は返ってこない)
clients.block = True 
view = clients.load_balanced_view()
dview = clients[:]
#クラスタ(エンジン?)の数を確認
print clients.ids

def func(n):
    return np.arange(n)

# クラスタ(エンジン?)にnumpyをimportさせる
dview.execute('import numpy as np')

# funcを並列実行
view.map(func, np.arange(3))

```

参考文献
--------
 * [Parallel Computing with IPython](http://www.astro.washington.edu/users/vanderplas/Astr599/notebooks/21_IPythonParallel)
[Parallel Computing with IPython]: http://www.astro.washington.edu/users/vanderplas/Astr599/notebooks/21_IPythonParallel
Redmine plugin開発で、WIN32OLE経由でExcelを使う場合の注意点


## 背景
Windows版Redmine限定の話になります。

自分が作っているRedmine pluginから、Excelを使いたいケースが発生しました。

gemを利用することも考えましたが、単純なCell操作だけでは済まなかったので、WIN32OLEを使って、直接Excelを操作することにしました。

## はまったこと

### 現象

development環境で思ったように動かせるようになったのですが、
いざproduction環境で動かしてみると次のエラーが発生しました。

```
WIN32OLERuntimeError ((in OLE method `open': )
OLE error code:800A03EC in Microsoft Excel
ファイル 'C:¥temp¥test.xlsx' にアクセスできません。次のいずれかの理由が考えられます。

• ファイル名またはパスが存在しません。
• ファイルが他のプログラムによって使用されています。
• 保存しようとしているブックと同じ名前のブックが現在開かれています。
HRESULT error code:0x80020009
Exception occurred.):
```

動かしたコードはこんな感じです。

```rb:test.rb
require 'win32ole'

:

def test_excel
  excel = WIN32OLE.new('Excel.Application')
  excel.visible = false
  begin
    workbook = excel.Workbooks.Open 'C:\temp\test.xlsx'
    :
    workbook.Close(:SaveChanges => false)
  ensure
    excel.Quit
  end
end
```

### 解決方法

Redmine実行ユーザー(Local System)のExcel作業用フォルダを作っておきます。

Windowsが32bit、またはWindowsが64bitかつExcelが64bitの場合
`C:\Windows\System32\config\systemprofile\Desktop\`

Windowsが64bitかつExcelが32bitの場合
`C:\Windows\SysWOW64\config\systemprofile\Desktop\`

参考：[IIS 実行ユーザーで DCOM を使用して Excel を扱う方法 (Windows Server 2008, 2008 R2)](http://sorceryforce.net/WordPress/?p=178)

### 調べたこと

まずはエラーで調べてみました。

`OLE error code:800A03EC in Microsoft Excel`

いくつか情報が出てきたので、該当しそうなところから試しました。

- [「別メモリ領域で実行する」で Excel エラー "800a03ec"](http://support.microsoft.com/kb/413856/ja)

　期待できる記事だったのですが、残念ながら現象は変わらずです。

- [cygwin+ruby+win32oleでExcelファイルを開けない](http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/49251)

　これは自分の現象とほぼ同じ内容でしたが、質問のみの記事でした。（残念）

- [Ruby - win32ole - Excel](http://seesaawiki.jp/w/kou1okada/d/Ruby%20-%20win32ole%20-%20Excel)

　これは環境変数周りの設定のことが書かれていたので期待しましたが、現象は変わりませんでした。

- ファイルパスがという話を見かけましたが、ファイル名を変えると、別のエラー（ファイルが存在しないといった内容）になるのでファイルパスは大丈夫そうとわかりました。


次に、Excelそのものにアクセスできていないのでは？と考えました。

試しに、

- 新規ブックを作成
- Cellの値を設定
- 保存

しようとすると、保存のところでこけたので、Excelにはアクセスできてることがわかりました。

いよいよ万策尽きたかというときに、ふとIISではどうやってるのだろう？という疑問がわきました。

そこで、"iis excel エラー"で検索をかけて、一つ見てみました。

[IIS 実行ユーザーで DCOM を使用して Excel を扱う方法 (Windows Server 2008, 2008 R2)](http://sorceryforce.net/WordPress/?p=178)

これでした！
Excelが動くためのフォルダが必要だということ！

development環境ではuse_redmine.batを起動してredmineを動かすので、
ログインしているユーザーのフォルダを使ってExcelが動いているということで納得です。

動いたときにはかなり感動しました！感謝です！
ProcessingからAndroid書き出しをする。

とりあえず、メモっています。

こちら参考にしたWEBサイトです。
http://www1.jiu.ac.jp/~nakajima/classWeb/pdfs/game/gameLect02.pdf

classWebがリンク切れなのですが、以下からダウンロードできました。
http://www1.jiu.ac.jp/~nakajima/classWeb/game/sample.html
[Swift]UIImageのレンダリングモードまとめ

ナビゲーションバー周りにオリジナル画像を設定すると、画像が一色に塗りつぶされていて「？」となりました。
調べてみたところ、UIImageにはレンダリングモードというものがあるようなのでメモしておきます。
## レンダリングモード（UIImageRenderingMode）とは
UIImageには3種類のレンダリングモードオプションがあります（iOS 7以降）。

| オプション | 内容 |
|-----------|-------------|
| UIImageRenderingModeAlwaysOriginal|オリジナル画像を描画する| 
| UIImageRenderingModeAlwaysTemplate |テンプレート画像を描画する| 
| UIImageRenderingModeAutomatic | コンテキスト毎のレンダリング（デフォルト）| 

次のスクリーンショットが、オリジナルのボタン画像がテンプレート画像で描画されたナビゲーションバーです。何も指定しないと、このようにオリジナル画像がtintColorで塗りつぶされます。

![スクリーンショット 2015-02-24 16.26.08.png](https://qiita-image-store.s3.amazonaws.com/0/4900/3c26f950-de62-a9c3-27de-16f4bca79639.png "スクリーンショット 2015-02-24 16.26.08.png")

下が、オリジナル画像で表示させた場合です。

![スクリーンショット 2015-02-24 16.25.09.png](https://qiita-image-store.s3.amazonaws.com/0/4900/1f0e01d6-2c35-26f7-2e17-91ba058c9687.png "スクリーンショット 2015-02-24 16.25.09.png")

`UIImageRenderingModeAutomatic`では、バー周り（ナビゲーションバー、タブバー）のボタンにUIImageを設定すると、テンプレート画像が用いられます。他のビューではオリジナル画像が使用されます。

続いて、オリジナル画像オプションを指定する方法を記述します。


## レンダリングモードのオプション指定
指定なしでのUIImageオブジェクト生成。Automaticオプションでオブジェクトが生成されます。

```Swift
// オプション指定なし
let buttonImage = UIImage(named:"button.png")?
```

オリジナル画像を使用するために、オプションを指定します。

```Swift
// オリジナル画像オプション指定
let buttonImage = UIImage(named:"button.png")?.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal)
```

上記はほんの少し省略した書き方もできます。

```Swift
// オリジナル画像オプション指定（省略版）
let buttonImage = UIImage(named:"button.png")?.imageWithRenderingMode(.AlwaysOriginal)
```

## その他
- 特にタブバーでオリジナル画像を用いる場合、選択時と非選択時用の画像をそれぞれ設定する必要があるようです。
- 初めてのQiita投稿で、大変緊張しました。
Laravel5 で Vagrant 色々便利にする


なんとかHomesteadでLaravelの設定ができたので・・

## composerのHomesteadホームが遠い・・

```
export HOMESTEAD_HOME=$HOME/.composer/vendor/laravel/homestead
```

環境変数に定義してみた。
これで ``` cd $HOMESTEAD_HOME ``` できる。

## Vagrant sshを普通のsshで出来るようにする

ssh使うならssh configしといた方が良い。

参考：[.ssh/configの書き方 - ぷろぐらまはっくす MkⅡ](http://nauthiz.hatenablog.com/entry/20100919/1284892108)

```
vagrant ssh-config --host homestead >> ~/.ssh/config
```

vagrantならssh configに付け足すようの設定を上のコマンドで吐き出してくれる。
便利。
これでどのディレクトリに居るとか意識せずに ```ssh homestead``` すればvagrantにsshログイン出来る。


# Vagrantの便利コマンド

ホストのvagrantがどうなっちゃってるのか、いっぺんに知りたい。

```
vagrant global-status
```

起動してるかとかが一覧で見れる。
うっかりhaltし忘れてたヤツとか見つけられる。
IDが出てくるので、ここでいらないのをdestoryしたりもできる。

# CentOSでどのサービスが起動してるか知りたい

``` vagrant ssh``` した後、どのサービスが起動してるのかわからん！時。

```
service --status-all
```

動いてるサービスが一覧で出てくる。便利。

# CentOSでPostgreSqlに接続する

```
sudo -u postgres psql
```

PostgreSqlの ```postgres``` ユーザーで、PostgreSqlにログインできる。
URLScheme

##カスタムURLスキーム

１、TargetsのInfoを選択
２、URLTypesの部分で設定できる。

・Identifier：一意であれば何でも良い。
・URL Schemes：好きなスキーム名を。ただし他のアプリと被らないように。

![url.png](https://qiita-image-store.s3.amazonaws.com/0/67504/a6479197-89e5-3cc9-2bfc-e8079e63529a.png)

#####URLSchemeは、
１、Appleと被ったらApple優先で起動される
２、その他のアプリと被ったら、どちらが起動されるかわからない。
→なので、自分のアプリで使おうとしているスキームと被るサービスがないかチェックする。

主要なScheme検索
http://handleopenurl.com/


######例えば、
`URL Schemes：hello`
と設定したアプリがiOSデバイスに入っているとき、
ブラウザに
`hello://`
と入力するとそのアプリが起動する。

######こう使える
・アプリがインストールされているかどうかの判定ができる
・x-callback-urlでは、Webページを開く際にChromeを使い、ユーザがページの閲覧を終えたら元のアプリに戻ってくるような動きをさせることができる




参考文献
http://develop.calmscape.net/dev/232/
http://tech-gym.com/2012/02/ios/709.html
http://techlife.cookpad.com/entry/2014/11/14/143841

http://support.apsalar.com/customer/ja/portal/articles/1434704-%E3%83%AA%E3%82%BF%E3%83%BC%E3%82%B2%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0%E3%82%AD%E3%83%A3%E3%83%B3%E3%83%9A%E3%83%BC%E3%83%B3%E7%94%A8%E3%81%AE%E3%83%87%E3%82%A3%E3%83%BC%E3%83%97%E3%83%AA%E3%83%B3%E3%82%AF
VirtualHostで区切られたアプリケーションに対して個別にBasic認証をかける

ステージング用サーバのメンテナンスで、各アプリケーションに対してBasic認証を掛けたかったのですが、手順がスムーズに思い出せなかったのでメモ。

# 手順

## 1. パスワードファイル`.htpasswd`の作成

対象のディレクティブのドキュメントルート上で、`htpasswd`コマンドを実行します。

```bash
-bash-4.1$ htpasswd
Usage:
	htpasswd [-cmdpsD] passwordfile username
	htpasswd -b[cmdpsD] passwordfile username password

	htpasswd -n[mdps] username
	htpasswd -nb[mdps] username password
 -c  Create a new file.
 -n  Don't update file; display results on stdout.
 -m  Force MD5 encryption of the password.
 -d  Force CRYPT encryption of the password (default).
 -p  Do not encrypt the password (plaintext).
 -s  Force SHA encryption of the password.
 -b  Use the password from the command line rather than prompting for it.
 -D  Delete the specified user.
```

今回は新規でファイルを作成するので、以下のコマンドを実行。

```bash
-bash-4.1$ htpasswd -bc .htpasswd hoge hogepass
Adding password for user hoge
```

以下のようなファイルが生成されているはずです。

```bash:.htpasswd
hoge:GZ9xwU5haegLA
```

## 2. Apacheの設定
対象の`VirtualHost`ディレクティブに対して、以下のように記述します。

```hoge.conf
<VirtualHost *:80>
  ServerName hoge.stage.unicast.ne.jp
  DocumentRoot /home/admin/apps/hoge/current/public
  PassengerEnabled on
  <Directory />
    AllowOverride all
    Options -MultiViews

    AuthType Basic
    AuthUserFile /home/admin/apps/hoge/.htpasswd
    AuthName "Authentication is required."
    Require user hoge
  </Directory>
</VirtualHost>
```

ちなみに、リバースプロキシの設定がされている場合は、以下のように設定します（ちょっとつまずきました）。

```fuga.conf
<VirtualHost *:80>
  ServerName fuga.stage.unicast.ne.jp
  DocumentRoot /home/admin/apps/fuga/current/public
  ProxyRequests Off
  <Proxy *>
    Order deny,allow
    Allow from all
    AuthType Basic
    AuthUserFile /home/admin/apps/fuga/.htpasswd
    AuthName "Authentication is required."
    Require user fuga
  </Proxy>
  ProxyPass / http://localhost:4000/
  ProxyPassReverse / http://localhost:4000/
</VirtualHost>
```

# 参考URL

- [- 株式会社エスロジカル - 技術ドキュメント Apache：htpasswd コマンド](http://www.slogical.co.jp/tech/apache_htpasswd.html)
- [.htpasswdをつくる | WEBdev](http://webdev.jp.net/create-htpasswd/)
- [VirtualHostでBasic認証を設定 | WEBdev](http://webdev.jp.net/apache-virtualhost-basic/)
- [ApacheでProxyしてるところに対してBasic認証を付ける | Hack](http://hack.aipo.com/archives/4989/)
PostgreSql コマンドの覚え書き


on mac.

```
$ 始まりのコマンドはターミナル。
# 始まりはpsqlでsuper user接続してる。
```

## サービスの起動

```
$ postgres -D /usr/local/var/postgres
```

## ターミナルから接続

インストール時に ```postgres``` データベースは出来てるので、とりあえずそこにつないでみる。

```
$ psql -d postgres
```

### オプション

- d : データベースを指定（未指定でログインユーザー名のデータベース）
- U : ユーザーを指定（未指定だとログインユーザー）
- h : ホスト名（未指定だとlocalhost)

## 接続の前に

### psqlの便利オプション

#### データベース一覧

```
$ psql -l
```
というか ``` psql --help ``` 見れば良いという話・・


## psql内での操作

### バージョンを知りたい

```
# select version();
```

### ユーザー一覧表示

```
# \du
```

### データベース一覧

```
# \l
```

### 他のデータベースに接続し直す

```
# \connect db_name
```

### ユーザーを作る

```
# create user username;
CREATE ROLE
```

```CREATE ROLE``` と表示されたらOK.


### ユーザーにパスワードを指定する

```
# \password username（エンターキー）
Enter new password:
Enter it again:
```
エンターキーを押すと、２回パスワードを入力する状態になる。

### データベースを作る

```
# create database db_name;
CREATE DATABASE
```

```CREATE DATABASE``` と表示されたらOK.


- - -
参考URL
[CentOS7.0（Vagrant）にPostgreSQL 9.4インストール - タイガー！タイガー！じれったいぞー！（SE編）](http://tigertaizo.hatenablog.com/entry/2015/02/11/155036)

## 番外(vagrant)

vagrantで作ったpostgresqlに接続したかった。。

```
$ sudo -u postgres psql
```

PostgreSqlのユーザー名 ```postgres``` で PostgreSqlにログイン
ng-styleではまった

なんか地味にはまったのでメモ

```
○ ng-style="{ margin: 0 }"
☓ ng-style="{ margin: 10px }"
○ ng-style="{ margin: '10px' }"

☓ ng-style="{ margin-right: '10px' }"
○ ng-style="{ 'margin-right': '10px' }"

☓ ng-style="{ margin: '10px'; padding: '10px' }"
○ ng-style="{ margin: '10px', padding: '10px' }"
```

styleと違ってng-styleにオブジェクトを渡しているんだと気づけば当然なんだけど、

- パラメータ
    - 0は数値なのでok
    - 10pxは文字列なのでシングルクォートで囲まないとだめ
- key
    - marginはオブジェクトのkeyとして問題ない
    - maring-leftは、`-`が演算子として扱われるのでシングルクオートで囲まないとだめ
- 区切り
    - styleのように`;`で区切ってはダメ
    - オブジェクトなので`,`で区切る
Laravel5 を VM環境で用意する


## 前提環境

- mac 10.9.5
- php 5.6
- composer 1.0.0
- vagrant 1.6.3

### 目標

- vagrantでLaravelを動かす
- DBはPostgreSql

macでphp＋postgresqlやろうとして、

```
[PDOException]
could not find driver
```
が出たからhomesteadに挑戦したという・・

## 手順

基本的に公式のドキュメント通り。

[Laravel Homestead 5.0.0 Laravel](http://readouble.com/laravel/5/0/0/ja/homestead.html)

### Vagrant boxの追加

```
vagrant box add laravel/homestead
```

### Homesteadのインストール

手順は2種類。git cloneするのと、composerで入れるの。
git cloneの場合は[こちらの手順](http://qiita.com/syossan27/items/0104615e5f9ae26f0720)で良い。


### composerを選択した場合

#### composerでhomesteadをインストール

```
composer global require "laravel/homestead=~2.0"
```

#### ```~/.composer/vendor/bin```にPATHを通す

ターミナルからhomesteadコマンドが使えるようになる。

#### homestead 設定ファイルを作成

```
homestead init
```

Homestead.yaml ファイルが ```~/.homestead``` ディレクトリに作られる。


#### Homestead.yamlの設定を変更する

ターミナルで

```
homestead edit
```

を打つと、editorでHomestead.yamlを編集できる。
普通にテキスト編集エディタでファイルを開いて編集しても同じ。

設定項目

- ip: vagrantに割り当てられるIP address
- authorize: 公開鍵のパス
- keys: 秘密鍵のパス
- folters: ホストでlaravelのコードを置きたいディレクトリとvagrantでのディレクトリのマッピング
- sites: Nginxサイト設定
- databases: vagrant上のMySql, PostgreSqlに作るデータベース名
- variables: vagrant上での環境変数

### vagrant up

公式のドキュメントに

```
Homesteadディレクトリーで vagrant up コマンドを実行してください。
```

と書いてあるが、Homesteadディレクトリーがどこなのかわからん・・
これでめちゃめちゃハマりました・・
普通にgit cloneしてる場合は、そのcloneしたディレクトリで良いのですが、composerでインストールした場合

```
cd ~/.composer/vendor/laravel/homestead
```

でした。。
``` homestead init``` で作られた ```~/.homestead``` ではありません。。
こっちは設定ファイルが置かれるだけらしい・・
ひどい目にあった；；

# 動作確認

## アプリの起動

vagrant sshでログインして、ホームにHomestead.yamlで指定した ```folders``` のvagrant側のディレクトリが出来てるか確認する。

出来てたら、cdして、アプリケーション起動。

```
php artisan serve
```

ホストから ``` 192.168.10.10:8000 ``` (Homestead.yamlのIP設定を変えていれば、IP部分を読み替えて）接続・・・・

できない！！なぜ〜〜

```
php artisan serve --host 0.0.0.0
```

にすると解決した。

参考URL:[laravelのartisan serveで起動したビルトインサーバに外部からアクセスする方法 – 日本の天ぷら情報](http://tmpla.info/access-artisan-serve-from-outside/)
ありがとうございます！

## DB接続が出来てるか確認

まだ Larabelの初期設定（DBの設定をpostgresに変えたくらい）しかしていないので、モデルが無い。
が、DB接続可能か調べるのは以下で大丈夫っぽい。

初めてmigrationするなら

```
php artisan migrate:install
```

もうマイグレーション済なら

```
php artisan migrate:refresh
```
とかでエラーが出なければ大丈夫っぽい。
Jubatus0.7.0で実装された多腕バンディットを使う

# 使う関数
　register_arm([腕（string）])
　register_reward([腕を回す人（string）], [腕（string）], [報酬（float）])
　[次に回す腕(string)] = select_arm([腕を回す人（string）])

# Config(UCB1の場合)
*ucb1 softmax exp3 epsilon_greedyがあるっぽい*

```json:ucb1.json
 {
  "method": "ucb1",
  "parameter": {
  }
}
```

# 起動
jubatus-0.7.0/config/bandit/の中にサンプルjsonがあるので使うのが楽

jubabandit -f /usr/local/src/jubatus-installer-master/download/jubatus-0.7.0/config/bandit/ucb1.json

# pythonサンプル
```py:bandit.py
#!/usr/bin/env python
# coding: utf-8

host = '127.0.0.1'
port = 9199
name = 'test'

import sys
import json
import random

import jubatus
from jubatus.common import Datum

def train(client):
    arms = [
        u'ヤフー',
        u'グーグル',
        u'楽天',
    ]
    player = u'bandit'

    for arm in arms:
        client.register_arm(arm)
        reword = 0.0 if random.randint(1, 100) <= 70 else 1.0
        client.register_reward(player, arm, reword)
        
        sys.stdout.write(arm.encode('utf-8'))
        sys.stdout.write('\n')
        sys.stdout.write(str(reword))
        sys.stdout.write('\n')

def predict(client):
    player = u'bandit'
    res = client.select_arm(player)
    sys.stdout.write(str(res))
    sys.stdout.write('\n')

if __name__ == '__main__':
    # connect to the jubatus
    client = jubatus.Bandit(host, port, name)
    # run example
    train(client)
    predict(client)
```
DockerでPhalcon 1.3.4 ベースイメージ (CLI用)


LAMP環境の上にPalconの環境を構築しましたが、
http://qiita.com/_teruchi/items/095b36e70724c4b4a0e9

今回はもっと素のPhalcon環境を作ります。

まずはDockerfile

```Dockerfile
#
# Phalcon Base Image
#
# 20150224 Phalcon 1.3.4 (remi)
#
FROM centos:6
MAINTAINER teruchi

# update yum
RUN yum update -y && \
    yum clean all

# epel repo
RUN yum install -y http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm && \
    yum clean all
COPY epel.repo /etc/yum.repos.d/

# remi repo
RUN yum install -y http://rpms.famillecollet.com/enterprise/remi-release-6.rpm && \
    yum clean all
COPY remi.repo /etc/yum.repos.d/

# install phalcon
RUN yum install -y php-phalcon php-mbstring php-xml && \
    yum clean all
```

CentOS 6.6の上に作っていきます。
今回もremiを使ってます。

この状態でもCLIとしてPhalconが動く状態が出来上がっているので、
app配下にcli環境を作っておけば、

```
docker run -it --rm -v $(pwd):/mnt/app teruchi/phalcon-base-cli php cli.php
```
として実行することができます。

epel.repo、remi.repoはDockerfileと一緒にGitHubに上がってます。
https://github.com/teruchi/phalcon-base-cli
Terraformのログ出したい



なんかドキュメントになくてどうやってんだろと思ってたら、ここにあった。環境変数設定したら出せるらしい。

https://github.com/hashicorp/terraform/blob/master/log.go#L10-L11


    export TF_LOG=1
    export TF_LOG_PATH='./terraform.log'

hashicorpさんプロダクトはこの形式が多いな。


## ログの例

    $ cat terraform.log
	2015/02/24 14:57:41 [INFO] Terraform version: 0.3.6
	2015/02/24 14:57:41 Detected home directory from env var: /Users/akuwano
	2015/02/24 14:57:41 [DEBUG] Discoverd plugin: atlas = /Users/akuwano/homebrew/bin/terraform-provider-atlas
	2015/02/24 14:57:41 [DEBUG] Discoverd plugin: aws = /Users/akuwano/homebrew/bin/terraform-provider-aws
	2015/02/24 14:57:41 [DEBUG] Discoverd plugin: cloudflare = /Users/akuwano/homebrew/bin/terraform-provider-cloudflare
	2015/02/24 14:57:41 [DEBUG] Discoverd plugin: cloudstack = /Users/akuwano/homebrew/bin/terraform-provider-cloudstack
	2015/02/24 14:57:41 [DEBUG] Discoverd plugin: consul = /Users/akuwano/homebrew/bin/terraform-provider-consul
	2015/02/24 14:57:41 [DEBUG] Discoverd plugin: digitalocean = /Users/akuwano/homebrew/bin/terraform-provider-digitalocean
	2015/02/24 14:57:41 [DEBUG] Discoverd plugin: dnsimple = /Users/akuwano/homebrew/bin/terraform-provider-dnsimple
	2015/02/24 14:57:41 [DEBUG] Discoverd plugin: google = /Users/akuwano/homebrew/bin/terraform-provider-google
	2015/02/24 14:57:41 [DEBUG] Discoverd plugin: heroku = /Users/akuwano/homebrew/bin/terraform-provider-heroku
	2015/02/24 14:57:41 [DEBUG] Discoverd plugin: mailgun = /Users/akuwano/homebrew/bin/terraform-provider-mailgun
	2015/02/24 14:57:41 [DEBUG] Discoverd plugin: null = /Users/akuwano/homebrew/bin/terraform-provider-null
	2015/02/24 14:57:41 [DEBUG] Discoverd plugin: file = /Users/akuwano/homebrew/bin/terraform-provisioner-file
	2015/02/24 14:57:41 [DEBUG] Discoverd plugin: local-exec = /Users/akuwano/homebrew/bin/terraform-provisioner-local-exec
	2015/02/24 14:57:41 [DEBUG] Discoverd plugin: remote-exec = /Users/akuwano/homebrew/bin/terraform-provisioner-remote-exec
	2015/02/24 14:57:41 Detected home directory from env var: /Users/akuwano
    (snip)
ASP.NET MVC5（C#） コントローラー Controller

# 作成までの流れ

1. Solution ExplorerのControllersフォルダで右クリック
2. Add \> Controllerを選択
3. Emptyを選択※
4. 名前を\<ページ名\>Controllerのような名称にする

Controllerファイルと同時に、ビューフォルダも同時に作成される（関連記事1参照）。

※ Empty以外を選択するとどうなるかは現在未調査。

（関連記事）
1. [ASP.NET MVC5（C#）ビュー View](http://qiita.com/standtsukai/items/83c476bd0575c809f5c0)

# 使い方

アクション名と同一のメソッドに処理を記述できる。

極端な話、初期状態でIndexメソッドのreturnの型をstringに変更した上で、特定の文字列を返すようにしてやると、その文字列だけ返すページが出来上がる。

<pre><code class="c#">
public string Index() 
{ 
     return "This is my <b>default</b> action..."; 
} 
</code></pre>

ただし、この使い方はMVCにおけるControllerとしての使い方から外れているためやめたほうがいい。

# ビューへの値の受け渡し

ViewBagを利用する。
具体的には、下記のようにおのおの記述すると、MessageとNumTimesの値がビューに反映される。

（Controller）
<pre><code class="c#">
        public ActionResult Welcome(string name, int numTimes = 1)
        {
            ViewBag.Message = "Hello " + name;
            ViewBag.NumTimes = numTimes;

            return View();
        }
</code></pre>

（View）
<pre><code class="c#">

@{
    ViewBag.Title = "Welcome";
}

\<h2\>Welcome\</h2\>

\<ul>
    @for (int i = 0; i < ViewBag.NumTimes; i++)
    {
        <li>@ViewBag.Message</li>
    }
\</ul>
</code></pre>
Redditのスマホ版/PC版表示を切り替えるブックマークレット



最近、Redditの人気が出てきたようですね。スマホ表示切り替えボタンが表示されないページもあるようなので作ってみました。

スマホ表示の時はPC表示へ切り替えます。

Safariや他のブラウザからも使えます。

## ブックマークレット

```
javascript:(function(){var%20url%20=%20location.href;if%20(/reddit\.com/.test(url))%20{var%20result;if%20(/\.compact/.test(url))%20{result%20=%20url.replace(/\.compact/,%20'');}%20else%20{result%20=%20url+'.compact';}location.href%20=%20result;}})();
```


## ソースコード

URLの`.compact`を入れ替えているだけですね。

```js
(function(){
  var url = location.href;
  if (/reddit\.com/.test(url)) {
    var result;
    if (/\.compact/.test(url)) {
      result = url.replace(/\.compact/, '');
    } else {
      result = url+'.compact';
    }
    location.href = result;
  }
})();
```
DebianのLiveインストールイメージをブータブルにUSBスティックへ書き込むメモ

単にISOを`dd`すれば良いんやね。

### Liveインストールイメージ（ISO）のダウンロード

```bash

$ wget debian-live-7.8.0-i386-gnome-desktop.iso
```

ダウンロード元は以下のURLより。

- https://www.debian.org/CD/live/
    - http://cdimage.debian.org/debian-cd/current-live/i386/iso-hybrid/
        - [debian-live-7.8.0-i386-gnome-desktop.iso](http://cdimage.debian.org/debian-cd/current-live/i386/iso-hybrid/debian-live-7.8.0-i386-gnome-desktop.iso)

### USBスティックのデバイスを確認

```bash
$ diskutil list
[略]
/dev/disk4
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *2.1 GB     disk4
   1:                 DOS_FAT_32 UNTITLED                2.1 GB     disk4s1
```

どうやら`/dev/disk4`がUSBスティックらしい。

### USBスティックをアンマウント

```bash
$ diskutil umountDisk /dev/disk4
```

### イメージの書き込み

単に`dd`でコピーすれば良いらしい。

```bash

$ sudo time dd if=debian-live-7.8.0-i386-gnome-desktop.iso of=/dev/disk4 bs=32m
1287+1 records in
1287+1 records out
1349664768 bytes transferred in 407.597761 secs (3311266 bytes/sec)
      407.62 real         0.00 user        10.77 sys
```

- USBスティック: USB 2.0
- ISOのファイルサイズ: 1.3 GB
- 処理時間: 7分かからないくらい。
ASP.NET MVC5（C#）ビュー View

自分用メモ

# ビューフォルダの所在

・ Controllerファイルが Controllers/\<ページ名\>Controller.cs の場合

Controllerファイル作成時に下記にViewフォルダが<b>自動</b>で作成される。

・ Views/\<ページ名\>/

# ビューファイルの所在

各ビューファイルは下記名称で作成する。

・ View/\<ページ名\>/<アクション名>.cshtml

# for文が使える

例）
<pre><code class="c#">

@{
    ViewBag.Title = "Welcome";
}

\<h2\>Welcome\</h2\>

\<ul>
    @for (int i = 0; i < ViewBag.NumTimes; i++)
    {
        <li>@ViewBag.Message</li>
    }
\</ul>
</code></pre>
summernoteのimage upload機能を止める

[summernote](http://summernote.org/)とは、ブラウザから自由度の高い文章の編集が出来る、wisiwygの一種です。

image upload機能の停止方法がよく分からなかったので、ここで共有します。

# 止め方1: disableDragAndDropをtrueにする
`disableDragAndDrop`という機能があるとコメントで教えていただいたので、この機能を使えば、image uploadを止められます。

```js
$('.summernote').summernote({
  disableDragAndDrop: true
});
```

#止め方2: ボタンや要素を隠して使えなくする
止め方1で済むと思いますが、それでは止められなかった時の事を考慮して、無理矢理使えなくする方法も残しておきます。
* toolbarからimage uploadに関するボタンを外す
* dropzoneを隠す
## toolbarからimage uploadに関するボタンを外す

外すボタンを指定できなさそうなので、使うボタンだけを指定します。

```js
$('.summernote').summernote({
  toolbar: [
    ['style', ['style']],
    ['style', ['bold', 'italic', 'underline', 'clear']],
    ['fontsize', ['fontsize']],
    ['color', ['color']],
    ['para', ['ul', 'ol', 'paragraph']],
    ['height', ['height']],
    ['insert', ['link']],
    //['insert', ['picture', 'link']],
    ['table', ['table']],
  ]
})
```

## dropzoneを隠す

toolbarからimage uploadボタンを外しても、ブラウザに画像をドラッグドロップすると画像が受理されてしまいます。
そのため、cssに下記の記述を追加して、drop機能を隠します。

```css
.note-editor .note-dropzone { opacity: 0 !important; }
```

以上です。
もっとスマートな方法があれば、教えて頂けると嬉しいです。

#参考
「summernote disable image uploading」とかで検索しました。
http://www.usrtriton.nl/assets/bower/summernote/features.html
https://github.com/summernote/summernote/issues/187
https://github.com/summernote/summernote/issues/187
CakePHPのログファイルがサーバーの容量を食ってたからログローテーション設定で対処した



# CakePHPのエラーログがサーバー容量を圧迫していた
サーバーの容量が圧迫されてたので調べてみたら、cakephp/app/tmp/logsディレクトリがサーバー容量を半分以上占有している事が発覚。


※ちなみに調べるときに使ったコマンドはこちら。

```
# du | sort -nr | more
```
詳しくは[サーバー容量を占有しているフォルダを調べるコマンド](http://qiita.com/katsukii/items/e8967bcc727841e735aa)。

# ログローテーションで解決

## CakePHPのログローテーションとは

デバックログやエラーログ等をファイルに書きだす際に、延々とログがたまってしまいサーバーの容量を圧迫してしまう。

ログローテーションの設定により、ログファイルを日付毎等に分割したりファイルの上限サイズを決めたりできる。


## 設定方法

bootstrap.phpのログ設定に以下の記述を追加する。

```php:
'size' => '10MB',
'rotate' => 10
```

- size：1つのファイルの上限サイズ 上限に達するとファイルの切替が行われる。
- rotate：ローテーションの最大数。設定数前のファイルは削除される。

設定後のbootstrap.php

```php:app/Config/bootstrap.php

CakeLog::config('debug', array(
	'engine' => 'FileLog',
	'types' => array('notice', 'info', 'debug'),
	'file' => 'debug',
    'size' => '10MB',
    'rotate' => 10,
));
CakeLog::config('error', array(
	'engine' => 'FileLog',
	'types' => array('warning', 'error', 'critical', 'alert', 'emergency'),
	'file' => 'error',
    'size' => '10MB',
    'rotate' => 10,
));
NetBeansのユーザインターフェース言語を英語にする

画面の狭い***MacでNetBeans***を使うと、***メニューバー溢れて***しまって時計とかアイコンとかが見えなくなります。ちーと困り者です。

いえ、実はカッコ悪いと思っているだけで大して困っていません。


理由はともかくNetBeansのユーザインターフェースは英語にしてしまいます。


`~/Library/Application Support/NetBeans/***NetBeansのバージョン***/etc/netbeans.conf` というファイルを作成し、NetBeansのオプションに `-J-Duser.language=en` を付け加えます。

バージョン8.0.2の場合、このような内容になります。

```text:netbeans.conf
netbeans_default_options="-J-client -J-Xss2m -J-Xms32m -J-XX:PermSize=32m -J-Dapple.laf.useScreenMenuBar=true -J-Dapple.awt.graphics.UseQuartz=true -J-Dsun.java2d.noddraw=true -J-Dsun.java2d.dpiaware=true -J-Dsun.zip.disableMemoryMapping=true -J-Duser.language=en"
```