OmniAICreator/Qiita-1.07M huggingface dataset:
LinqProviderを独自実装するときに役立つサイト

Linqは便利で大好きなんですけど、いざWeb ServiceのAPIにLinqでアクセスするような LinqProviderを作成しようとすると、一体どうやって実装するんだ？ってなりますよね。
msdnのドキュメントで、一応、LinqProviderの実装を行うサンプル(http://msdn.microsoft.com/en-us/library/bb546158.aspx) があるんですけど、このサンプル、Where文しか対応していませんし、もっと複雑なクエリを行うときは大半のコードを書き換える羽目になるんですよね。
複雑なクエリ（GroupBy, Joinなど）ができるような実装をしたい場合は、このサイト(http://blogs.msdn.com/b/mattwar/archive/2008/11/18/linq-links.aspx) が役に立ちます。
ただ、全文英語なのと、途中で実装の飛躍があるため、理解するのが難しい箇所がありますが...
しかし、サンプルコードをダウンロードして、自分なりに書き換えると、結構簡単にLinqでAPIにアクセスできてしまいます。
pythonにおける相対urlの処理

pythonでos.pathというとても便利なクラスがあるのですが、絶対パスと相対パスを結合する時に、

```python
# abs_path = "/usr/hoge/", rel_path = "./poyo/"
path.normpath(path.join(abs_path, rel_path))
# "/usr/hoge/poyo"
```
とよくやります。これ、urlでも使えるなーと思い、

```python
# abs_path = "http://hoge/", rel_path = "./poyo/"
path.normpath(path.join(abs_url, rel_url) 
# "http:/hoge/poyo/"
```
としていたら、urlが開けないと怒られました。それでちょっと悩んだ訳ですが、理由は簡単で "http://hoge/" というurlが path.normpath で "http:/hoge" に変換されていたんですね。pathはファイルシステムのパスのためのクラスなので、こういう仕様になっていたわけです。
urlの結合には urlparseクラスのurljoinメソッドを使うそうです。

```python
# abs_path = "http://hoge/", rel_path = "./poyo/"
urlparse.urljoin(abs_url, rel_url)
# "http://hoge/poyo/"
```
戻り値が複数ある場合の変数代入

戻り値が複数ある場合の、受け取り方による値の違い

```
def get_multi_return
  return 'A','B','C'
end
```

#基本ルール
##戻り値と受け取り側の数が同じ場合
素直に１つずつ受け取る

```
a, b, c = get_multi_return
a #=> 'A'
b #=> 'B'
c #=> 'C'
```

##受け取り側の数が１つの場合
全ての戻り値を持った配列として受け取る

```
m = get_multi_return
m #=> ['A', 'B', 'C']
```

##受け取り側の数が少ない場合
前から順番に受け取り、残りは捨てられる

```
p, q = get_multi_return
p #=> 'A'
q #=> 'B'
```

##受け取り側の数が多い場合
前から順に受け取り、足りない分はnilが入る

```
p, q, r, s = get_multi_return
p #=> 'A'
q #=> 'B'
r #=> 'C'
s #=> nil
```

##「*」をつけると明示的に配列で受け取れる
受け取られなかった残りの値を持った配列になる

```
x, *y = get_multi_return
x #=> 'A'
y #=> ['B', 'C']
```

#配列について
##戻り値が足りない場合は空の配列になる

```
a, b, c, *m = get_multi_return
a #=> 'A'
b #=> 'B'
c #=> 'C'
m #=> []
```

##配列は最後でなくても良い
最初でも

```
*x, y = get_multi_return
x #=> ['A', 'B']
y #=> 'C'
```
間でも

```
a, *x, c = get_multi_return
a #=> 'A'
x #=> ['B']
c #=> 'C'
```

##優先度は低い
受け取り側の数が多い場合は、配列でないものが優先的に値を受け取る
（受け取り側の数が同じ、または少ない場合は、上２つのように平等に前から受け取る）

```
a, *x, b, c = get_multi_return
a #=> 'A'
x #=> []
b #=> 'B'
c #=> 'C'
```

##配列は複数指定できない

```
*m, *n = get_multi_return
 #=> SyntaxError: unexpected tSTAR
```

#まとめ
**・受け取り側の変数の数 <= 戻り値の数**

**　=> 「*」付きの変数があれば、そこにn個の値を入れるとして、戻り値が余らないように前から値を入れる**
**　　 「*」付きの変数がなければ、前から値を１つずつ入れ、余った戻り値は捨てる**

**・受け取り側の変数の数 > 戻り値の数**

**　=> 「*」付きの変数があれば[]を入れ、それ以外の変数に前から値を入れ、足りない分はnilを入れる**

・・・日本語難しい
node.jsのnpmとRubyのgem・bundlerをざっくり比較

node.jsとRubyでは、パッケージ管理の思想が大きく違いました。
node.jsでは、パッケージをプロジェクトローカルにインストールしようとするのに対し、
Rubyでは基本的にパッケージをグローバルにインストールするように出来ていて、bundlerというgemでローカルへのインストールを提供しているようです。

||node.js|Ruby|
|--:|---|---|
|パッケージのローカルへのインストール|$ npm install hoge|-（環境変数を色々いじると可能？）|
|モジュールのグローバルへのインストール|$ npm install -g hoge|$ gem install hoge|
|依存関係の定義ファイル|package.json|Gemfile|
|依存関係の解決（ローカルインストール）|$ npm install|$ bundle install --path vendor/bundle|
|依存関係の解決（グローバルインストール）|-|$ bundle install|
pt-visual-explain

MySQL の EXPLAIN を見やすくしてくれるツール

* [Percona Toolkit collection: pt-visual-explain - MySQL Performance Blog](http://www.mysqlperformanceblog.com/2014/02/03/percona-toolkit-collection-pt-visual-explain/)
* [pt-visual-explain — Percona Toolkit Documentation](http://www.percona.com/doc/percona-toolkit/2.2/pt-visual-explain.html)

## お手軽に使ってみる

#### 準備

```console
$ wget http://percona.com/get/pt-visual-explain
$ chmod +x ./pt-visual-explain
```

#### テストで使うテーブル

```console
$ # new_table
$ mysql -h ${MYSQL_HOST} -uadmin sample -e 'select * from new_table'
+----+------+-----+
| id | name | age |
+----+------+-----+
|  1 | foo  |   1 |
|  2 | bar  |   2 |
|  3 | bazz |   3 |
+----+------+-----+
$ # new_table2
$ mysql -h ${MYSQL_HOST} -uadmin sample -e 'select * from new_table2'
+------+--------+
| name | profit |
+------+--------+
| bar  |   5000 |
| bazz |   3200 |
| foo  |  10000 |
+------+--------+
```

### 普通の EXPALIN

```console
$ mysql -h ${MYSQL_HOST} -uadmin sample \
-e 'explain select new_table.name, new_table.age, new_table2.profit from new_table left join new_table2 on new_table.name = new_table2.name'
+----+-------------+------------+--------+---------------+---------+---------+-----------------------+------+-------+
| id | select_type | table      | type   | possible_keys | key     | key_len | ref                   | rows | Extra |
+----+-------------+------------+--------+---------------+---------+---------+-----------------------+------+-------+
|  1 | SIMPLE      | new_table  | ALL    | NULL          | NULL    | NULL    | NULL                  |    3 |       |
|  1 | SIMPLE      | new_table2 | eq_ref | PRIMARY       | PRIMARY | 182     | sample.new_table.name |    1 |       |
+----+-------------+------------+--------+---------------+---------+---------+-----------------------+------+-------+
```

### EXPAIN の結果を ```pt-visual-explain``` に食わせた場合

```console
$ mysql -h ${MYSQL_HOST} -uadmin sample \
-e 'explain select new_table.name, new_table.age, new_table2.profit from new_table left join new_table2 on new_table.name = new_table2.name' \
| ./pt-visual-explain 

JOIN
+- Bookmark lookup
|  +- Table
|  |  table          new_table2
|  |  possible_keys  PRIMARY
|  +- Unique index lookup
|     key            new_table2->PRIMARY
|     possible_keys  PRIMARY
|     key_len        182
|     ref            sample.new_table.name
|     rows           1
+- Table scan
   rows           3
   +- Table
      table          new_table
```
WORDPRESSで特定のディレクトリだけベーシック認証する


WORDPRESSをインストールしてる時に、.htaccessしか仕えない状況が結構ある。

以下の例だと
/wp01/がwordpressのルート
2014のアーカイブはベーシック認証したいときに

```:apache
SetEnvIfNoCase Request_URI "^/wp01/2014/" SECURED
AuthType Basic
AuthName "My Protected Area"
AuthUserFile __HTPASSWD_FILE__
Require valid-user
Satisfy    any
Order      Allow,Deny
Allow from  all
Deny from env=SECURED
```

もちろん、普通にhttpasswdが使えて、mod_rewriteでパーマリンク設定してある必要がある
`Resources.Load` が Windows 環境だと巧く動かない Yo! 問題について。

結論から言えば、 [マニュアル](http://docs.unity3d.com/Documentation/ScriptReference/Resources.Load.html) 読みましょうってコトですよ。ええ。

# 現象

* Mac 版で、とあるオブジェクトの Serialize を行って、設定ファイルとするような EditorScript を書いた。
	* Inspector で設定出来るようにした感じね。
	* それについては、別途 Qiita 書く。かも。
* そいつによって生成された *HogeFuga.asset* を *Resources/Settings/* に配置
* Windows でそのファイル開くと壊れる！
	* 壊れるっつーか、設定されてる値が初期化されてしまう。

# 原因

[マニュアル](http://docs.unity3d.com/Documentation/ScriptReference/Resources.Load.html) にもあるように

> Note:
> All asset names & paths in Unity use forward slashes, paths using backslashes will not work.

だそうな。

ま、色気づいて `Resource.Load` の引数に `System.IO.Path.Combine("Setting", "HogeFuga")` とか渡してたワケですよ。

っつーことは、Mac だと `Setting/HogeFuga` ってなってくれるけど、Windows だと `Setting\HogeFuga` ってなっちゃうワケですな。

はい、 **マルチプラットフォームな開発環境あるある** でしたとさ。ちゃんちゃん。
AppleScriptで使える技6つ


##はじめに

AppleScriptを書いた時に使った技をメモしていきます｡


##ウィンドウ

###Finderのウィンドウ情報

以下のワンラナーを実行すると､Finderというアプリの現在開いているウィンドウ情報を表示します｡

```bash:
$ osascript -e 'tell application "System Events" to get properties of first window of application process "Finder"'
```

AppleScriptは、`osascript -e`というオプションを使うことで､ワンライナーを実行できます｡

###Mplayerのウィンドウの表示位置とウィンドウサイズ情報

ウィンドウ情報は､`grep`などを駆使して個別に取得することができます。ちなみに、`tr`は文字列変換コマンドで、`grep`は文字列検索コマンドです｡

```bash:
$ osascript -e 'tell application "System Events" to get properties of first window of application process "mplayer"' | tr ":" "\n" | grep -A 1 -e position -e size
```

###ウィンドウの表示位置とサイズを指定する

開いているウィンドウの表示位置とサイズを指定します。

```bash:~/scpt/mplayer_window.scpt
tell application "System Events"
 set position of first window of application process "mplayer" to {xxx,xxx}
 set size of first window of application process "mplayer" to {xxx,xxx}
end tell
```

通常､AppleScriptは、テキスト上に記述し､`osascript`で実行するという手順を使います｡

```bash:
$ osascript ~/scpt/mplayer_window.scpt
```

###Finderのコピーウィンドウが開いているか否かを確認する

```bash:~/scpt/finder_copy_window.scpt
-- http://stackoverflow.com/questions/7921378/check-finder-activity
set thestatus to "0"
tell application "System Events"
    set theList to get the title of every window of process "Finder"
    repeat with theItem in theList
        if theItem contains "コピー" then
            set thestatus to "1"
        end if
    end repeat
end tell
thestatus
```

Finderでウィンドウタイトルが`コピー`となっているものが開いている場合は`1`を返します。開いていない場合は`0`を返します｡

なお、以下のShellScriptを実行すれば､コピーが終了した時点で､Growlに通知することが出来ます｡

```bash:~/sh/copy_growl.sh
#/bin/bash

while :
do
    var=`osascript ~/scpt/finder_copy_window.scpt`
    case "$var" in
        "1" ) echo copying > /dev/null;;
        "0" ) growlnotify -t 'Finder' -m 'copy done'
            break ;;
    esac
done

exit 0
```

##引数

AppleScriptでは、以下の書き方で引数を渡すことが出来ます｡

```
on run argv
    return item 1 of argv
end run
```

なお、引数を渡すのが面倒なら、以下のようにShellScriptを介して実行するという手もあります｡

```~/sh/scpt_appleeditor_key.sh
#!/bin/bash
echo "
tell application \"AppleScript Editor\"
 activate
  tell application \"System Events\"
   delay 0.4
   keystroke \"$1\" using {command down}
  end tell
end tell
" | osascript -
```

##キー入力

アプリにキー入力を渡すなら､以下の様な書き方をします｡速度は`delay`で指定します｡`keystroke`は`key code`で指定することも出来ます｡

```bash:~/scpt/chrome_key.scpt
tell application "Google Chrome"
  activate
  tell application "System Events"
    delay 0.5
    keystroke "mba-hack"
  end tell
end tell
```

```bash:sample
keystroke "v" using {command down, option down, shift down}

key code 126
```

`key code`を調べるには`xev`が使えます｡

```bash:
$ xev | grep -A2 --line-buffered '^KeyRelease' | sed -n '/keycode /s/^.*keycode \([0-9]*\).* (.*, \(.*\)).*$/\1 \2/p'
```


なお、AppleScript Editorで書くと､保存するときにアプリケーション形式で作成することもできます。


##ダウンロード

面白そうなスクリプトがあれば､是非教えて下さい｡

[https://github.com/Zettt/LaunchBar-Scripts](https://github.com/Zettt/LaunchBar-Scripts)
cocos2d-xを使用したネイティブアプリ開発 vol.1

# 説明

今回はネイティブアプリの開発に興味があるけれど、
実際どうやっているの？という声がよく耳に入ってきます。
そこで、実際に開発で使用しているゲームエンジン **「cocos2d-x」**について、
回数を分けて話をしていきたいと思います。

# フレームワークの説明
**「cocos2d-x」**とは、
**オープンソースかつ無料の2Dゲームエンジンです**。
プログラミング言語は **C++**、 **Lua** 、 **JavaScript** 。
この中でも、 **C++** を利用しています。

ライセンスは **MITライセンス**
マルチプラットフォーム開発。

※ちなみに、 **「cocos2d-x」** は「Cocos2d for iPhone」を基にC++で書かれたマルチプラットフォームの移植版です。

[Cocos2dのwikiperia](http://ja.wikipedia.org/wiki/Cocos2d)

# 参考資料

[cocos2d-xの公式サイト](http://www.cocos2d-x.org/)

Cocos2d‐x開発のレシピ―iOS/Android対応
著者：松浦晃洋、古木映治、齊藤建二
出版社：秀和システム

cocos2d-xによるiPhone/Androidアプリプログラミングガイド
著者：清水友晶
出版社：マイナビブックス_クリエイティブ
QtGUIでオートコンプリートボックス


completerやlineEditは別に用意しなければいけないのかと思っていたのですが、そんなことはなかったのですね。
comboBox1つ配置して、配置したcomboBoxをeditableに。
あとは下記のように、補完モードの設定でポップアップするように。
ついでに初めのitemが入力欄に入ってしまうのも消去しています。この点についてはもっとやり方があるような気もしましたが、わかりませんでした。

```cpp:mainwindow.cpp
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
	ui->comboBox->addItem("tea");
	ui->comboBox->addItem("test");
	ui->comboBox->addItem("test_case");
	ui->comboBox->completer()->setCompletionMode(QCompleter::PopupCompletion);
    ui->comboBox->lineEdit()->clear();
}
```

これで、
![2014-02-04-20:39:17.png](https://qiita-image-store.s3.amazonaws.com/0/29708/b101522b-cbed-5669-225e-269230954962.png)
こんな感じになります
Jackson を Scala らしく使う

Scala 2.10 から追加された `implicit class` 使って、Jackson を Scala らしく書く。json4s 使うほどのことはやらないのでお手軽実装。

こんな感じで書けるようになる:

```scala:サンプル
  def main(args: Array[String]) = {

    val bar = Person("Bar Smith")
    val foo = Person("Foo Smith", Set(bar))

    // JSON 文字列にシリアライズ
    val fooJson = foo.toJsonString
    println(fooJson)
    // 出力: {"name":"Foo Smith","children":[{"name":"Bar Smith","children":[]}]}

    // JSON 文字列からデシリアライズ
    val parsed = """{"name":"Hoge","children":[]}""".asJsonStringOf[Person]
    println(parsed)
    // 出力: Person(Hoge,Set())
  }

  // なにか適当な bean っぽい変哲もないクラス
  case class Person(name: String, children: Set[Person] = Set())
```

上記のように書くには、下記のようなクラスを用意して、インポートすれば良い:

```JacksonImplicits.scala
object JacksonImplicits {
  implicit class JsonString(json: String) {
    // FIXME メソッド名が変
    def asJsonStringOf[T](implicit m: Manifest[T], om: ObjectMapper): T =
      om.readValue(json, typeRef[T])
  }
  implicit class JsonSerializable(any: AnyRef)
                                 (implicit om: ObjectMapper) {
    def toJsonString: String = om.writeValueAsString(any)
  }
 
  private def typeRef[T](implicit m: Manifest[T]) =
    new TypeReference[T] {
      override def getType = typeFromClassManifest(m)
    }
 
  def typeFromClassManifest(m: Manifest[_]): Type = {
    if (m.typeArguments.isEmpty) m.runtimeClass
    else new ParameterizedType {
      def getRawType: Type = m.runtimeClass
      def getActualTypeArguments: Array[Type] =
        m.typeArguments.map(typeFromClassManifest).toArray
      def getOwnerType: Type = null
    }
  }
}
```

Scala 2.9 以前でも pimp my library パターン使えば数行編集するだけで動くはず。

* きちんと一通り書いたもの: [Scala でお手軽 Jackson データバインディング](https://gist.github.com/kui/8801069)

Scala 書き始めて半月くらいだけど、どうもまだリフレクション周りが辛くて、`typeRef` 以降に半日以上かかって頑張った。
基本＆よく使うコマンド

ドットインストールで復習したのでメモ。
http://dotinstall.com/lessons/basic_unix

#ディレクトリ関係

##ディレクトリの移動
```
cd パス
```

###MacのMacintoch HDに移動
```
cd /volumes/Macintosh¥ HD
```

##ディレクトリの中身を取得
```
ls
```

※ls -以降はオプションになる

###【オプション】ディレクトリのより詳しい情報を取得
```
ls -l
```

表示される内容は

- ファイルの種別（dはディレクトリ）
- パーミッション（所有者のrwxグループのrwxすべてのrwx。）
- ディレクトリ数（ファイルの場合はハード・リンク数）
- 所有者
- グループ
- 容量（バイト）
- 最終更新日
- ファイル名とリンク先

パーミッションの詳細は
r：読むことができる：4
w：書きこむことができる：2
x：実行することができる：1

参考：http://itpro.nikkeibp.co.jp/article/COLUMN/20070514/270885/

###【オプション】ディレクトリの隠しファイルも取得
```
ls -a
```

##パーミッションを変更
```
chmod パーミッション ()
```

パーミッションは詳細の数字を足して3桁にする。
rwxr-xr-x（所有者がrwx、グループがr-x、すべてがr-x）にしたいときは755になる。

##ディレクトリの作成・削除

###ディレクトリの作成
```
mkdir ディレクトリ名
```

###ディレクトリの削除
```
rmdir ディレクトリ名
```

#ファイル関係
##ファイルの作成
```
vi ファイル名
```

##ファイルの削除
```
rm ファイル名
```

##ファイルのコピー
```
cp 元ファイル名 コピー後のファイル名
```

##ファイルの移動・リネーム
```
mv 元ファイル名 移動先のパス（名前を変える場合はファイル名まで）
```

##ファイルの中身を見る
```
cat ファイル名
```

##ファイルの中身を一画面分見る
```
more ファイル名
```

※スペースキーを押すと、次の画面分のテキストを見ることができる。
最後までいくとプロンプトに戻る。

```
less ファイル名
```

※スペースキーを押すと、次の画面分のテキストを見ることができる。
プロンプトに戻るには「q」

##ファイルの頭10行を見る
```
head ファイル名
```

##ファイルのお尻10行を見る
```
tail ファイル名
```

###【オプション】頭やお尻の行数を変える
```
head -行数 ファイル名
```

##マウスオーバー用に画像をリネームする
＊＊＊.jpgや＊＊＊.gif、＊＊＊.pngを＊＊＊_on.jpgや＊＊＊_on.gif、＊＊＊_on.pngに変更する方法

```
for F in *.*; do mv $F ${F/./_on.};done
```

#ワイルドカード
##*：任意の文字いくつでも
拡張子がtxtのファイルを削除する場合

```
rm  *.txt
```

##?：任意の1文字
```
rm test.t?t
```

#find関係
ファイル・ディレクトリを探す

```
find パス -name "名前"
```

##ファイルだけ探す
```
find パス -name "名前" -type f
```

##ディレクトリだけ探す
```
find パス -name "名前" -type d
```

##htmlの一覧を取得
サイトマップ至急作れとか言われたときに使える。

```
find ./ -name "*.html"
```

##htmlの数を数える
ページ数は？って聞かれたときに使える。

```
find ./ -name "*.html" | wc -l
```

#grep関係
ファイルの中身を検索する（行単位）

```
grep テキスト 対象ファイル
```

##【オプション】マッチしたカウント数を出す
```
grep -c テキスト 対象ファイル
```

##【オプション】ディレクトリ以下も検索する
```
grep -r テキスト 対象ファイル
```

#コマンドラインのTIP
##入力補助
```
文字列＋Tab
```

##過去のコマンドを呼び出す
```
↑
```

戻るときは

```
↓
```

##過去のコマンドを一覧で出す
```
history
↓
!使いたいコマンドの数字
```

##1個前のコマンドを呼び出す
```
!!
```

##文字列で始まる最近使ったコマンドを呼び出す
```
!＋文字列
```

##文字列で始まる最近使ったコマンドの内容が見れる
```
!＋文字列＋:p
```

##マニュアルを調べる
```
man コマンド
```

スペースで移動し、「q」で終わる

##ディレクトリ構造を調べる
```
tree
```

※Macの場合は、MacPorts や Homebrewでtreeコマンドをインストールする必要がある。

##時間を調べる
```
date
```

##カレンダーを表示する
```
cal
```

###カレンダーの年を指定する
```
cal -y 年
```

##ファイルの行数を調べる
```
wc l ファイル名
```

#サーバ系

##MySQLがつながらないとき
```
killall -9 mysqld
```

#その他

##DNS キャッシュをリセットする方法
###OS X Mountain Lion または Lion
```
sudo killall -HUP mDNSResponder
```
###Mac10.6
```
sudo dscacheutil -flushcache
```
pythonで文字列が数字かどうかを確認する


str.isdigit()でわかる｡
小数っぽい値もFalseになる。

```
"100".isdigit()
#->True
"0.1".isdigit()
#->False
"1a".isdigit()
#->False
"ddd".isdigit()
#->False
"お".isdigit()
#->False
"!".isdigit()
#->False
"一".isdigit()
#->False
```
PHPの簡単ベンチマーク

使用メモリや実行時間、読み込みファイル等の情報をスクリプト終了時に表示します。

```php
$time = microtime(true);
register_shutdown_function(
    function() use ($time) {
        printf("Memory: %s / %s bytes\nTime: %f ms\nDeclared: %d classes\nIncluded: %d files > include_files.txt\n",
            number_format(memory_get_usage()),
            number_format(memory_get_peak_usage()),
            (microtime(true) - $time) * 1000,
            count(get_declared_classes()),
            count(get_included_files())
        );
        file_put_contents(__DIR__ . '/include_files.txt', print_r(get_included_files(), true));

    }
);
```
jqコマンドが便利な件

テストなどでちょっとAPI叩きたい時、コマンドラインJSONパーサの[jq](http://stedolan.github.io/jq/)がなかなか便利。

## インストール

```bash
brew install jq
```

Mac以外の人は[こちらから](http://stedolan.github.io/jq/download/)

## とりあえず試す

サンプルに[東電電力供給API](http://tepco-usage-api.appspot.com/)を借りました。ありがとうございます。

```bash
curl -s "http://tepco-usage-api.appspot.com/2014/2/3.json"|jq '.'
```

### 出力

```ruby
[
  {
    "usage": 2849,
    "entryfor": "2014-02-02 15:00:00",
    "usage_updated": "2014-02-02 16:05:05",
    "forecast": 0,
    "forecast_peak_updated": "2012-02-02 23:30:00",
    "hour": 0,
    "capacity": 4756,
    "capacity_updated": "2012-02-02 23:30:00",
    "forecast_peak_usage": 3920,
    "month": 2,
    "forecast_peak_period": 18,
    "capacity_peak_period": 18,
    "year": 2014,
    "saving": false,
    "day": 3
  },
  # 以下略
]
```

## 配列の取り出し

```bash
curl -s "http://tepco-usage-api.appspot.com/2014/2/3.json"|jq '.[]'
```

### 出力

```ruby
{
  "usage": 2849,
  "entryfor": "2014-02-02 15:00:00",
  "usage_updated": "2014-02-02 16:05:05",
  "forecast": 0,
  "forecast_peak_updated": "2012-02-02 23:30:00",
  "hour": 0,
  "capacity": 4756,
  "capacity_updated": "2012-02-02 23:30:00",
  "forecast_peak_usage": 3920,
  "month": 2,
  "forecast_peak_period": 18,
  "capacity_peak_period": 18,
  "year": 2014,
  "saving": false,
  "day": 3
}
{
# 以下略
```

## 値の取り出し

```bash
 curl -s "http://tepco-usage-api.appspot.com/2014/2/3.json"|jq '.[].usage'|ruby -e 'p readlines.map(&:chomp).map(&:to_i).max'                                          
```

### 出力

```bash
2917
2808
# 以下略
```

## 加工

メロスにはawkがわからぬ

```bash
 curl -s "http://tepco-usage-api.appspot.com/2014/2/3.json"|jq '.[].usage'|ruby -e 'p readlines.map(&:chomp).map(&:to_i).max'                                          
```

### 出力

```bash
3805
```

2/3は暖かかったんで少なめですね。

ワンライナーでちょっとAPI試す時なんかに便利ではないかと。
rakeタスク内で別のタスクを呼び出す

rakeタスク内で別のタスクを呼びたいなーと思い調べてみた。
``Rake::Task#invoke``と``Rake::Task#execute``の2通りの呼び出し方があるみたい。
実際に使ってみると引数の扱い方が違っていてハマったのでメモしておく。

**参考：**
http://stackoverflow.com/questions/577944/how-to-run-rake-tasks-from-within-rake-tasks

試しにこんなタスクを書いてみた

```rb
namespace :mytask do
  task :hello, [:person] do |t, args|
    puts "hello #{args.person}"
  end

  task :execute_hello_to_paty do |t, args|
    Rake::Task["mytask:hello"].execute("paty")
  end

  task :invoke_hello_to_paty do |t, args|
    Rake::Task["mytask:hello"].invoke("paty")
  end
end
```

引数の渡し方が違うため#invokeを使ってる方は期待通り動くが、#executeはエラーになる
> $ bundle exec rake mytask:execute_hello_to_paty
> rake aborted!
> undefined method `person' for "paty":String

rake task内で使ってるargsは``Rake::TaskArguments``のインタンスを想定していて、``#invoke``の場合は引数を良しなに加工してtaskを呼び出してくれる

```rake-10.1.0/lib/rake/task.rb
159     def invoke(*args)
160       task_args = TaskArguments.new(arg_names, args)
161       invoke_with_call_chain(task_args, InvocationChain::EMPTY)
162     end
```

一方、``#execute``では引数をそのままtaskに渡している

```rake-10.1.0/lib/rake/task.rb
223     def execute(args=nil)
224       args ||= EMPTY_TASK_ARGS
....
232         case act.arity
233         when 1
234           act.call(self)
235         else
236           act.call(self, args)
237         end
238       end
239     end
```

なので、今回のような書き方で別taskを呼びたい場合、こんな感じで書くといける

```rb
  task :execute_hello_to_paty do |t, args|
    Rake::Task["mytask:hello"].execute(Rake::TaskArguments.new([:person], ["paty"])
  end
```

あまり綺麗じゃないと思う・・・。
``#execute``と``#invoke``では他にも挙動の違いがあるので、どちらを使うかは状況次第な感じ

**#execute**

- 呼び出すタスクの依存タスクは実行しない

**#invoke**

- 呼び出すタスクの依存タスクも実行する
- 実行中は1度しか同じタスクを実行しない
- 再実行したい場合はRake::Task["task_name"].reenableを実行する必要がある

詳しくは参考リンク先に色々と書いてあるため割愛です。
基本情報処理技術者試験の受験

　基本情報処理技術者試験を秋に受けようと思っております。
そんな中で入門書をかじっただけの私がこれから、思い付きでLinux上でGUI動作するブラウザ（仮）を作りながらコンピュータの仕組みを理解していこうという取り組みです。

-パソコンはコミュニケーションや音楽鑑賞、動画鑑賞にしか使わない-

という方々にもわかっていただけるように書くことによって私自身の理解も深めたいなと思います。

　それとともに、私は実務で長い文章をあまり書いたことがないのでわかりにくい文章をご指摘の方や定義が間違っている、これはまずいというなど、アドバイスをくださる方がもしいれば、そういったご意見も反映させていきたいと思います。

　ここにたどり着いた方はIT系の仕事以外（趣味やビジネス）でのIT機器の活用のレベルについてもご存知かもしれませんが、試験を受けるという区切りのいい時期ですので時間があればさまざまな生活やビジネスにおけるITの活用について書き綴っていきたいと考えております。
　
初回となる今回は私の環境をご説明いたします。

PC:lenovo ideapad yoga 13' Mem8GB Corei7モデル（128GBSSD追加により2ドライブで2SSD)
OS:Windows8.1 64bit
その中に…。
    VirtualBox
       CentOS(これから入れる)
   CentOSの選択基準としてはユーザー数が多いこと。
   RHEL基準で作成されているということ。
   その基準の中にubuntuも入ってくるかもしれませんが、プログラムランチャーがなんだか苦手というのもあります。（それだけ？と怒られそうですね）
   OSイメージバックアップを取るかもしれませんが、データ消失も私の性格ではあり得るため基本的なセットアップをして使いたいものを追加すればすぐ使えそうなのでやはりCentOSとなりました。
   
   なにかビジネス的にお勧めで費用対効果の高いものがあればぜひ教えていただきたいです。
IDE:Eclipse(Pleades)
    VS2013Express(desktop)
    Netbeans
エディタ:IDEで済ませるかもしれませんがVimとEmacsも名前を見かけるので時々触ってみます。

前後しますが、基本情報処理技術者試験でなぜCを勉強するのかということに対しては、選択問題の中で実用性、惹起性が高いためです。
以上とりあえず現状で思いついたことを書いてみました。

面白い記事かわかりませんが、私のスキルレベルが向上し、それに伴いどなたかのお役に立てれば幸いです。
ここまで参照いただきありがとうございました。
ご指摘、ご意見などございましたらどうぞよろしくお願いいたします。


追記:記事作成日同日
ブラウザはネットワークが伴い、htmlのデコードや画像のデコードなど様々な要素が絡みすぎるためテキストエディタ(CUI)を作成することにしました。
テキストファイルの単なる入力と読み込み、保存、編集を実装した後に機能拡張をしていけたらいいなと思います。

登場したソフトウェアについては以下を参照のこと

VirtualBox
https://www.virtualbox.org/

CentOS
http://www.centos.org/

VS2013Express
http://www.visualstudio.com/ja-jp/visual-studio-homepage-vs.aspx

NetBeans
https://ja.netbeans.org/

Vim
http://www.kaoriya.net/software/vim/
Fessでかんたん全文検索サーバー

## 概要
- Javaインストール
- Fessインストール
- 起動、設定

#### 環境
- debian squeeze 32bit

## 手順
#### Javaインストール
- jdk 7 for Linux x8のダウンロード

```bash:jdk-7-Linux-x86 
$ wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com" "http://download.oracle.com/otn-pub/java/jdk/7u51-b13/jdk-7u51-linux-i586.tar.gz"
```
- 適当なディレクトリに解凍

```bash:解凍
$ sudo mv jdk-7u51-linux-i586.tar.gz /usr/local/src/
$ sudo tar xzvf jdk-7u51-linux-i586.tar.gz
```

- pathを通す

```bash:bash_profileとか
$ vim ~/.bash_profile

# bash_profileとかに下記みたいな感じで追加
export PATH="/usr/local/src/jdk1.7.0_51/bin/:$PATH"

$ source ~/.bash_profile
```

- 確認

```bash:version確認
$ java -version
```

#### Fessインストール
- Fessのダウンロード

```bash:Download
$ wget 'http://sourceforge.jp/frs/redir.php?m=iij&f=%2Ffess%2F59462%2Ffess-server-8.2.0.zip' -O fess-server-8.2.0.zip
```

- Fessのインストール

```bash:Install
$ unzip fess-server-8.2.0.zip
$ mv fess-server-8.2.0 /foo/bar/hoge/fess
$ cd /foo/bar/hoge/fess
$ chmod +x bin/*.sh
```

#### Fessの起動
- Fess serverの起動

```bash:startup
$ cd /foo/bar/hoge/fess
$ ./bin/startup.sh

もしくは
$ vim ~/.bash_profile
# bash_profile
export PATH="/foo/bar/hoge/fess/bin/:$PATH"

$ source ~/.bash_profile
$ startup
```

- Fess serverの停止

```bash:shutdown
$ cd /foo/bar/hoge/fess
$ ./bin/shutdowm.sh
```

- 起動port変更

```bash:port
$ vim ./fess/conf/server.xml
# server.xml
# ここのportの値を変更後、再起動
   <Connector port="8080" protocol="HTTP/1.1"
```

- 管理者・solrパスワード変更

```bash:password
// admin
$ vim ./fess/conf/tomcat-user.xml
# tomcat-user.xml
# ここのpasswordを変更後、再起動
  <user username="admin" password="admin" roles="fess"/>
# http://localhost:8080/fess/admin/

// solr
$ vim ./fess/conf/tomcat-user.xml
# tomcat-user.xml
# ここのpasswordを変更
  <user username="solradmin" password="solradmin" roles="solr"/>

#そして、以下に上記で設定したusernameとpasswordを追加後、再起動
$ vim ./fess/webapps/fess/WEB-INF/classes/solrlib.dicon
<component class="org.apache.commons.httpclient.UsernamePasswordCredentials">
    <arg>"solradmin"</arg> <!-- Username -->
    <arg>"solradmin"</arg> <!-- Password -->
</component>
```

## 参考
- [Fessのset uo](http://fess.codelibs.org/ja/setup.html)
- [jdk-7 install](http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html)
Rack::RequestでHTTPリクエストヘッダ一覧を書き出す

Sinatraとかでいつも忘れるのでメモ


Rack::Requestのenvの仕様は以下のような感じになる

 * [RackのEnvironment](http://rack.rubyforge.org/doc/SPEC.html)によるとHTTP_で始まる値がHTTPリクエストヘッダ
 * 形式としては[RFC 3875 - The Common Gateway Interface (CGI) Version 1.1](https://tools.ietf.org/html/rfc3875#section-4.1.18)に準拠している
  * HTTP ヘッダフィールド名が大文字に変換され、存在する全ての `-` が `_` に置換され、先頭に `HTTP_` が与えられる

なので、以下のような感じでダンプ出来る(人間がわかれば良ければ1行目をpするだけでも良さそう)

```rb
http_headers = request.env.select { |k, v| k.start_with?('HTTP_') }
headers = http_headers.inject({}) do |a, (k, v)|
  a[k.sub(/^HTTP_/, "").downcase.gsub(/(^|_)\w/) { |word| word.upcase }.gsub("_", "-") ] = v
  a
end
puts headers.to_a.map { |v| v.join(": ") }.join("\n")
```

## 参照URL
 * [ruby - Rack::Request - how do I get all headers? - Stack Overflow](http://stackoverflow.com/questions/6317705/rackrequest-how-do-i-get-all-headers)
やってはいけないHTTPで公開したくないディレクトリを公開ディレクトリ内に置く方法

公開したくないディレクトリの名前の頭に **#** をつける。

apacheで言うところのhtdocs以下に配置しつつも、httpで見られたくないディレクトリを置く方法が思いついたというか試したらできたというか。
そもそも公開したくないのに公開ディレクトリ内に置くなって話ではありますが。

たぶんどんなhttpdでもブラウザでも大丈夫じゃないかなって思うのだけど。URLに#がついてるとアンカーだとブラウザもhttpdも解釈するんじゃないかなーって思うんですが、どうでしょう。

***

Qiitaのアカウントを作ったもののネタがなかったので [公開したくないディレクトリをサーバーに置く方法 ※追記あり - BlueberryStream Technical](http://blueberrystream-technical.hatenablog.com/entry/2012/10/24/184830) で書いた内容をそのまま載せてみました。
application.confでの設定値を指定ファイルにて上書き Play Framework 2.2.x


## 環境
* Mac OSX Version 10.8.5
* Play Framework 2.2.1

## 手順
### conf/以下に*.confを作る。

```sh:shell
$ touch conf/local.conf
```

### *.confにてapplication.confを読み込み、上書きしたい設定を記述する。

```sh:shell
$ vi conf/local.conf
```
```vim
include "application.conf"

db.default.url="jdbc:mysql://database.localdomain/test_database" 
```

### 実行時に*.confを指定する。 

```sh:shell
# DEVモードで実行する場合
play -Dconfig.file=local.conf run
```

## 参考
上記で作ったlocal.confを.gitignoreに追記し、ローカル開発環境を閉じるようにしています。
メモ: ぐんぐん読み込む一覧の実装パターン

下書きのままずーっと残ってたので放出する。

## 普通の処理

1. 一覧項目を先頭から順に作成、空の一覧に挿入
2. 利用者が「続き」ボタン押下
3. 追加情報取得、完了まで待機…
4. 追加情報から項目を作成、一覧末尾に挿入
5. 2に戻る

## 体感読み込み速度向上

1. 一覧項目を先頭から順に作成、空の一覧に挿入
2. 次の追加情報を取得、完了まで待機…
3. 利用者が「続き」ボタン押下
4. （既に取得済みの）追加情報から項目を作成、一覧末尾に挿入
5. 2に戻る

## 画面バッファ軽量化

1. 一覧項目を先頭から順に作成、空の一覧に挿入
2. 挿入時に各項目の上部座標を取得、記憶
    * 10,000 pxとか適当な単位で、逆引きでまとめておくと良さそう
    * 取得時のコストに気を付ける
3. 利用者が画面をスクロール
4. スクロール位置と各項目の上部座標を比較
5. 閾値を超えていたら表示、非表示
    * あまり細かくやると描画系再計算のコストがかさみそう
pythonで文字列ゼロ埋め、文字列からある文字をカウントする


正規表現モジュールと合わせるとカスタム置換とかできる

ゼロ埋め

```
'1'.zfill(3)
#'001'
```

文字カウント

```
'hello world'.count('l')
#3
```
IEとWindowsのバージョン相関

via [Internet Explorer - Wikipedia](http://ja.wikipedia.org/wiki/Internet_Explorer#.E3.83.90.E3.83.BC.E3.82.B8.E3.83.A7.E3.83.B3.E5.88.A5.E3.81.AE_OS_.E5.AF.BE.E5.BF.9C)

|Win ＼ IE|6 |7 |8 |9 |10 |11 |
|---|:-:|:-:|:-:|:-:|:-:|:-:|
|XP |☆|(2)|(2)| | | |
|Vista | |☆| ✓ |(2)| | |
|7 | | |☆| ✓ |(1)|(1)|
|8 | | | | |☆| |
|8.1 | | | | | |☆|

* ☆ … デフォルトインストール
* ✓ … インストールして利用可能
* （数字） … Service Pack適用後、インストールして利用可能
* （空） … 利用不可能

（SP当てたら自動的に更新される場合もあったような？　ないっけ？）

現実的には8+の対応で良いと思う。Vista使ってる人少なそうだし。一方自力で更新出来ない人もいるので9, 10の要求を一般水準にするのは不親切と思う。
引数の数に応じてコールバック実行をcallとapplyとで使い分ける

Backbone.js v1.1.0の198行目。

```js:backbone.js
  // A difficult-to-believe, but optimized internal dispatch function for
  // triggering events. Tries to keep the usual cases speedy (most internal
  // Backbone events have 3 arguments).
  var triggerEvents = function(events, args) {
    var ev, i = -1, l = events.length, a1 = args[0], a2 = args[1], a3 = args[2];
    switch (args.length) {
      case 0: while (++i < l) (ev = events[i]).callback.call(ev.ctx); return;
      case 1: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1); return;
      case 2: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2); return;
      case 3: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2, a3); return;
      default: while (++i < l) (ev = events[i]).callback.apply(ev.ctx, args);
    }
  };
```

`apply`は`call`と比べて倍くらい実行コストが高いので、`call`を優先して実行してるんだろう。

速度比較:

* http://jsperf.com/function-versus-function-call-versus-function-apply/10
[iOS]AVAudioPlayerで効果音を連続再生するときのメモ

>参考: http://blog.77jp.net/iphone-dev-use-avaudioplayer

AVAudioPlayerを使って効果音を再生するときに、
連続で再生できなくて困った（前の再生が終わる前に
再生しようとしても再生されない）。

そんなときには、playerのcurrentTimeを０（ゼロ）にしてから
playメソッドを呼ぶといいようだ。
↓こんな感じ。

```objc:
    // self.player にはAVAudioPlayerのインスタンスが入っているとする。
    self.player.currentTime = 0;
    [self.player play];
```
Tiny Core Linux 5.2 x86_64のisoカスタマイズ

[公式サイトの手順](http://wiki.tinycorelinux.net/wiki:remastering)が現バージョンに合っていなかったので書いた。

以下を簡単にする方法
=============

* 動作環境 : MacOS, CentOS6.5

1. [GitHubのCorePure64-5.2](https://github.com/tukiyo/CorePure64-5.2)リポジトリをclone
1. sh 1_extract_rootfs64.sh
1. extractフォルダにiso_data/boot/rootfs64.gzの中身が展開されるので、好きにカスタマイズする。
1. sh 2_build_iso.sh にてisoを作成


ディレクトリ構造
=============

* 作業ディレクトリ
  * ~/iso : CorePure64-5.2.iso のマウント用 (展開が終わったら削除してよい)
  * ~/iso_data : CorePure64-5.2.iso の展開先
  * ~/extract : CorePure64-5.2.iso/boot/rootfs64.gz の展開先
* iso出力
  * ~/TC-remastered.iso

事前準備
===========

```bash:isoをダウンロード
$ wget http://distro.ibiblio.org/tinycorelinux/5.x/x86_64/release/CorePure64-5.2.iso
```

CentOSの場合
-----------

```bash:centosの場合(advancecompはepelから取得)
$ sudo yum install -y advancecomp
$ sudo yum install -y genisoimage
```

```bash:isoをiso_dataフォルダに展開
$ mkdir iso
$ sudo mount -o loop CorePure64-5.2.iso iso
$ cp -a iso iso_data
$ sudo umount iso
$ rmdir iso
```

* CorePure64-5.2.iso をマウントして iso_data/以下にコピー

再構築手順
=============

```bash:rootfs64.gzをextractフォルダに展開
$ mkdir extract
$ cd extract
$ zcat ../iso_data/boot/rootfs64.gz | sudo cpio -i -H newc -d
```

```bash:カスタマイズ
$ sudo mkdir mnt/sda1
```

```bash:rootfs64.gzの再構築
$ sudo find | sudo cpio -o -H newc | gzip -2 > ~/rootfs64.gz
$ cd
```

```bash:rootfs64.gzの圧縮率を高める
$ advdef -z4 rootfs64.gz
```

```bash:isoの作成
$ sudo mv rootfs64.gz iso_data/boot/rootfs64.gz
$ cd iso_data
$ sudo mkisofs -l -J -R -V TC-custom -no-emul-boot -boot-load-size 4 -boot-info-table \
  -b boot/isolinux/isolinux.bin -c boot/isolinux/boot.cat \
  -o ../TC-remastered.iso .
$ rm -rf newiso
```

起動時にsataのHDDを自動マウントする方法
=============

```diff:/opt/bootlocal.sh
+#!/bin/sh
+mount /dev/sda1 /mnt/sda1
```
曜日を調べるのが面倒。

「何月何日に回答します」ってメールする時に、曜日を調べるのが面倒なのだ。
emacs使ってるんだから、関数作れば良いのだ。

```el:
(defun format-specific-day (ymd)
  "insert month,day and day of the week"
  (interactive "syyyy-mm-dd: ")
  (when (string-match "^\\([0-9]+\\)-\\([0-9]+\\)-\\([0-9]+\\)$" ymd)
    (let ((yy (string-to-number (match-string 1 ymd)))
          (mm (string-to-number (match-string 2 ymd)))
          (dd (string-to-number (match-string 3 ymd))))
      (insert (format-time-string "%m月%d日(%a)"
                                  (encode-time 0 0 0 dd mm yy nil 0))))))
```
【小ネタ】【WordPress】the_date()で日付が表示されないときの解決法

the_date()はアーカイブなどで、同じ日の投稿が続くと、一番最初の投稿のみ日付を表示する仕様。
同じ日付でも、すべての投稿に日付を表示したい場合は、

```php:
the_time('Y年n月j日');
```

とすると良い。
簡単にWebサイトのチュートリアルとか、説明をできるintro.jsのangularjsラッパー angular-introの使い方

タイトル長すぎです大橋です。
簡単にWebサイトのチュートリアルとかをサイト上で実現できる[intro.js](https://github.com/usablica/intro.js)というのがあります。

これをangularjsでも使えるようにした[angular-intro](http://code.mendhak.com/angular-intro.js/)というのがあるのですが、
あまりサイトに細かい導入とかの説明がなかったので記載していきます。

# 最終的に

↓みたいな奴が出せるようになります。

![スクリーンショット 2014-02-04 14.16.43.png](https://qiita-image-store.s3.amazonaws.com/0/2965/8484448b-b94f-f9a1-4745-2fdd0292533e.png)

またデモサイトは→ http://code.mendhak.com/angular-intro.js/ です

# インストール

bower経由で使えるのでbowerで取得します。

```bash
$ bower install angular-intro.js
```

bower使っていない場合は、
デモサイトから落とせます。

bowerで取得したり、落としてきたら必要なjsとかcssを読み込みます。


```html:index.html
<head>
<!-- なんか他のheadタグ内 -->
    <link rel="stylesheet" type="text/css" href="bower_components/angular-intro.js/lib/introjs.css">
</head>
<body>
<!-- なんか他のbodyタグ内 -->

    <!-- jquery無くてもいいかも -->
    <script src="bower_components/jquery/jquery.min.js" type="text/javascript"></script>
    <script src="bower_components/angular-unstable/angular.min.js"></script>
    <script src="bower_components/angular-intro.js/lib/intro.min.js"></script>
    <script src="bower_components/angular-intro.js/build/angular-intro.min.js"></script>

```

# モジュールの読み込み

モジュールを読み込みます。

```coffeescript:module.coffee
angular.module('MyApp', ["angular-intro"])
```

# 表示内容の設定

大きく分けて2つの方法で表示できます。

* HTML属性で設定
* javascript objectで設定

またどちらの方法でも以下の`ng-intro-method`, `ng-intro-options`の設定は必要です。

```html
<div ng-intro-method="showHelp" ng-intro-options="option"></div>
```

`ng-intro-method`はintro.jsを起動する際に呼び出すメソッド名です。
メソッド自体は、angular-intro.js自体が設定するようなので
angularjsのコントローラに`ng-intro-method`で設定したメソッドが無くてもよいです。

`ng-intro-options`はintro.jsを呼び出した後、ツールチップなどの表示順や、表示内容を設定するためのオブジェクトのオブジェクト名を設定する属性です。
ここに書かれた名前のオブジェクトが`$scope`に設定されます。
こちらも特にコントローラで設定する必要はありあせんが、
上記の`javascript objectで設定`の方法で設定する場合は、このオブジェクトに値を設定していきます。

## HTML属性で設定

HTML属性で設定する場合はツールチップを表示したいタグに
`data-intro`属性と、`data-step`属性を付けます。

```html
<div data-intro="ツールチップに表示されるテキスト" data-step="何番目に表示するかの数値"></div>
```

なおこれらの設定やこれ以外に使える属性は[intro.js](https://github.com/usablica/intro.js/#attributes)のサイトを御覧ください。

## javascript objectで設定

javascript objectで設定する場合は
コントローラにて`$scope`に表示内容を詰めてあげます。
この時`$scope`に設定する変数名は`ng-intro-options`で設定した名称と同じにします。

```coffeescript
$scope.option = 
  steps:[
     {
       element: '#step1'
       intro: "First tooltip"
     }
     {
       element: '#step4'
       intro: "Second tooltip"
       position: 'right'
     }
  ]
```

# 起動

このツールチップを表示するには
`ng-intro-method`で設定したメソッド名のメソッドを呼び出します。
どうやらこのメソッドはangular-intro側で作成してくれるみたいなので、
特にコントローラにて設定する必要はないです。

適当にボタンやアイコンを作って`ng-click`で呼び出します。

```html
<button value="Show Help" ng-click="showHelp()"></button>
```

これで完了です。
Rubyでクイックソート


```ruby
require 'benchmark'

class Array
  def quicksort
    return self if self.size <= 1
    pivot = self[0]
    right = Array.new
    left = Array.new
    (1..self.size-1).each do |i|
      if self[i] <= pivot
        left.push(self[i])
      else
        right.push(self[i])
      end
    end
    left = left.quicksort
    right = right.quicksort
    return left + [pivot] + right
  end

  # もっとRubyっぽい書き方
  def quick_sort
    return self if self.length <= 1
    pivot = pop
    left, right = partition { |e| e < pivot }
    push pivot
    left.quick_sort + [pivot] + right.quick_sort
  end
end

sample = (0..10000).sort_by { rand }

puts Benchmark::CAPTION
puts Benchmark.measure { sample.quicksort }
puts Benchmark.measure { sample.quick_sort }
puts Benchmark.measure { sample.sort }
```

```
      user     system      total        real
  0.060000   0.000000   0.060000 (  0.058320)
  0.040000   0.000000   0.040000 (  0.045914)
  0.000000   0.000000   0.000000 (  0.001648)
```

Arrayに組み込んでみました。
quicksortが今回作成したものですが、
Enumerable#partitionを使うとよりRubyっぽくかけます。
(quick_sort)
> [Rubyでソート・アルゴリズムを表現しよう!](http://melborne.github.io/2010/10/12/Ruby/)

Array#sortの実装はこちら（C言語）
https://github.com/ruby/ruby/blob/trunk/array.c
(rb_ary_sort_bangメソッドで実装されているっぽい)

C言語難しくてよくわからないです(´・ω・`)
「Applicativeでは条件分岐できない」の意味

定義に立ち戻って確認すればわかるんだけど、直感的には理解できていなかったのでメモしておく。

こういうdo記法を考える（計算結果は`m d`型の値になる）：

```hs:
do
 x <- A -- A::(m a)
 y <- B -- B::(m b)
 z <- C -- C::(m c)
 return (f x y z) -- f::(a->b->c->d)
```

もし`C`が`x`や`y`の値を利用しているとすると（つまり前の計算による束縛を利用しているとすると）、余計な引数のない一番単純な場合で`C`は`a -> b -> m c`型の函数`g`によって`B = g x y`と書けることになる。

さて、ここで`join`が使えない非MonadなApplicativeでこのdo記法と同じ計算を実現しようとするとどうなるか。まず、`g`とApplicativeの道具を使ってできるのは`return g <*> A <*> B`まででしかない。だが`return g`は`m (a -> b -> m c)`型なので、`return g <*> A`の型は`m (b -> m c)`で、もう一度`<*>`を使って`m`の中に適用してやっても、その結果として出来上がる値の型は`m (m c)`になってしまう。これでは函数`f`で `m d`型の値を返してくることはできない。どうがんばって`return`や`<*>`を多重に使ったりしても、欲しいのは`m d`型の値なのに得られるのはせいぜい`m (m d)`型の値になってしまう。

もちろん、`join`が使えればこれらの`m`の入れ子は殆どただちに外せるが、非MonadなApplicativeにはまさにそれが使えないわけだ。逆に言えば、`join`を使わずに済ませるには`C`が`x`や`y`を利用していなければいいので（もちろん`B`が`x`を利用していてもいけない）、その場合には上のdo記法の計算は：

```hs:
 (\x y z -> f x y z) <$> A <*> B <*> C
```

というApplicativeスタイルの計算に等価になる。

つまり、 ***連鎖の途中で前の計算結果を参照するようなdo記法の計算はApplicativeでは実現できず、連鎖の途中で前の計算結果を参照しないようなdo記法の計算はApplicativeに解糖できる*** 。これがつまり、「前の計算の結果に応じて後の計算の挙動を変えるという『条件分岐』が非MonadなApplicativeにはできずMonadにはできる」ということの中身。

Applicativeにできるのはdo記法の中でお互いに交わらない計算を複数進めていって最後の最後にそれらをまとめ上げること、というわけだが、既視感があるのも当たり前で、これって要するに`(->)` Applicativeがやってたことだよな。というか`(->)`Applicativeは、交わらない複数の計算を最後にまとめ上げるというApplicative本来の作用に対して、これらの複数の計算に同じ引数を投入するという制約を課す特殊化をしたものにほかならない。

ただ、`m`が一方的に入れ子になったりモナド則が保証しているような素性の良いものではない振る舞いをしてもいいなら途中の計算結果を使って挙動を変えること自体はできるはずだが、そうするとフラットに「逐次」「反復」「分岐」を組み合わせられなくなるから結局意味なしという辺りなんだろう、きっと（情並感）。
impalaのメモリ管理


#現象

物理メモリ１台16GBの環境でメモリの割り当てをデフォルトの無制限（-1)にしていたが、すぐに食い潰してswapに落ちてしまうためパフォーマンスが劣化しているように見える。

#impalaに割り当てるリソース管理箇所


|プロパティ|設定名|デフォルト|説明|
|:-----------|:-----------|:-----------|:-----------|
|impala deamon memory limit|mem_limit|null||
|CPU共有|cpu.shares|1024||
|Cgroup I/O weight|blkio.weight|500||
|Cgroup Memory Soft limit|memory.soft_limit_in_bytes|-1MB||
|メモリのハード制限|memory.limit_in_bytes|-1MB||

#Cgroupとは？

cgroup(control group)


[Control Group、Linux Containerの紹介](http://ameblo.jp/principia-ca/day-20110713.html)

[Control Groups (cgroups)](http://d.hatena.ne.jp/enakai00/20110605/1307240161)

[cgroupsとしばらく一緒に過ごしてみた](http://d.hatena.ne.jp/peo3/20110131)

[Performance Prediction and Optimization using Linux/cgroups](https://events.linuxfoundation.org/slides/2011/linuxcon-japan/lcj2011_maya.pdf)

[Redhat カスタマーポータル：3.7. memory](https://access.redhat.com/site/documentation/ja-JP/Red_Hat_Enterprise_Linux/6/html/Resource_Management_Guide/sec-memory.html)

> memory.limit_in_bytes
>>ユーザーメモリーの最大値 (ファイルキャッシュを含む) を設定します。単位が指定されていない場合、その値はバイト単位と解釈されますが、より大きな単位を示すサフィックスを使用することが可能です (キロバイトには k または K、メガバイトには m または M、ギガバイトには g または G)。
root cgroup を制限するのには、memory.limit_in_bytes は使用できません。値を適用できるのは、下位階層のグループに対してのみです。
memory.limit_in_bytes に -1 と書き込み、現行の制限値を削除します。



#設定

ソフトリミットを設定することで、設定値内でなるべくうまく物理メモリを使ってくれて、それでもうまくいかない時はハードリミットで制限される。ハードリミットを超えてメモリ領域が必要な場合はswapに落ちるか、oom_killer等で沈静化されると解釈

そのため、ソフトリミットのmemory.soft_limit_in_bytesとハードリミットのmemory.limit_in_bytesを設定してみた。

|プロパティ|値|
|:----------|:--------|
|物理メモリ|24GB|
|memory.soft_limit_in_bytes|18GB|
|memory.limit_in_bytes|19GB|

※上記は実験値で特に推奨値なわけではありません

#結果
memory.soft_limit_in_bytesを設定することで(少し見難いが)activeのメモリ使用量部分が18GB付近を上限に調整するようになってくれた。

![sbit20_1.png](https://qiita-image-store.s3.amazonaws.com/0/8726/958ca78b-af92-5cbd-699f-da8296b70bc1.png "sbit20_1.png")

#まとめ

impalaの推奨メモリが128GBとのことだが、なかなか用意するのも大変なので、安定運用や一時凌ぎには設定をしておいたほうが良い気がします。
passengerエラーメモ


GitLabをpassengerで動かしていて遭遇したエラーのメモ

```
[ 2014-02-04 10:50:00.6774 715/7f3fc87a6700 Pool2/Implementation.cpp:882 ]: Could not spawn process for group /home/git/gitlab#default: An error occurred while starting up the preloader: it did not write a startup response in time.
     in 'void Passenger::ApplicationPool2::SmartSpawner::throwPreloaderSpawnException(const std::string&, Passenger::SpawnException::ErrorKind, Passenger::ApplicationPool2::Spawner::BackgroundIOCapturerPtr&, const Passenger::ApplicationPool2::Spawner::DebugDirPtr&)' (SmartSpawner.h:146)
     in 'std::string Passenger::ApplicationPool2::SmartSpawner::negotiatePreloaderStartup(Passenger::ApplicationPool2::SmartSpawner::StartupDetails&)' (SmartSpawner.h:566)
     in 'void Passenger::ApplicationPool2::SmartSpawner::startPreloader()' (SmartSpawner.h:206)
     in 'virtual Passenger::ApplicationPool2::ProcessPtr Passenger::ApplicationPool2::SmartSpawner::spawn(const Passenger::ApplicationPool2::Options&)' (SmartSpawner.h:752)
     in 'void Passenger::ApplicationPool2::Group::spawnThreadRealMain(const Passenger::ApplicationPool2::SpawnerPtr&, const Passenger::ApplicationPool2::Options&, unsigned int)' (Implementation.cpp:803)

[ 2014-02-04 10:50:00.6777 715/7f3fc6328700 agents/HelperAgent/RequestHandler.h:2065 ]: [Client 21] Cannot checkout session.
Error page:
An error occurred while starting up the preloader: it did not write a startup response in time. Please read <a href="https://github.com/phusion/passenger/wiki/Debugging-application-startup-problems">this article</a> for more information about this problem.<br>
<h2>Raw process output:</h2>
```

⇒[Debugging application startup problems](https://github.com/phusion/passenger/wiki/Debugging-application-startup-problems)に記載されてました。
起動には時間が足りなかったようです。。。

ということで、`passenger.conf`に下記を追加

```/etc/httpd/conf.d/passenger.conf
PassengerStartTimeout 120
```

デフォルト設定は90ということなので、120にしたら無事起動しました。

GitLabをインストールし無事起動できたので後日あらためて
「Serversman@VPS EntryでGitLab+Redmine」記事を書く予定です。（さぼらないように宣言
大きく変わったGHUnitのインストール方法（共訳者募集）

原文：[gh-unit/README.md at master · gh-unit/gh-unit](https://github.com/gh-unit/gh-unit/blob/master/README.md)

# GHUnit

GHUnitはMac OSXとiOSのためのテスト・フレームワークの一つです。
単体でも、SenTestingKitやGTMのような他のテスト・フレームワークと一緒でも、使うことができます。

## 特徴

- テストを走らせたりブレークポイントを置いたりすることができ、XCodeデバッガと直接やりとりをすることができる。
- コマンドラインやMakefileから走らせることができる
- 並行してテストを走らせることができる
- UI部品のテストが可能である
- テスト部品の寸法をキャプチャして表示することができる
- テストをキーワードで検索して絞り込むことができる
- View logging by test case.
- Show stack traces and useful debugging information.
- Include as a framework in your projects
- Determine whether views have changed (UI verification)
- Quickly approve and record view changes
- View image diff to see where views have changed

## Install (iOS)

### Install the GHUnit gem

```xml
$ gem install ghunit
```

### Install the Tests target

This will edit your ProjectName.xcodeproj file and create a Tests target, scheme, and a sample test file.

```xml
$ ghunit install -n ProjectName
```

### Add the Tests target to your Podfile

Create a new file named `Podfile` in the directory that contains the your `.xcodeproj` file, or edit it if it already exists.

```ruby
# Podfile
platform :ios, '6.0'

target :Tests do
	pod 'GHUnit', '~> 0.5.9'
end
```

Install your project's pods. CocoaPods will then download and configure the required libraries for your project:
```xml
$ pod install
```

You should use the `.xcworkspace` file to work on your project:
```xml
$ open ProjectName.xcworkspace
```

### Install Command Line

```xml
$ ghunit install_cli -n ProjectName
```

Install ios-sim using homebrew:

```xml
$ brew install ios-sim
```

Now you can run tests from the command line:

```xml
$ ghunit run -n ProjectName
```

### Add a test

To generate a test in your test target with name SampleTest:

```xml
$ ghunit add -n ProjectName -f SampleTest
```


## Install (From Source)

### iOS
```bash
cd Project-iOS && make
```

Add the `GHUnitIOS.framework` to your project

### OS X
```bash
cd Project-MacOSX && make
```
Add the `GHUnit.framework` to your project

## Documentation

- [How to install, create and run tests](http://gh-unit.github.io/gh-unit/docs/index.html)
- [Online documentation](http://gh-unit.github.io/gh-unit/)
- [Google Group (Deprecated - Use Github Issues instead)](http://groups.google.com/group/ghunit)

## iOS

![GHUnit-IPhone-0.5.8](https://raw.github.com/gh-unit/gh-unit/master/Documentation/images/ios.png)

## Mac OS X

![GHUnit-0.5.8](https://raw.github.com/gh-unit/gh-unit/master/Documentation/images/macosx01.png)

-----
ブログやってます：[weed software 開発者ブログ](http://weed.cocolog-nifty.com/wzero3es/)
x86/SIMD Intrinsicとヘッダファイル対応表

x86(x86_64)アーキテクチャSIMD拡張命令セットと、組み込み関数(intrinsic)ヘッダファイルの対応表。関数検索は [Intel Intrinsics Guide](http://software.intel.com/sites/landingpage/IntrinsicsGuide/) がオススメ。

|includeヘッダ   |SIMD命令セット |
|:--------------|:-------------|
|`<mmintrin.h>` |MMX           |
|`<xmmintrin.h>`|SSE           |
|`<emmintrin.h>`|SSE2          |
|`<pmmintrin.h>`|SSE3          |
|`<tmmintrin.h>`|SSSE3         |
|`<smmintrin.h>`|SSE4.1        |
|`<nmmintrin.h>`|SSE4.2        |
|`<wmmintrin.h>`|AES           |
|`<immintrin.h>`|AVX, AVX2, FMA|
|`<zmmintrin.h>`|AVX-512       |

または、全intrinsicを含む`<x86intrin.h>`ヘッダを利用する。（VisualC++では提供されない）
PHPでgzcompressされたデータをC#で展開する

##Problem
PHPのgzcompressはgzipではなくzlibなので，.NET FrameworkのGZipStreamさんが対応に困ります。曰くマジックナンバーがないとのこと。
##Solution
なければ足せばいいではないかということです。

```cs:decompress.cs
byte[] gzdata = Convert.FromBase64String(request.Data);
using (var ms = new MemoryStream())
{
	if ((gzdata[0] != 0x1f) && (gzdata[1] != 0x8b))
	{
		ms.Write(new byte[] {0x1f, 0x8b, 0x08, 0x00,
								0x00, 0x00, 0x00, 0x00}, 0, 8);
	}
	ms.Write(gzdata, 0, gzdata.Length);
	ms.Position = 0;
	using (var gz = new GZipStream(ms, CompressionMode.Decompress))
	using (var reader = new StreamReader(gz))
	{
		return reader.ReadToEnd();
	}
}
```

追記：この方法はMono環境では正常に動作しません。Zlib.netなど別の方法を取る必要があります。

##See also...
下記を参考にしました。関連情報からいろいろ情報が。
http://stackoverflow.com/questions/4080344/decompress-string-in-c-sharp-which-were-compressed-by-phps-gzcompress
子のng-repeatで親のng-repeatのindexを参照したい

まんまなのですが日本語でメモ

```$parent.$index``` って方法もあるみたいですが、複雑になってくると階層とか一々数えてられないので、明示的に以下のように設定する方法が一番良いと思いました。


```html
<div ng-repeat="(fIndex, f) in foos">
  <div>
    <div ng-repeat="b in foos.bars">
      <a ng-click="addSomething(fIndex)">Add Something</a>
    </div>
  </div>
</div>
```

参考
http://stackoverflow.com/questions/14807258/access-index-of-the-parent-ng-repeat-from-child-ng-repeat#answer-18914958
Node.jsとiPhoneでiBeaconの送受信テスト


iBeaconの送受信をMac（Node.js）とiPhoneでやってみた。

## Node.js -> iPhone

まずはNode.jsでiBeaconを送信するスクリプトを書く。bleaconというモジュールを使えばすぐできるらしい。

```
$ npm install bleacon
```

スクリプトはこんな感じ。

```javascript:sender.js
var Bleacon = require('bleacon');

var uuid = 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA';
var major = 0;
var minor = 0;
var measuredPower = -59;

Bleacon.startAdvertising(uuid, major, minor, measuredPower);
```

```
$ node sender.js
```

これでiBeaconが送信される状態になる。

iPhone側ではこれを受信したいので、受信テストアプリみたいのを入れる。これを使った。

[BLUETUS for iBeacon](https://itunes.apple.com/hk/app/bluetus-for-ibeacon/id734155067?mt=8)

これでアプリを立ち上げるとNode.jsで送信されてるiBeaconを受信できる。こんな感じ。

![bluetus.png](https://qiita-image-store.s3.amazonaws.com/0/12262/0f6048f1-c342-a893-1fb7-c425566f5106.png "bluetus.png")

## iPhone -> Node.js

次にiPhoneで送信したiBeaconをNode.jsで受信する。Node.js側で受信するスクリプトはこんな感じ。

```javascript:reciever.js
var Bleacon = require('bleacon');
Bleacon.startScanning();

Bleacon.on('discover', function(bleacon) {
   console.dir(bleacon);
});
```

これを実行する。

```
$ node reciever.js
```

送信側のiPhone側のアプリはこれを使った。（無駄におしゃれで有料）

[iBeacon Emitter](https://itunes.apple.com/us/app/ibeacon-emitter/id805598859?mt=8)

このアプリでiBeacon送信するとコンソールにこんな感じで表示される。

```
{ uuid: 'f86b62516a014c80ba1b717c774b160a',
  major: 1,
  minor: 1,
  measuredPower: -60,
  rssi: -40,
  accuracy: 0.2886751345948129,
  proximity: 'immediate' }
{ uuid: 'f86b62516a014c80ba1b717c774b160a',
  major: 1,
  minor: 1,
  measuredPower: -60,
  rssi: -38,
  accuracy: 0.254947239951116,
  proximity: 'immediate' }
{ uuid: 'f86b62516a014c80ba1b717c774b160a',
  major: 1,
  minor: 1,
  measuredPower: -60,
  rssi: -39,
  accuracy: 0.2712875389830217,
  proximity: 'immediate' }
...
```

ただしMac OSX 10.9 じゃないと動かないっぽい。

以上。

### 参考

* [Node.js - たった6行!最も簡単にiBeaconの電波を「発信」する方法 - Qiita [キータ]](http://qiita.com/Morikuma_Works/items/a0dd3cfcd1eef8dbd492)
* [たった5行!最も簡単にiBeaconの電波を「受信」する方法 - Qiita [キータ]](http://qiita.com/Morikuma_Works/items/c2899e548da1c5e2c28e)
tmuxでクリップボードにコピーする


tmuxバージョン1.8から`copy-pipe`っていうコマンドが追加され、クリップボードに簡単にコピーできるようになったらしい。

###セットアップ

tmuxとOS Xのクリップボードの橋渡しに必要。

```
$ brew install reattach-to-user-namespace
```

.tmux.confに以下を追記。

```.tmux.conf
# Use vim keybindings in copy mode
setw -g mode-keys vi

# Setup 'v' to begin selection as in Vim
bind-key -t vi-copy v begin-selection
bind-key -t vi-copy y copy-pipe "reattach-to-user-namespace pbcopy"

# Update default binding of `Enter` to also use copy-pipe
unbind -t vi-copy Enter
bind-key -t vi-copy Enter copy-pipe "reattach-to-user-namespace pbcopy"
```

###使い方
1. `<prefix [>`でコピーモード開始
2. `v`で選択
3. `y`でクリップボードにコピー
4. `q`でコピーモード終了

##参照
・[GIANT ROBOTS SMASHING INTO OTHER GIANT ROBOTS - tmux Copy & Paste on OS X: A Better Future](http://robots.thoughtbot.com/tmux-copy-paste-on-os-x-a-better-future 'tmux Copy & Paste on OS X: A Better Future')
[FIXED!] Qiita の絵文字がリスト配下にあるとバグる

2 indent 以下だとだめみたい

:+1: 

* :+1: 
    * :+1: 
    * :-1: 
        * :+1: 
        * :-1: 

## ソース

```
:+1: 

* :+1: 
    * :+1: 
    * :-1: 
        * :+1: 
        * :-1: 
```
RDSで`Mysql2::Error: Incorrect key file for table '/rdsdbdata/tmp/...'; try to repair it`というエラーに対応する

# 背景
一部のSQL実行時に`Mysql2::Error: Incorrect key file for table '/rdsdbdata/tmp/#sql_69c6_2.MYI'; try to repair it`というエラーが発生するようになった．全てのSQLにおいて起きるわけではない．
<!-- 何をしようとしてこの問題に遭遇したかを簡単に説明してください -->

# 問題
`check table xxx`しても問題なかったため，テーブルが壊れているわけではない．
原因はストレージ容量(tmpdirの容量)が不足していることだった．(tmpdirはSQL実行時の一時バッファ?)

# 解法
RDSのAllocated Storageを増やす．これはRDSを稼動させたまま変更することもできる．
RDSでないならば，tmpdirの余計なファイルを削除すればよさそう．

# 参考リンク
[Modifying a DB Instance Running the MySQL Database Engine - Amazon Relational Database Service](http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ModifyInstance.MySQL.html)