OmniAICreator/Qiita-1.07M huggingface dataset:
高さそろえるJS・jQueryプラグインまとめ

とりあえず有名そうなものだけ。

#heightLine.js
##機能
特定のクラスがある要素で高さをそろえる
親要素に特定のクラスを指定すれば子要素の高さをそろえる
グループ分けができる
##メリット
ブラウザの機能で文字サイズ拡大しても、追従してくれる
##デメリット
簡単に行でそろえるのができない
##配布
http://blog.webcreativepark.net/2007/07/26-010338.html
##補足
最近レスポンシブ対応したjQueryプラグイン「jquery.heightLine.js」が出た
http://blog.webcreativepark.net/2013/10/21-112000.html

#jQueryAutoHeight.js
##機能
セレクタの指定で高さをそろえる
1行のカラム数を指定できる
##メリット・デメリット
使ったことない
だれかメリット・デメリット教えてください
##配布
http://www.tinybeans.net/blog/download/jquery-plugin/jquery-auto-height.html

#jquery.tile.js
##機能
セレクタの指定で高さをそろえる
1行のカラム数を指定できる
##メリット
行を指定できる
##デメリット
ブラウザの機能で文字サイズ拡大に追従しない
行の数が変わったら対応できない（レスポンシブとかできない）
途中で行の数に足りないところがあれば、高さずれちゃう（下のような感じのとき）

```js
$(funciton(){
	$('ul li').tile(3);
});
h2
ul>li*2
h2
ul>li*3 //ここが高さずれちゃう
```

###途中で行の数に足りないところがあれば、高さずれちゃうの解決法
こうすれば大丈夫だった。

```js
$(funciton(){
	$('ul').each(function(i){
		$(this).find('li').tile(3);
	});
});
```

##配布
http://file.urin.take-uma.net/jquery.tile.js-Demo.html

#Right Height

##機能
- 高さを揃えるエリアを指定できる
- レスポンシブ対応

##配布
[cferdinandi/right-height](https://github.com/cferdinandi/right-height/)

##配布
http://file.urin.take-uma.net/jquery.tile.js-Demo.html

#jquery.matchHeight.js

これが一番いいかも。

##機能
- 勝手に行ごとに高さを揃えてくれる
- レスポンシブ対応

##デモ
[jquery.matchHeight Browser Tests](http://brm.io/jquery-match-height-demo/)

##配布
[liabru/jquery-match-height](https://github.com/liabru/jquery-match-height)

#まとめ
文字サイズ拡大で追従する機能を持ちつつ、
セレクタの指定で高さをそろえられて、
1行のカラム数指定しなくても行ごとに高さそろえられるJSがほしいと思いました
Sass/Compass:Sprite自動生成のRetina対応


CompassのSprite自動生成は便利だがRetina対応はmixinを自作する必要がある。
ググるとRetina対応の記事が複数でてくるのだけど、background-sizeが決め打ちの記事ばかり。
spriteフォルダ内の個別画像によって生成されるSprite画像のサイズが変わるのだから、background-sizeも動的に設定したい。

ということで、
動的にbackground-sizeに対応＋ちょっとしたパターン分けをいれたmixinを作った。

##コード

```:scss
$sprite: sprite-map("sprite/*.png");
%base-sprite {
	background: sprite-url($sprite);
	@include background-size(ceil(image-width(sprite-path($sprite)) / 2), auto);
  	background-repeat: no-repeat;
  	overflow: hidden;
}
@mixin sprite-background($name, $width: "false", $height: "false", $size: "true") {
	@extend %base-sprite;
	
	@if $size == "true" {
		@if $width == "false" {
			width: image-width(sprite-file($sprite, $name)) / 2;
		} @else {
			width: $width;
		}

		@if $height == "false" {
			height: image-height(sprite-file($sprite, $name)) / 2;
		} @else {
			height: $height;
		}
	}

	$ypos: round(nth(sprite-position($sprite, $name), 2) / 2);
	background-position: 0 $ypos;
}
```

##使用例

````
//▼SCSS

//1.画像サイズを出力する
. hoge {
	@include sprite-background("hoge");
}

//2.画像サイズを指定する
. fuga {
	@include sprite-background("fuga", 60px, 30px);
}

//3.画像サイズを省略する
. piyo {
	@include sprite-background("piyo", $size: "false");
}


//▼CSS
.hoge,.fuga, piyo {
  background: url('sprite-s7c7fcd639e.png');
  -webkit-background-size: 130px, auto;
  background-size: 130px, auto;
  background-repeat: no-repeat;
  overflow: hidden;
}

//1.画像サイズを出力する
.hoge {
  width: 29px;
  height: 17px;
  background-position: 0 -10px;
}

//2.画像サイズを指定する
.fuga{
  width: 60px;
  height: 30px;
  background-position: 0 -50px;
}

//3.画像サイズを省略する
. piyo {
  background-position: 0 -100px;
}

```
緯度(latitude)と経度(longitude)の覚え方。

latitudeとlongitudeは基本「long=長い」で覚える。

### 緯度と経度はどっちがlatitudeでlongitude？
緯度(いど)＜経度(けーど) →longitude！

てことは緯度がlatitude！

### 緯度と経度はどっちが縦(南北方向)で横(赤道方向)？
縦は±90度＜横は±180度 →横が長い→longitude！

てことは縦がlatitude！
iScroll v4 利用時に、テキストボックスが選択不可能になってしまう

https://github.com/cubiq/iscroll/issues/83
issueとして出ていた。下記のようにイベントを調整してやると良いようだ。

```js
myScroll = new iScroll('wrapper'), {
  onBeforeScrollStart: function (e) {
    var target = e.target;
    while (target.nodeType != 1) target = target.parentNode;
    if (target.tagName != 'SELECT' && target.tagName != 'INPUT' && target.tagName != 'TEXTAREA')
        e.preventDefault();
  }
});
```
小ネタ: 2段階認証をLinuxホスト内のauthenticationに使う

続きです。毎度のごとく間違っていたら指摘お願いします。

追記: タイトルが釣り気味だったので直しました

この記事は真似て失敗するとログイン全体がお亡くなりになることがあります。ごちゅーいください。

＃ なお、今回は Debian 7.2 です。わぁ

* http://qiita.com/amedama/items/c0ae17a5bc33657e492d
* http://spod.cx/blog/two-factor-ssh-auth-with-pam_oath-google-authenticator.shtml

前回と途中まで同じです。 /etc/users.oath を用意してパーミッションを正しく設定し、Google AuthenticatorもしくはOATHのトークン発行するものに登録します。なんならもういっかい ssh で有効にしてみてもいいと思います。

で、前回は /etc/pam.d/sshd に編集を加えましたが、今回は /usr/share/pam-configs/oath-test を追加します。

/usr/share/pam-configs/ 配下にファイルを追加しておくと、pam-auth-update コマンドが /usr/share/pam-configs/ 配下の設定を一つのモジュールのように認識してくれます。

![pam_configuration.png](https://qiita-image-store.s3.amazonaws.com/0/14365/2c4d8c3a-82c1-e91c-de6a-e42c7bd82db5.png)

つまり上記の画像に一つ自分のモジュールが追加されます。一つ一つのモジュールをオンオフを指定して、PAMを使う全てのプロセスに影響を及ぼすようです。こわい

有効になっているモジュールは /etc/pam.d/common-(pam設定の4種類のどれか) の一部として、「コンパイル」されます。単なる平文のpam.conf/pam.dの設定ファイルになるだけです。 (man pam.conf, man pam.d は優秀です)

今回、迂回策としてrootについてはOTPは許します。/etc/security/access-oath.conf を作って以下を記述しました

```
+ : root : LOCAL
- : ALL : ALL
```

「本当に安全か」を考える場合にはこの辺りは色々考える余地はあります (一応 ssh で root login は出来ないようにしてあります)。

/usr/share/pam-configs/oath-test を作成して以下のように記述しました

```
Name: OATH authentication
Default: yes
Priority: 16
Auth-Type: Additional
Auth:
        [success=end default=ignore]  pam_access.so accessfile=/etc/security/access-oath.conf 
        [success=end default=ignore]  pam_oath.so usersfile=/etc/users.oath
```

で、上の設定を使うようにお願いするために pam-auth-update を root 権限で実行

```
# pam-auth-update
```

有効になっているかを確認するため、/etc/pam.d/common-auth を見て、pam.d が正しく動作するかは目視しときます。下記のにゃーんの部分はもちろん手で直してます。

```
auth    [success=(にゃーん) default=ignore]      pam_unix.so nullok_secure
..
auth    requisite                       pam_deny.so
# prime the stack with a positive return value if there isn't one already;
# this avoids us returning an error just because nothing sets a success code
# since the modules above will each just jump around
auth    required                        pam_permit.so
# and here are more per-package modules (the "Additional" block)
auth    [success=2 default=ignore]  pam_access.so accessfile=/etc/security/access-oath.conf
auth    [success=1 default=ignore]  pam_oath.so usersfile=/etc/users.oath
auth    optional                        pam_cap.so
```

大丈夫くさいね。

# 手でテスト

これでもう有効になっているはず。というわけで手動でログイン実験してみます。

* 外部から秘密鍵持ってるホストはOTP聞かれない (パスワードも聞かれない)
* 外部から秘密鍵持ってないホストはパスワードとOTP聞かれる
* su (自分のユーザ名) でパスワードとOTP聞かれる
* ローカルで sudo login して自分のユーザ名でログインしたらパスワードとOTP聞かれる
* root ログインでは聞かれない

さいごに

* リブートしてGNOMEのログインからOTPを要求されることを試す

![gnome_login_with_otp.jpg](https://qiita-image-store.s3.amazonaws.com/0/14365/a32eef3b-79a8-f842-dec8-511d154fb69d.jpeg)


# 参考

* http://spod.cx/blog/two-factor-ssh-auth-with-pam_oath-google-authenticator.shtml
* https://wiki.ubuntu.com/PAMConfigFrameworkSpec
* https://mowa-net.jp/wiki/PAM
cocos2d-x入門 -2-

#シーンを新規作成する
プロジェクトを作成すると最初は"Hello World"と表示されるシーンが作成されますが、自分で作成するシーンに差し替えましょう。

まずは、C++クラスを追加します。

![C++クラス追加](https://lh6.googleusercontent.com/-xnvO2KWHYbk/UmnP_xwZqcI/AAAAAAAAAgM/Se5cp7yI2p8/w721-h481-no/cocos2d-x_002.jpg "C++クラス追加")

クラス名はGameSceneにしました。
Classesフォルダにフィアルを追加していきましょう。

![GameScene作成](https://lh5.googleusercontent.com/-wnhsaPXc5tA/UmnQOIcMRdI/AAAAAAAAAg0/ZmNNjjLD6QE/w418-h326-no/cocos2d-x_003.jpg "GameScene作成")

GameScene.hはこのように実装します。

```c++:GameScene.h
#ifndef __GAME_SCENE_H__
#define __GAME_SCENE_H__

#include "cocos2d.h"

class GameScene : public cocos2d::Layer
{
public:
    static cocos2d::Scene *createScene();
    virtual bool init();
    CREATE_FUNC(GameScene);
};

#endif // __GAME_SCENE_H__
```

つづいて、GameScene.cppはこのように実装します。

```c++:GameScene.cpp
#include "GameScene.h"

using namespace cocos2d;
using namespace std;

Scene *GameScene::createScene()
{
    Scene *scene = Scene::create();
    GameScene *layer = GameScene::create();
    scene->addChild(layer);
    return scene;
}

bool GameScene::init()
{
    if (! CCLayer::init()) {
        return false;
    }
    return true;
}
```

最後に、AppDelegate.cppでHelloWorldSceneを使用しているところをGameSceneに置き換えましょう。

```c++:AppDelegate.cpp
#include "AppDelegate.h"
#include "GameScene.h"

(略)

    // create a scene. it's an autorelease object
    auto scene = GameScene::createScene();

(略)

```

実行すると、真っ黒い画面になります。

![実行結果](https://lh4.googleusercontent.com/-b_x3pyd4PcA/UmnYYnQ0fJI/AAAAAAAAAhc/6Ta7F3GTQW4/w594-h456-no/cocos2d-x_004.jpg "実行結果")

HelloWorldScene.hとHelloWorldScene.cppは不要になるので削除してしまってかまいません。

今回はここまで。
homebrewでwiresharkのQt版をインストール


![Capturing_from_Wi-Fi__en0.png](https://qiita-image-store.s3.amazonaws.com/0/32/ee4de8aa-c06b-7671-9bdc-58182ff9da7b.png "Capturing_from_Wi-Fi__en0.png")


↓の記事の通りv1.11.0からQtに対応した。
http://it.slashdot.jp/story/13/10/24/0356225/


## インストール
homebrewでQt版のwiresharkのインストール方法は

```
brew install wireshark --with-qt
```

## 起動
```
sudo /usr/local/Cellar/wireshark/1.10.2/bin/wireshark
```
初心者から一歩抜け出すためのGitの業 〜 git reflog

「かぁーっ、reset --hardしすぎたわー、かぁーっ」
っていう経験、誰でもあるだろう。俺もある。顔面蒼白である。きっとOMGとはこの時のために存在する言葉だったんだろう。
しかし我らがGit大先生にとってはそのコマンドすら、そのリポジトリという歴史上で語り継がれるひとつの史実でしかない。その証拠をお見せしよう。

## git reflog

以下の様なログがあったとする。

```git
2013-10-23 10:10 Tatsuro Baba       o [git-rebase] Add fuga
2013-10-23 10:09 Tatsuro Baba       o Add hoge
2013-10-08 09:35 Tatsuro Baba       o Add picture of '平塚の海岸線'
2013-10-08 09:34 Tatsuro Baba       o Write the continuance of the diary
```

`hoge`と`fuga`という適当なコミットをしたけど、ストーリーを進めていくうちに、これらのコミットは必要なかったことに気がついた。
（ちなみにうちのチームでは（というか俺は）そういうとき、 **『〜〜〜なんていらんかったんや』** と叫ぶ。関西人ではない）

で、以下のコマンドを叩く。

```sh
$ git reset HEAD~3 --hard
```

そして、ログを見てみよう。

```git
2013-10-08 09:34 Tatsuro Baba       o [git-rebase] Write the continuance of the diary
2013-10-08 09:33 Tatsuro Baba       o Add nikki
2013-10-08 09:31 Tatsuro Baba       o Remove useless word
```

**oh…**

消しすぎた。消したかったのは2個だけだったのに、その先の平塚の海岸線（の写真）まで消してしまった。つらい。
どんなコミットだったか思い出して、泣く泣く画像を探してきてコミットし直そう…

### とかする必要はなくて

そこで`git reflog`ですよ。

おもむろに以下の様な感じのコマンドを打ってみる。

```sh
$ git reflog
```

すると、

```git
f1b9f54 HEAD@{0}: reset: moving to HEAD~3
3ebdf5a HEAD@{1}: commit: Add fuga
cf08929 HEAD@{2}: commit: Add hoge
f6dfa25 HEAD@{3}: rebase -i (finish): returning to refs/heads/git-rebase
f6dfa25 HEAD@{4}: rebase -i (pick): Add picture of '平塚の海岸線'
f1b9f54 HEAD@{5}: rebase -i (pick): Write the continuance of the diary
00ea658 HEAD@{6}: commit (amend): Add nikki
fb2a678 HEAD@{7}: commit (amend): Add nikki
80dfd45 HEAD@{8}: cherry-pick
fa33ce4 HEAD@{9}: checkout: moving from git-rebase to fa33ce487fafc3640d388e103992b57ba3de1193
ee88db4 HEAD@{10}: commit: Add picture of '平塚の海岸線'
```

まぁ例えばこんな感じのログが表示される。
これは何かと言うと、HEADの変遷を示している。例えば現在（`HEAD@{0}`のこと）では、`reset`が発動してHEADから3つ分のコミットが移動した、とか、3つ前の変更ではなんか色々`rebase`が完了したらしい、とかが分かる。

ここからがgitのすごいところ。なんとこのログ、巻き戻すことができるのだ。
つまり、 **やっちまった系のアレをごまかすことができるんだよ！！**

**ΩΩΩ＜な、なんだってーーー！！！**

というわけでやってみよう。

```sh
$ git reset HEAD@{1} --hard
HEAD is now at 3ebdf5a Add fuga
```

あっ、なんかキタっぽい！戻ったっぽい！俺確かに"Add fuga"ってコミットした！！

```git
3ebdf5a Add fuga
cf08929 Add hoge
f6dfa25 Add picture of '平塚の海岸線'
f1b9f54 Write the continuance of the diary
00ea658 Add nikki
```

コミットたち「私は帰ってきた！！！」

というわけで今度はちゃんとミスらないように気をつけてresetしよう。

```sh
$ git reset HEAD~2 --hard
HEAD is now at f6dfa25 Add picture of '平塚の海岸線'
```

これで元通りだ。

このコマンドも前にやった`git-rebase`とか`git-add -p`とかと同じで、複数人で開発しててもうmasterに突っ込んじゃった、とかそういうときにやると、多大な迷惑をかけることになるので、気をつけて欲しい。
（この記事を読んで中身が理解できるなら言わなくてもわかると思うけど）

とりあえずこいつらを覚えておけば、gitを使った開発をする上で、致命的にやばい事態には陥らなくなるはず。。。
cocos2d-x入門 -1-


#cocos2d-xの新規プロジェクトを作成する

cocos2d-xはiPhoneやAndroidなどのプラットフォーム向けの2Dゲームを作成するためのゲームエンジンです。

こちらからダウンロードしてインストールしましょう。
私はcocos2d-x v3.0-alpha0を入れました。
[http://www.cocos2d-x.org/](http://www.cocos2d-x.org/ "cocos2d-x")

インストールした後は、下記のようにコマンドを実行してプロジェクトを作成します。

```bash:
$ cd ~/cocos2d-x-3.0alpha0/tools/project_creator
$ ./create_project.py -p myapp -k mycompany -l cpp
```

~/cocos2d-x-3.0alpha0/projects/myapp/proj.ios_mac/ に HelloCpp.xcodeproj が作成されているので、ダブルクリックしてXcodeを起動します。

実行するとこんな感じです。

![実行結果](https://lh4.googleusercontent.com/-DO5nHE5aKE4/UmnGKopauCI/AAAAAAAAAfw/B_uykAC3W0c/w594-h456-no/cocos2d-x_001.jpg "実行結果")

今回はここまで。
ホームがNFSで提供される場合のGUIログイン設定(10.9)

OS X ServerのOpen Directoryで認証情報を，NFSでホームディレクトリを提供している環境で，クライアントマシンのデスクトップにログインしたい場合の設定についてのメモです．ホームディレクトリをAFPで提供している（普通の？）場合は以下のようなことをする必要はありません．

10.8 (Mountain Lion)では/etc/authorizationを編集して以下の行をコメントアウト（あるいは削除）する必要がありました（参考：http://alastairs-place.net/blog/2012/09/10/afp/ ）．

    <string>HomeDirMechanism:login,privileged</string>
    <string>HomeDirMechanism:status</string>

10.9 (Mavericks)では/etc/authorizationがなくなり，代りにauthorizationdbを使うようになっています．この内容を編集するには，まず以下のようにして一時ファイルに書き出します．

    sudo security authorizationdb read system.login.console > /tmp/temp.plist

次に/tmp/temp.plistを編集して以下の行を削除します．10.8における/etc/authorizationの場合と同じです．

    <string>HomeDirMechanism:login,privileged</string>
    <string>HomeDirMechanism:status</string>

最後に以下のようにしてauthorizationdbに変更を反映させます．

    sudo security authorizationdb write system.login.console < /tmp/temp.plist

以上でデスクトップでログインできるようになります．
いま使ってる変数の型を確認する

はい。
いま何を使ってるのかよくわかってないことがあります。はい。
```type(test)```

これtestがintかstrか、tupleかとか確認することが出来ます。
標準である？型でなく例えばtweepyを利用して取得したものは
```<class 'tweepy.models.Status'>```
と返されました。

[https://dev.twitter.com/docs/api/1.1/get/statuses/mentions_timeline](https://dev.twitter.com/docs/api/1.1/get/statuses/mentions_timeline)
これを自力で整形しようとか力不足すぎて無理でした。。。tuple難解すぎ
poltergeistとfeature specで簡単なパフォーマンステストを実現する

最近、JSも交えた総合テストを実施するのにRails界隈で良く使われている(と思う)[jonleighton/poltergeist](https://github.com/jonleighton/poltergeist "jonleighton/poltergeist")。
poltergeistはWebブラウザ操作DSLであるcapybaraのドライバとして動作します。
実際はphantomJSがバックエンドとして動いています。
phantomJSとRubyがどうやってやり取りしてるかは気が向いたら書くとして、
今回はpoltergeistを使って行う簡単なパフォーマンステストについて書きます。

ちなみに複数のクライアントから同時にアクセスするタイプのものではなく、
一つのクライアントでアクセスした時のレスポンスが来るまでの時間を測る感じです。
ラッシュかけたい場合には使えないので他の方法を考えましょう。

RSpecとcapybaraでfeature spec、つまり総合的なシナリオテストを書く時は以下のようになります。

```ruby
feature "ユーザーを検索して一覧できる", js: true do
  scenario "ユーザー検索ページを開き、ユーザーを検索して一覧する" do
    visit users_path
    find("#search_user_field").set("username")
    click_button('Search')

    expect(page).to have_selector(".user")
  end
end
```

ページ開いてフォームに値入れて検索ボタンを押して結果確認、って感じです。
実際は、こんな簡単では無いですが…。

で、この検索結果のレスポンスが平均200ms以下で帰ってきて欲しいとします。

ここで、[rack/rack-contrib](https://github.com/rack/rack-contrib "rack/rack-contrib")を利用します。
rack-contribには`Rack::Runtime`というミドルウェアが含まれてます。
これは`Rack::Runtime`以下の処理に入って戻ってくるまでの処理時間を`X-Runtime`というキーでレスポンスヘッダに追加してくれるミドルウェアです。

これを利用することで、実際にコントローラーがリクエストを受け取って、レンダリングして処理を返すまでの時間が簡単に測れます。
後はこれをrspec側で取得して集計できればオッケーです。

レスポンスヘッダの情報を取得する時にpoltergeistで使える機能は二つあります。
それが`response_headers`と`network_traffic`です。

`response_headers`は、最後にvisitで移動した際のレスポンスヘッダをハッシュの配列として返してくれます。
単純なハッシュじゃないので微妙にアクセスしづらいですが。

`network_traffic`は、今までに発生したアクセス全てのリクエストとそれに対応する結果の記録を返してくれます。
これはブラウザ内のJSの動作で発生したAjaxのリクエストや画像の取得等も含みます。
これは地味に結構便利な機能です。

この例だと`response_headers`で取得するだけで充分ですが、もしAjaxでフォームの送信が行われるような場合は`network_traffic`を使うと良いでしょう。
ちなみに`network_traffic`は`clear_network_traffic`で消去できます。

これでヘッダの情報が取れるので`X-Runtime`の情報を集めて集計しましょう。

```ruby
feature "ユーザーを検索して一覧できる", js: true do
  scenario "ユーザーを検索して結果が返るまでの平均時間が200ms以下であること" do
    response_times = collect_response_time(20, "POST", %r(/users/search$)) do
      visit users_path
      find("#search_user_field").set("username")

      click_button('Search')
    end

    expect(response_times.sum / 20).to be <= 0.2 # Enumerable#sumはActiveSupport
  end
end

def collect_response_time(n, http_method, url_pattern, &block)
  response_times = []

  n.times do
    page.driver.clear_network_traffic # 前ループの履歴を消す

    block.call

    response_times << page.driver.network_traffic.find {|t|
      t.method == http_method && t.url =~ url_pattern # アクセス対象を特定する
    }.response_parts.first.headers.find {|h|
      h["name"] == "X-Runtime"
    }["value"],to_f # nameがX-Runtimeのヘッダのvalueを取得する
  end

  response_times
end
```

並列化とか考えてないのでそれなりに時間かかりますが、メタデータで上手く分けておいてJenkinsに日次で流すなどしてもらうのが良いかと思います。

そこまで正確ではないし1リクエストごとのレスポンスですが、メイン機能や重い計算が走る処理などに対して、手慣れたRSpecでざっくりとレスポンスが計測出来ると結構便利です。
使い回されすぎてて手がつけにくい生Objectに何かこうぱぱっといろんなメソッドを生やせないかなと思ったら黒魔術ができた

```js

function Mixin(obj) {
	obj.__proto__ = this.__proto__;
	return obj;
}

Mixin.prototype = {
	someMethod: function() {
		console.log(this);
	},
	//...
};


// 大元でつくる
var obj = new Mixin(someSourceObject);

// あとはobjが輪姦される

```

どう見てもBKです。本当にありがとうございました。

※普通に一個一個メソッドつけてあげればいいんだけどね
フィボナッチ数列でFizzBuzz with Haskell

FizzBuzzをフィボナッチ数列で行うコードをHaskellで書いてみました。
特に意味はないテスト投稿です。

```hs
import Control.Monad (forM_)
 
fib :: [Integer]
fib = 0 : 1 : 1 : [ fib !! (n-2) + fib !! (n-1) | n <- [3..] ]
 
main :: IO ()
main = forM_ [1..100] $ \i -> do
    putStr $ show i ++ ": "
    print $ fib !! i
```

表題のwithの使い方合ってるかな…？
RubyKokubanで画像をマウスに追従させる


mrubyを使ってインタラクティブアプリケーションを作ることが出来ます。
インストール方法は[こちら](https://github.com/ongaeshi/rubykokuban-gem)をどうぞ。 → [[最新記事]](http://ongaeshi.hatenablog.com/entry/rubykokuban-image)

表示して、アニメーションさせたら、最後は入力に反応させてみましょう。マウスに画像を追従させます。
`Image#set_anchor_percent`は画像の基準位置を変更出来る便利なコマンドです。(今回は基準位置を真ん中に変更しています。)

```ruby
def setup
  @image = Image.load("sample.png")
  @image.set_anchor_percent(0.5, 0.5)
end

def draw
  set_color(Color::White)
  @image.draw(Input.mouse_x, Input.mouse_y)
end
```

```
$ kokuban exec image004.rb
```

動くと楽しいですね。

![image004.png](http://cdn-ak.f.st-hatena.com/images/fotolife/t/tuto0621/20131020/20131020174044.gif)

## 目次
- [RubyKokuban Memo - 目次](http://ongaeshi.hatenablog.com/entry/rubykokuban-memo)
Eclipseプラグインをオフラインインストールする

インターネットに繋がらない環境下にあるPCのEclipseに、プラグインを追加したくなって調べたのでメモ。

やりたいことはここに書いてあったので、この通りにやってみる。
[Equinox p2 Repository Mirroring](http://wiki.eclipse.org/Equinox_p2_Repository_Mirroring)

今回はGoogleのCodeProをインストールしてみた。

インストール対象のEclipseはJunoだけどアップデートサイトは3.7までしかなかったけど、Eclipse Junoでもインストールできたし動作もした。
ただし、設定でCodeProのプロパティを開くと警告がでる。

CodeProのアップデートサイト(Eclipse 3.7用)
http://dl.google.com/eclipse/inst/codepro/latest/3.7

まずメタデータをダウンロードする。

> eclipse.exe -nosplash -verbose
>  -application org.eclipse.equinox.p2.metadata.repository.mirrorApplication
>  -source http://dl.google.com/eclipse/inst/codepro/latest/3.7
>  -destination C:\CodePro
>
> ※-destinationに指定したディレクトリに"content.jar"が保存される。

次にアーティファクトをダウンロード。つまりはレポジトリの中身を取ってくる。

> eclipse.exe -nosplash -verbose
> -application org.eclipse.equinox.p2.artifact.repository.mirrorApplication
>  -source http://dl.google.com/eclipse/inst/codepro/latest/3.7
>  -destination C:\CodePro
>
> ※-destinationに指定したディレクトリに"features", "plugins", "artifacts.jar"が保存される。

-destinationはメタデータとアーティファクトに同じディレクトリを指定する。

-nosplashオプションをつけているとダウンロードの状況がわからないのでないほうがよいかも。
プログレスバーは表示されないけど、スプラッシュウィンドウが表示されているかどうかでダウンロード状況がわかる(ウィンドウが消えたらダウンロード完了)。

インストールは、Eclipseを起動して「ヘルプ」→「新規ソフトウェアのインストール」で、ダウンロードしたディレクトリを指定したらOK。
grunt-contrib-jasmine の phamtomjs 用テンプレートに jade を使う

```coffeescript:Gruntfile.coffee
jade = require "jade"
module.exports = (grunt) =>
    grunt.initConfig
        jasmine:
            files: [
                "public/js/lib/zepto.min.js"
                "public/js/main.js"
                ...（依存ライブラリとテスト対象）
            ]
            options:
                specs: [
                    "test/js/mainSpec.js"
                    ....（実行したいテスト）
                ]
                template:
                    process: (grunt, task, contest) ->
                        tt = "test/template.jade"
                        src = grunt.file.read tt
                        compiled = jade.compile(src, {pretty:true, filename:tt})(context)
                outfile: "test/js/_SpecRunner.html"
                keepRunner: true
```

```jade:test/template.jade
!!!
html
    head
        meta(charset="utf8")
        // 順番が重要
        jss = [scripts.jasmine, scripts.vendor, scripts.helpers, scripts.src, scripts.specs, scripts.reporters, scripts.start]
        for js in jss
            for path in js
                script(type="text/javascript", src=path)
    body
        ...（テストに必要なHTMLをinclude, mixinで書く）
```
RでMySQLデータベース上のデータを操作する


## やりたいこと
- MySQL上のデータベースのデータをRから取り出して解析したい。

※Mac環境で実行します。（Linux/UNIXも同様の手順で動くと思います。）

## RMySQLをインストールする

RMySQLとは、RのためのデータベースインタフェースとMySQLドライバを収めた パッケージ


````R:
$ sudo R
> install.packages("DBI")
> install.packages("RMySQL")
```

## RからMySQLデータベースに接続する

### RMySQLライブラリを読み込む
````R:
$ R
> library(RMySQL)
 要求されたパッケージ DBI をロード中です
```

### MySQLのデータベースとのセッションを確立する
```R:
> md <- dbDriver("MySQL")
> dbconnector <- dbConnect(md, dbname="sample_db", user="root", password="root")
```

### MySQLのデータベース上でのクエリ実行結果をRのテーブルに格納する
````R:
> sample.table <- dbGetQuery(dbconnector, "select * from sample_table")
```

### MySQLのデータベースとのセッションを破棄する
````R:
> dbDisconnect(dbconnector)
[1] TRUE
```

### 取得したデータを確認する
"data.frame"形式で取得できていることがわかる。

````R:
> class(sample.table)
[1] "data.frame"
> sample.table
 		id		name 
1		1		user1
2		2		user2 
3		3		user3
4		4		user4
5		5		user5 
6		6		user6
```

　
　
# 恵比寿ランチ
## [海南鶏飯食堂2 恵比寿店](http://tabelog.com/tokyo/A1303/A130302/13020061/)

恵比寿ランチランキングTOP5に入るうまさ。
柔らかい鶏肉と、ジャスミンライスに３種類のタレをかけて食べる。
チキンスープがよく染み込んだジャスミンライスがうますぎて、いつも２、３杯はお替わりしてしまう。

- チキンライス850円(ジャスミンライスお替わりし放題)
- URL [http://tabelog.com/tokyo/A1303/A130302/13020061/](http://tabelog.com/tokyo/A1303/A130302/13020061/)


![20131024204643.jpg](https://qiita-image-store.s3.amazonaws.com/0/5537/9cb81506-4e9a-592b-f8ac-3c6541fe55c5.jpeg "20131024204643.jpg")
tmlib-rpg CustomizeTexture を作ってみた。

まだまだRPGのシステム作成するには、下地が足りないので…また、Assetな話なんだけど。

CustomizeTexture を作りました。
複数の画像素材から１つの画像素材を作り出すAssetです。

RPGにはキャラクターが沢山でてきて、色違いとか一部だけ違うとか、とにかく素材も多くなりがち。

もし主人公キャラの装備で外見を変える様な事をすると、兜、鎧、盾、武器とか、それぞれの組み合わせで
キャラクタースプライトが必要に…なんて事つらすぎる。
（そこまでは、出来たとしてもしないと思うけど…）

見本と言うか、わかりやすく言うと、VX Ace のキャラクター生成機能とか
ツクールWebにある、[ちびきゃらツクール](http://www.famitsu.com/freegame/tool/chibi/index2.html)とか。
これを動的に、やってしまおうと言うのが、CustomizeTexture です。

髪形だけ顔だけ、身体だけのキャラクタースプライトを複数用意して、
実際のゲームでは、それらを合成して使う。

AssetManager のおかげで、get するだけで、初めから用意されてる画像素材なのか、
合成された後の画像素材なのか、使う側は意識することなく画像素材として使えるようにできるので、良い感じ。

で、とりあえず、作ったのがこれ

```CoffeeScript:CustomizeTexture.coffee
# CustomizeTexture クラス
tm.define 'tm.asset.CustomizeTexture',
  superClass: tm.asset.JsonWrapper

  # 初期化
  init: (path) ->
    @superInit(path)

  parse: (param) ->
    {
      @images
      @width
      @height
    } = param
    @canvas = tm.graphics.Canvas()
    @canvas.resize(@width, @height)
    @element = @canvas.canvas
    for image in @images
      image = tm.asset.AssetManager.get(image)
      @canvas.drawTexture(image,0,0)

# AssetManager に登録
tm.asset.AssetManager.register 'texture_',
  (path) -> tm.asset.CustomizeTexture(path)
```

tm.asset.JsonWrapper は、このために、parse を呼び出して $extend するようにしてます。
ここでは CustomizeTexture がそれを上書き。
Texture といいながら、中身は、Canvas と言うのは、内緒で…Texture ふりする。
（そう言えば、普通に tm.asset とかパッケージつかってたけど、変えたほうが良いかな…？）

今は、画像を重ねてるだけだけど、もっといろいろな合成方法を、json で指定できるようにすれば、便利に使えそう。



ちょっと問題になるのが、Asset の読み込む順番、CustomizeTexture で画像素材を合成する場合
tm.asset.AssetManager.get を使ってるので、CustomizeTexture の Asset が load されるときには、
そこで使う画像素材は、load が終わってないと調子悪い。

いまは、tm.asset.AssetManager.load で、Hashオブジェクトを渡して、Asset を複数読み込ませてるけど
これは、順番が保障できないので、CustomizeTexture と、そこで使う素材を、同じ Hash オブジェクトで渡すと上手くいかないです。

get する前に、まだ load されてなかったら、for ループを load が終わるまで止めておいて～とか
いろいろやり方はあるかもだけど…上手い方法が出来てない＞＜

load に配列で渡して、その順番で読んでくれれば…とか思ったけど、それだとロードに時間かかりそうだし…
と、言う訳で、今の所 tm.asset.AssetManager.load 自体を何回か呼ぶようにしてます。

具体的には、ちゃんとロードシーンを作って、load するAsset の Hash オブジェクトを複数わたして
順番に、load を呼ぶ感じ。
https://bitbucket.org/[ユーザー名]/[リポジトリ名]/admin/links でJenkinsへのリンクを設定する方法

ずっと悩んでいた https://bitbucket.org/[ユーザー名]/[リポジトリ名]/admin/links の使い方がさっき分かったのでメモ。

まず、https://bitbucket.org/[ユーザー名]/[リポジトリ名]/admin/links のJenkinsのボタンをクリックして、以下のように設定する。

![bitbucket-admin-link.png](https://qiita-image-store.s3.amazonaws.com/0/7809/a9ed59a1-be34-4eca-fa83-3d1ba6d68375.png)
「Save」で保存すると、画面下が以下のようになっているはず。
![bitbucket-configured-links.png](https://qiita-image-store.s3.amazonaws.com/0/7809/46d552d4-7d6a-269a-e0e9-693e2c4131cf.png)
この状態でコミットメッセージやコードへのコメントに「example-project-[数字]」のような文字列を埋め込むとBitbucket上では http://example.com/job/example-project/[数字] へのリンクに変換される。
[cocos2d-x][Xcode][Eclipse] #includeのパスにClassesを追加する（XCodeとEclipseでのコードの統一のため）

`#include`のパスにClassesを追加する（XCodeとEclipseでのコードの統一のため）

# 問題
以下のようなディレクトリ構成のとき、`File2`で`File1.h`を`#include`する際の書き方がXcodeとEclipseとで異なる

* Classes
    * Dir1
        * File1.h
    * Dir2
        * File2

---------------------------------------

▼ Eclipse の場合(File2.cpp)
EclipseではデフォルトでClassesが#includeのpathになっている

```cpp
#include "Dir1/File1.h"
```

---------------------------------------

▼ Xcode の場合(File2.cpp)
・なぜか`Dir1/`を省いて`File1.h`とだけ書いてもBuildできてしまう
・逆にデフォルトでClassesが#includeのpathになっていないので、`Dir1/`を省いて`File1.h`とだけ書くとBuildできる（できてしまう）

```cpp
#include "File1.h" // OK!!
#include "Dir1/File1.h" // Error!!
```

# 対処
Eclipse式にする＝Classesを`#include`のRootとする方に統一する

```cpp
#include "Dir1/File1.h"
```

そのため、Xcodeのinclude pathにClassesを追加する

具体的な操作は以下

![スクリーンショット_2013-10-24_17.47.46.png](https://qiita-image-store.s3.amazonaws.com/0/31118/48bd3bb4-6922-4c08-2732-a0cc44cd66e2.png)
Mac OS X MavericksでJava6（JDK1.6）を(再)インストールする方法

OS XをMavericksにアップグレードした際にJava6（JDK1.6）が消えてしまう．
Java6まではAppleが配布しているため，Oracle.comからは入手できない．

そこで，以下の手順でJava6を(再)インストールする．

------
0. Apple Developer Programに登録（登録していない場合）

1. Apple Developer Programのトップページから
    * 上部メニューの" _リソース_ ( _Resource_ )"
    * OS X 項目内の" _その他のダウンロード項目_ ( _Additional Downloads_ )"の順に選択
2. 一度サインインを聞いてくるので，サインイン
3. 左側の検索ボックス（Downloads for Apple Developers の下）で"java"と検索
4. "Java for ..."と，検索結果がDescriptionに表示される
5. 検索結果トップの"Java for OS X 2013-005 Developer Package" 項目の中に同名のdmgファイルのリンクからダウンロード
5. ダウンロード後dmgファイルを展開し，pkgファイルを開いてインストール
6. /Library/Java/JavaVirtualMachines/に"1.6.0_65-xxx.jdk"フォルダが生成される
7. /Library/Java/の"Home"（シンボリックリンク）を張り直すために，以下の内容をターミナルに入力

        $ cd /Library/Java/
        $ rm Home
        $ ln -s /Library/Java/JavaVirtualMachines/1.6.0_65-xxx.jdk/Contents/Home Home

----

以上で終了．
Nokogiri で inner_html の XHTML を生成


Node 自体を XHTML にしたいときは `to_xhtml` でいいんだけど、`inner_xhtml` のようなメソッドはない。

`inner_html` の XHTML を生成したいときは、`:save_with` オプションに `Nokogiri::XML::Node::SaveOptions::AS_XHTML` を指定すればよい。

```ruby
node.inner_html(save_with: Nokogiri::XML::Node::SaveOptions::AS_XHTML)
```

`Node#inner_html` の引数は最終的に `Node#write_to` の第 2 引数に渡される。
`Node#write_to` のドキュメントを見ると下記のような記述がある。

> :save_with` a combination of SaveOptions constants.

あとは `Node::SaveOptions` のドキュメントを見れば、`AS_XHTML` に関する記述が見つかる。

あるいは、`inner_html` の実装を参考に、`to_xhtml` を使って下記のように書いてもよい。

```ruby
node.children.map(&:to_xhtml).join
```

参考

- [Nokogiri::XML::Node#inner_html](http://rubydoc.info/gems/nokogiri/Nokogiri/XML/Node:inner_html)
- [Nokogiri::XML::Node#to_html](http://rubydoc.info/gems/nokogiri/Nokogiri/XML/Node:to_html)
- [Nokogiri::XML::Node#write_to](http://rubydoc.info/gems/nokogiri/Nokogiri/XML/Node:write_to)
- [Nokogiri::XML::Node::SaveOptions](http://rubydoc.info/gems/nokogiri/Nokogiri/XML/Node/SaveOptions)
CentOS5系にvim7.4(+Lua+Python+Ruby)をインストール

ちょっと古い環境で開発することがあったんだけど、vimのプラグインでLuaとPython使いたかったのに標準のvimだと使えなかった。というかvimのバージョンが7.2と低かったのでいろいろ駄目で、いちから入れる。
あと、標準のPythonが2.4で、いろんなプラグインで支障が出るのでこれも入れ替え。
rootでやってます。


##Python3インストール
yumであるわけもないので、普通にソースコードから、configure, make, make install. 特になし


## Rubyインストール
普通にソースコードから、configure, make, make install. 特ｎ

## Luaインストール
これはちょっこりハマった。
http://rcmdnk.github.io/blog/2013/08/07/computer-vim/
これを参考に

```
$ make linux MYLIBS=-ltermcap
$ make install INSTALL_TOP=/usr/local
```

##vimインストール
vimのソースもってくるのはこれとか参考にした。
http://qiita.com/muniere/items/0569d05d470c5d3dc51b

Python3 を、ねんのため/usr/binから見えるようにしておく

```
ln -s /usr/local/bin/python3.3 /usr/bin/python3
```


python-config は、インストールしたバージョンに合わせたり適当に。

```
./configure CPPFLAGS=-I/usr/local/include/python3.3 LDFLAGS=-L/usr/local/lib/python3.3 --with-features=huge --with-local-dir=/usr/local --enable-perlinterp --disable-pythoninterp --enable-rubyinterp=yes --enable-luainterp=yes --enable-fail-if-missing --enable-multibyte --disable-selinux --prefix=/usr/local  --with-lua-prefix=/usr/local --enable-python3interp --with-python3-config-dir=/usr/local/lib/python3.3/config-3.3m/
make
make install
```
Python.h が見えない、とか言われたら古いバージョンでもいいからpython-devel をyumで入れて黙らせるか、さっきpython入れたので

```
$ set C_INCLUDE_PATH=/path/to/python_include_files/
```
とか先にやっておけばいいと思います未確認です。



あとは、.bashrc か .zshrc あたりに

```
alias vi=/usr/local/bin/vim
```
とか。
これで普段使いのvimプラグインが動いたやったー
「Githubで空白を無視してdiffを見る」のブックマークレット

githubで「インデントのせいでdiffが見づらくなる」問題への対処法を探してた所、
Qiitaでawakiaさんの「[Githubで空白を無視してdiffを見る](http://qiita.com/awakia/items/6a7028aa46928e376f32)」を発見。

diffページのURLに「?w=」をつけることで空白を無視されるとのこと。
こりゃ便利。
という訳でブックマークレットを作ってみた。(凄い簡単だけど)

```
javascript:location.href = location.href+'?w=';
```

これでワンクリックで表示を変えられる。
シンボリックリンク自体のオーナーを変えるにはchown -h オプション

シンボリックリンクのオーナーを変えたいのに、幾ら chown を叩いても全然変わらない。
と思ったら、リンク先のオーナーが変わってた。

- symbol のオーナーを変更すると、entity のオーナーが変わる

```bash 
[]~/tmp: ll
total 8
-rw-r--r--  1 root  _avuxupdate  0 10 24 13:15 entity
lrwxr-xr-x  1 root  _avuxupdate  6 10 24 13:15 symbol@ -> entity
[]~/tmp: sudo chown mysql:mysql symbol
[]~/tmp: ll
total 8
-rw-r--r--  1 _mysql  _mysql       0 10 24 13:15 entity
lrwxr-xr-x  1 root    _avuxupdate  6 10 24 13:15 symbol@ -> entity
```

- chown -h オプション を使うとリンク自体のオーナーを変えられる

```bash
[]~/tmp: sudo chown -h mysql:mysql symbol
[]~/tmp: ll
total 8
-rw-r--r--  1 _mysql  _mysql  0 10 24 13:15 entity
lrwxr-xr-x  1 _mysql  _mysql  6 10 24 13:15 symbol@ -> entity
```
テキストをドラッグで選択出来ないようにする

SVGなんかで描画したテキストをユーザーにドラッグで選択(ハイライト)させたくない。

そんな時のために user-select というCSSスタイルがあります。以下のように書けば選択できなくなります。

```css
      .disable-select {
        -ms-user-select: none;
        -webkit-user-select: none;
        user-select: none;
      }
```

[stackoverflow](http://stackoverflow.com/questions/826782/css-rule-to-disable-text-selection-highlighting)
Redmine で Wiki ページの更新履歴をチケットに関連付けるプラグイン

## 課題

Redmine では、コミットログに `refs #1234 message` のようにチケットNo. とキーワードを含めておけば、コミットとチケットを関連付けたり、ステータスを更新したり、時間を記録することができます。

しかし例えば、Wiki を使ってドキュメントを作成又はメンテするチケットがあったとき、作業の記録を残すためにわざわざチケットのコメント欄に作業内容とその Wiki へのリンクを入力する必要がありました。

## やりたかったこと

ならば、Wiki の更新時に入力するコメントにも、コミットログと同様に `refs` や `fixes` などのキーワードが使えれば捗るんじゃなかろうかと。

## Redmine Issue Wiki Journal プラグイン

というプラグインを作りました。ソースコードは github に公開しています。
https://github.com/hidakatsuya/redmine_issue_wiki_journal

### 使い方

やりたかったことそのまんまです。

Wiki ページ更新時のコメント欄にコミットログで関連付けるときと同様、キーワードとチケットNo. を入力しておきます。
![Wiki ページの更新](http://hidakatsuya.github.io/redmine_issue_wiki_journal/images/feature-1.png)

で、更新するとチケットに Wikiページとそのバージョンへのリンク、メッセージが記録されます。チケットのコメントに追加しているだけなので（設定されていれば）メールも普通に飛びます。
![チケットへ記録される](http://hidakatsuya.github.io/redmine_issue_wiki_journal/images/feature-2.png)

この画像は言語を英語にしている場合なので、 **言語設定が日本語であれば、ちゃんと日本語で記録される** はずです（現在は、英語と日本語翻訳のみ対応）

また、画像はないですが、Wiki ページの更新履歴一覧ページに更新時のコメントが表示されますが、その中の `#1234` のようなチケットNo. 表記にチケットへのリンクを貼るよう拡張もしてます。言葉では分かりづらいですね... コメント欄に `refs #123 message` と入力して更新後、Wiki ページの更新履歴ページを見て下さい。

### 動作環境

  * Redmine 2.2.x, 2.3.x
  * Ruby 1.9.3, 2.0.0

### インストール/アンインストール

[README.ja](https://github.com/hidakatsuya/redmine_issue_wiki_journal/blob/master/README.ja.md) にも書いてありますが、 Redmine の公式ガイドをご覧下さい。
http://www.redmine.org/projects/redmine/wiki/Plugins#Installing-a-plugin

### セットアップ

初期状態では、終了キーワードに対応するステータスが設定されていないので、そのままでは `fixes` などの終了キーワードを使ってもステータスの更新は行われません。なので、まず `管理 > 設定 > リポジトリ` から終了キーワードに対応するステータスを設定して下さい。
![設定](http://hidakatsuya.github.io/redmine_issue_wiki_journal/images/setup.png)

## 今後

まずは、 [Issue](https://github.com/hidakatsuya/redmine_issue_wiki_journal/issues?state=open) にあげてあるタスクを順次対応します。ただその中でも、実装はしてるもののテストコードの無い時間記録機能を対応しようかと思ってます。

詳しい使い方や動きは [テストコード](https://github.com/hidakatsuya/redmine_issue_wiki_journal/blob/master/test/functional/wiki_controller_test.rb) が参考になるかもしれません。

よろしければご利用下さい。
Eclipse + Maven で "java.lang.ClassNotFoundException: sun.tools.native2ascii.Main"

Mule ESBをソースコードからビルドしようとしてmvn buildしたら、

 org.codehaus.mojo:native2ascii-maven-plugin:1.0-alpha-1:native2asciiでエラーが発生した。

> java.lang.ClassNotFoundException: sun.tools.native2ascii.Main

ということなので、&lt;plugin&gt;に&lt;dependencies&gt;を追加して対応。無事ビルドすることができた。

                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>native2ascii-maven-plugin</artifactId>
                    <version>1.0-alpha-1</version>
                    <dependencies>
						<dependency>
							<groupId>com.sun</groupId>
							<artifactId>tools</artifactId>
							<version>1.5.0</version>
							<scope>system</scope>
							<systemPath>${java.home}/../lib/tools.jar</systemPath>
						</dependency>
                    </dependencies>
                 ...
                </plugin>

__追記__
と、思ったらMavenプロジェクトとしてインポートしたら、そのまま行けた
localhostへの接続に失敗したときおせっかいでURLを www.localhost.com に変更するのを止める


`about:config` で `browser.fixup.alternate.enabled` を `false` にすれば良い。

![kobito.1382583627.121675.png](https://qiita-image-store.s3.amazonaws.com/0/8219/9f3efb1f-672d-21b4-55f5-ab0ef9ee34e7.png "kobito.1382583627.121675.png")
Google AnalyticsのマイレポートでIEのバージョン割合を確認する


何やらGoogle Analyticsでマイレポートなるものが作成できるようなので、ユーザのOSやブラウザ、IEのバージョンなどの割合を簡単に見れるようにしてみた。IE8以下は早く消えてほしい。

![ga_2013-10-24_1148.png](https://qiita-image-store.s3.amazonaws.com/0/2435/7500147b-f840-d396-4e60-7e681761383e.png "ga_2013-10-24_1148.png")


マイレポートは ``マイレポート`` > ``新しいレポート``から作成できる。マイレポートから ``+ウィジェットを追加`` でグラフの設定などができる。以下のような設定で作った。ユーザ数は場合によっては訪問数やページビューに変えてみてもよいかもしれない。

### オペレーティング システム 別の ユーザー数

|項目|値|
|--:|:--|
|標準|円グラフ|
|次の円グラフを作成|ユーザ数|
|グループ分けの単位|オペレーティングシステム|

### オペレーティング システム と ブラウザ でグループ化した サーバーの平均応答時間（秒）

|項目|値|
|--:|:--|
|標準|棒グラフ|
|次の棒グラフを作成|サーバの平均応答時間(秒)|
|グループ分けの単位|オペレーティングシステム|
|ピボット|ブラウザ|

### ブラウザ 別の ユーザー数

|項目|値|
|--:|:--|
|標準|円グラフ|
|次の円グラフを作成|ユーザー数|
|グループ分けの単位|ブラウザ|

### IEバージョン 別の ユーザー数

|項目|値|
|--:|:--|
|標準|円グラフ|
|次の円グラフを作成|ユーザー数|
|グループ分けの単位|ブラウザのバージョン|
|このデータをフィルタ|表示の絞込 - ブラウザ - 含む - ``Internet Explorer``|
Mavericksでターミナルからパイプで通知だけするワンライナー


```bash
$ alias pong='perl -nle '\''print "display notification \"$_\" with title \"Terminal\""'\'' | osascript'
$ echo hoge | pong
```

![スクリーンショット 2013-10-24 11.14.14.png](https://qiita-image-store.s3.amazonaws.com/0/4194/29c75283-a926-c7a3-3200-db761a47a048.png)

日本語もおｋ！

```bash
$ echo Javaだいすき | pong
```

![スクリーンショット 2013-10-24 11.15.57.png](https://qiita-image-store.s3.amazonaws.com/0/4194/f2043a3d-24a5-780a-bda8-6bd23bb64b76.png)

## 参考
[Mavericksでは通知センターをスクリプトから使えるようになった](http://blog.msyk.net/?p=181)
【Linux】ジョブのバックグラウンド実行


Linux terminal 上でジョブをバックグラウンドで実行する方法について説明する。

## バックグラウンド実行

コマンドの最後に "&" をつけるだけ！

````
[fuji@fujios ~]$ sleep 1000 &
[1] 4593
````
上の1000秒待機するジョブは、プロセス番号[4593]に割り振られましたよ、って意味。
実際にプロセスを確認してみる。

````
[fuji@fujios ~]$ ps
  PID TTY          TIME CMD
 4540 pts/0    00:00:00 bash
 4593 pts/0    00:00:00 sleep
 4594 pts/0    00:00:00 ps
````

ちゃんとバックグラウンド実行できていることを確認できた。

## “ログアウトしても”バックグラウンド実行

SSH接続で時間のかかるジョブを実行した際に、SSH接続を切るとジョブが死んでしまう。
ジョブが kill されないようにするには、"nohup" コマンドを使う。

````
[fuji@fujios ~]$ nohup sleep 1000 &
[1] 4524
[fuji@fujios ~]$ nohup: appending output to `nohup.out'
````

ここで気をつけるのは、"nohup" がバックグラウンド実行でないということ。
そこで末尾に "&" をつけてバックグラウンド実行にしている。

ちなみに標準出力/エラーは、プログラムを実行したディレクトリに nohup.out というファイル名で保存される。

参考：[ログアウトしてもバックグラウンド ジョブを継続する方法](http://www.codereading.com/notebook/moin.cgi/IgnoreTheHangupSignal)
chef でファイルのパーミッションを設定するメモ


すでにあるファイルを `chmod 644` 相当にしたい場合の例。
とりあえず実現できているが、もっといい方法があれば知りたい。

```ruby:default.rb
%w{
  /var/log/messages
  /var/log/cron
}.each do |file|
  execute "#{file} permission" do
    not_if "test `stat -c '%a' #{file}` -eq '644'"
    command "chmod 0644 #{file}"
    user "root"
    group "root"
    action :run
  end
end
```

ただし CentOS 上でしか試していないので他の OS だと動かないかも。
手習いsleepsort


```sleep_sort.py

import threading
import time

sort_list = [1, 3, 6, 8, 10, 33, 44, 23]

def sort(lis):
    answer_list = []
    for num in lis:
        thread = threading.Thread(target=sleep,  args=(num, answer_list))
        thread.start()
    while (threading.active_count() > 1):
        time.sleep(0.1)
    print answer_list


def sleep(num, lis):
    time.sleep(num * 0.1)
    lis.append(num)


if __name__ == "__main__":
    sort(sort_list)

```
Android Studio 0.3.1でCould not execute build using Gradle distribution ..

すべての`build.gradle` で

```
   dependencies {
        classpath 'com.android.tools.build:gradle:0.6.+'
    }
```

として、

`<project root>/gradle/wrapper/gradle-wrapper.properties`
にてgradle-1.6.zipをgradle-1.8-all.zipに変えて、Android Studioを再起動したらいけた。
[Grails] 起動時・終了時になにか処理をしたい場合

Grailsの起動時や終了時になにか処理を挟みたい場合、`BootStrap.groovy` の中にその処理を記述します。

- Environment.executeForCurrentEnvironment
- environments

上記のどちらかを利用することで、起動モードで処理を切り分けられます。
それぞれ開始時と終了時で使ってみた場合のサンプルです。

```groovy:grails-app/conf/BootStrap.groovy
import grails.util.Environment
import grailssamples.Person

class BootStrap {

    // Grails開始時に実行される
    def init = { servletContext ->
        Environment.executeForCurrentEnvironment {
            development {
                println "dev!"
            }
            test {
                println "test!"
            }
            production{
                println "production!"
            }
        }
    }

    // Grails終了時に実行される
    def destroy = {
        environments {
            development {
                println "dev end!"
            }
            test {
                println "test end!"
            }
            production{
                println "production end!"
            }
        }
    }
}
```

それぞれの起動方法は

```
grails dev run-app
grails test run-app
grails prod run-app
```

実行結果は以下のような感じ。

```
grails> run-app
| Running Grails application
Okt 24, 2013 10:00:23 AM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-bio-8080"]
Okt 24, 2013 10:00:23 AM org.apache.catalina.core.StandardService startInternal
INFO: Starting service Tomcat
Okt 24, 2013 10:00:23 AM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.39
Okt 24, 2013 10:00:23 AM org.apache.catalina.startup.ContextConfig getDefaultWebXmlFragment
INFO: No global web.xml found
Okt 24, 2013 10:00:23 AM org.apache.catalina.core.ApplicationContext log
INFO: Initializing Spring root WebApplicationContext
dev!
| Server running. Browse to http://localhost:8080/grailssamples
| Application loaded in interactive mode. Type 'stop-app' to shutdown.
| Enter a script name to run. Use TAB for completion:
grails>
grails> stop-app
| Stopping Grails server
dev end!
grails>
```

devの場合は `grails run-app` のように省略できます。
importすればドメインクラスも問題なく利用できます。
主に、開発時点でのテストデータの挿入などに利用できそうです。
aapt コマンドで R.java を生成する

プロジェクトのフォルダ直下で実行するとして以下のような感じ

```
aapt p -v -m -S ./res -J ./src -M ./AndroidManifest.xml -I $ANDROID_HOME/platforms/android-18/android.jar
```

参考：http://geosoft.no/development/android.html
homebrew で Android SDK インストールしたら aapt が実行できなかったり変な動きする

どうやら Formula の中で aapt コマンドを含む build-tool のインストールバージョンを 17.0.0 と決め打ちで、コマンド起動用シェルスクリプトを生成しているのが原因みたい。

```
    %w[aapt aidl dexdump dx llvm-rs-cc].each do |build_tool|
      (bin/build_tool).write <<-EOS.undent
        #!/bin/sh
        BUILD_TOOL="#{prefix}/build-tools/17.0.0/#{build_tool}"   # <-- ここ！！！！
        test -f "$BUILD_TOOL" && exec "$BUILD_TOOL" "$@"
        echo Use the \\`android\\' tool to install the \\"Android SDK Build-tools\\".
      EOS
    end
```

再インストールもめんどくさかったので、直接シェルスクリプトを修正し、`17.0.0` となっている箇所を実際にインストールした build-tool のバージョンに合わせて `18.1.1` と修正した。
∑Ω∂§… EmacsでMacOSXの環境・機種依存文字を一時的に有効にする

`C-c C-c C-q`と打つと一時的に次のような文字をOption/Altキーと組み合わせることで入力できるようにします。もう一度`C-c C-c C-q`で通常のOption/Altキーに戻します。 

åß∂ƒ©˙∆˚¬…æ
Ω≈ç√∫~µ≤≥÷
œ∑´®†¥¨ˆøπ“‘
¡™£¢∞§¶•ªº–≠« 

使う場面があるとは思えませんが...

```el
(defvar mac-modifier-stock mac-option-modifier)
(defun mac-special-character-toggle ()
  (interactive)
  (if (eq mac-modifier-stock mac-option-modifier)
      (progn
        (message "Mac Special Character ON")
        (setq mac-option-modifier nil))
    (message "Mac Special Character OFF")
    (setq mac-option-modifier mac-modifier-stock)))

(global-set-key (kbd "C-c C-c C-q") 'mac-special-character-toggle)
```

右側のOption/Altキーだけに適応させたい場合は次のようにします。

```el
(defvar mac-modifier-stock mac-right-option-modifier)
(defun mac-special-character-toggle ()
  (interactive)
  (if (eq mac-modifier-stock mac-right-option-modifier)
      (progn
        (message "Mac Special Character ON")
        (setq mac-right-option-modifier nil))
    (message "Mac Special Character OFF")
    (setq mac-right-option-modifier mac-modifier-stock)))

(global-set-key (kbd "C-c C-c C-q") 'mac-special-character-toggle)
```
ruby は インスタンス変数の確認に instance_variable_defined? を使う

計算済みの値があるので、インスタンスメソッドを実行せずに値を返したい。簡易メモ化。

計算済みならインスタンス変数にセット、それ以外はインスタンスメソッドを実行、という挙動を実装してみる。

python のデータの持ち方はハッシュだから、名前を確認すればインスタンス変数があるか確認できる。
ruby だとどうやるのかと思ったら、instance_variable_defined? というメソッドがあった。

```rb
class A
  def a=(a)
    @a = a
  end

  def a
    @a
  end
end

class B
  def a=(a)
    @a = a
  end

  def a
    return @a if instance_variable_defined?(:@a)
    "b"
  end
end

require 'minitest/unit'
require 'minitest/autorun'

class ATest < MiniTest::Unit::TestCase
  def test_undefined_instance_variable_is_nil
    a = A.new
    assert_equal nil, a.a
  end
end

class BTest < MiniTest::Unit::TestCase
  def test_undefined_instance_variable_is_constant
    b = B.new
    assert_equal "b", b.a
  end

  def test_gettable_instance_variable_after_set
    b = B.new
    b.a = "a"
    assert_equal "a", b.a
  end
end
```

```
`Run options: --seed 38869

# Running tests:

...

Finished tests in 0.001566s, 1915.7088 tests/s, 1915.7088 assertions/s.

3 tests, 3 assertions, 0 failures, 0 errors, 0 skips
```

名前が長いということは、使用を推奨されないということなのだろうか？

python は hasatter で何でもイケる。

```py
import unittest

class A(object):
    @property
    def a(self):
        return self._a

    @a.setter
    def a(self, a):
        self._a = a

class B(object):
    @property
    def a(self):
        if hasattr(self, "_a"):
            return self._a
        return "b"

    @a.setter
    def a(self, a):
        self._a = a

class ATest(unittest.TestCase):
    def test_undefined_instance_variable_is_error(self):
        a = A()
        self.assertRaises(AttributeError, lambda : a.a)

class BTest(unittest.TestCase):
    def test_undefined_instance_variable_is_constant(self):
        b = B()
        self.assertEqual("b", b.a)

    def test_gettable_instance_variable_after_set(self):
        b = B()
        b.a = "a"
        self.assertEqual("a", b.a)

unittest.main()
```
ループバック通信をngrepでキャプチャする

サーバ内でサービス感通信を行うと、ループバック通信となるので、単純にngrep実行してもキャプチャできない。

```
ngrep -d lo -W byline port 80
```

という感じで、`-d`オプションでループバック"lo"を指定すると、キャプチャできる。
Mac の VirtualBox で 'fail to open : /dev/vboxnetctl' と言われた場合


Mac を marvericks にバージョンアップした後、
VirtualBox で 'fail to open : /dev/vboxnetctl' と表示された。

調べたら、次を行えば良い。

$ sudo /Library/StartupItems/VirtualBox/VirtualBox restart

refs: https://forums.virtualbox.org/viewtopic.php?f=8&t=55347
RubyKokubanで画像を拡大アニメーションさせる


mrubyを使ってインタラクティブアプリケーションを作ることが出来ます。
インストール方法は[こちら](https://github.com/ongaeshi/rubykokuban-gem)をどうぞ。 → [[最新記事]](http://ongaeshi.hatenablog.com/entry/rubykokuban-image)

画像を拡大アニメーションさせてみます。

```ruby
def update
  @scale ||= 0.0
  @scale += 0.05
  @scale = 0.0 if @scale > 3.0
end

def draw
  @image ||= Image.load("sample.png")
  set_color(Color::White)
  @image.draw(0, 0, @image.width * @scale, @image.height * @scale)
end
```

update関数で@scaleメンバを増加させ、Image.drawにパラメータとして渡しています。

```
$ kokuban exec image003.rb
```

`@scale`のリミット値や変更速度を操作して遊んでみましょう。

![image004.png](http://cdn-ak.f.st-hatena.com/images/fotolife/t/tuto0621/20131021/20131021234835.gif)

## 目次
- [RubyKokuban Memo - 目次](http://ongaeshi.hatenablog.com/entry/rubykokuban-memo)
iTerm2 + Vim (MacVim-Kaoriya) + im_control で日本語入力固定モード

いつも iTerm2 で MacVim-Kaoriya 内の Vim を使って作業をしているが、＜C-^＞ での IM 切替が出来ない関係で im_control の日本語入力固定モードが使えていなかった。
IMCtrl を設定することで、何とか動いたのでメモ（.gvimrc での noimdisableactivate 設定は割愛）

```.vimrc
if has('mac')
  if has('gui_running')
    let IM_CtrlMode = 4
  else
    let IM_CtrlMode = 1

    function! IMCtrl(cmd)
      let cmd = a:cmd
      if cmd == 'On'
        let res = system('osascript -e "tell application \"System Events\" to keystroke (key code {104})" > /dev/null 2>&1')
      elseif cmd == 'Off'
        let res = system('osascript -e "tell application \"System Events\" to keystroke (key code {102})" > /dev/null 2>&1')
      elseif cmd == 'Toggle'
        let res = system('osascript -e "tell application \"System Events\" to keystroke (key code {55, 49})" > /dev/null 2>&1')
      endif
      return ''
    endfunction
  endif

  " 「日本語入力固定モード」のMacVimKaoriya対策を無効化
  let IM_CtrlMacVimKaoriya = 0
  " ctrl+jで日本語入力固定モードをOnOff
  inoremap <silent> <C-j> <C-^><C-r>=IMState('FixMode')<CR>
endif
```

AppleScript を使って切り替えを行っている。他に良い方法ありそうだけど良く分からない。
`git push` したら VPSサーバーと Bitbucketの両方に反映させる方法

この2つのまとめ+αです。

http://qiita.com/ironsand/items/cad715c0630d3e9f2df3
http://qiita.com/ironsand/items/cad715c0630d3e9f2df3

## 条件
Bitbucket
CentOS(さくらのVPS)


## やること
1. [ローカル] -`git push`-> [VPS の ベアリポジトリ] 
2. [VPS の ベアリポジトリ] <-`git pull`- [VPS のファイルを配置したい場所]
3. [VPS のファイルを配置したい場所] -`git push`-> [Bitbucket]

の3つを 1. を行うだけで後は勝手にやるように設定する。
「ベアリポジトリいらなくね？」という疑問に答えてくれる人を絶賛募集中

(Bitbucketからのhookでやる方法は`pull request`用のスクリプトを外部アクセスできる形で置くのが気持ち悪かったので辞めました。)

## 手順

1\. インストール

```
# git インストール
$ sudo yum -y install git git-daemon git-all
# ベアリポジトリを作成
$ mkdir -p ~/git-repos/foo.git
```

2\. ファイルを配置したい場所もgitで初期化してBitbucket を `remote origin` に追加しておく
やり方はお好きな方法でどうぞ。
一度ローカルから直接Bitbucketに上げておいて、それを`clone`するのが一番簡単かな？

3\.  pushを受け取ったあとの処理を書くので `hooks/post-receive` を編集

```bash:~/git-repos/foo.git/hooks/post-receive
pwd
cd /var/www/example.com/wp-content/themes/mytheme
pwd
git --git-dir=.git pull ~/git-repos/goo.git master
git --git-dir=.git push origin master
```

4\.  ローカルから push する

```
$ git init
$ git add .
$ git commit -m "initial"
$ git remote add origin ssh://username@hostname:port/home/username/git-repos/foo.git
$ git push origin master
```

とまあこんな感じです。
サーバーのベアリポジトリにpushされたら、サーバー上にある公開ディレクトリからpullする

Wordpressのテーマを`git push` で即時反映させて、なおかつBitbucketにバックアップ目的にpushするための環境を構築中

前の作業でVPS上に`git push` はできるようになったので、pushされたのをとりあえずWordpressの該当のテンプレートの置き場所にpullする方法を試してました。

http://qiita.com/ironsand/items/cad715c0630d3e9f2df3

全部やってから気づいたんですが、これって ベアリポジトリを作らずにサーバー上の普通のリポジトリにそのままpushすれば良かったのでは？サーバー上を直接編集することもないし。

…そんな事を考えましたがよくわかりません。

## やり方

`~/git-repos/wordpress-paw.git` にベアリポジトリを作って、

```wordpress-paw.git/hooks/post-receive
pwd
cd /var/www/blog.poligloto.info/wp-content/themes/paw
pwd
git --git-dir=.git pull ~/git-repos/wordpress-paw.git master
```

とまあ自分の場合はこんな感じにして、ローカルから `git push` すればちゃんと `git pull` も行われて最新状態に反映されました。

後はBitbucktにバックアップさせるだけですね！(すごくめんどくさくなってきてる。)

## 参考

gitのpost-receiveフックを使ってみる(全部ローカル) - プログラムとかののblog
http://d.hatena.ne.jp/pogin/20130202/1359784619
SpriteKit入門 -9-

ここからはSKSpriteNodeクラスについて見ていきます。

まず、もっとも簡単なテクスチャを使ったスプライトを見てみましょう。

前回までのHelloSceneクラスのcreateSceneContentsメソッドを下記のように書き換えてみましょう。

```objectivec:HelloScene.m
- (void)createSceneContents
{
    SKSpriteNode *spaceship = [SKSpriteNode spriteNodeWithImageNamed:@"Spaceship.png"];
    spaceship.position = CGPointMake(300,600);
    [self addChild:spaceship];
}
```

プロジェクトに適当な画像を追加します。ここではSpaceship.pngを追加しています。

実行すると、このような画面になります。

![実行結果](https://lh4.googleusercontent.com/-v-Q8vGoqLMc/UmfBvRM_ZtI/AAAAAAAAAfI/q5bTg82nRbY/w498-h648-no/spritekit_018.jpg "実行結果")

今回はここまで。