OmniAICreator/Qiita-1.07M huggingface dataset:
Rubyでクラスメソッドの定義方法色々

今までは`def self.hoge`って書いてたけど，`class << self ...`の方がまとまって見通しが良さそう．

```ruby
class A
  def A.class_method_one; end

  def self.class_method_two; end

  class << A
    def class_method_three; end
  end

  class << self
    def class_method_four; end
  end
end

def A.class_method_five; end

class << A
  def class_method_six; end
end
```
C++でeval() (int以外も使えるようにしてみた)

* [元ネタ : http://d.hatena.ne.jp/kura-replace/20110926/1317050052](http://d.hatena.ne.jp/kura-replace/20110926/1317050052 "C++ で eval() - 偏見プログラマの語り！")
* [元ネタ](http://d.hatena.ne.jp/kura-replace/20110926/1317050052)のだとintしか返せなかったのでいじってみた
* 戻り値を検出する方法が思い浮かばなかったので現状だと eval<typename>() って形になってる
* DLL使うからWindowsじゃないと動かない
* MinGW4.5.2、msvc10.0(VC++2010)で動作ほんのり確認
* MinGWならBoostも使えた(lexical_castしか試してないけど)
* 使い方は[元ネタ](http://d.hatena.ne.jp/kura-replace/20110926/1317050052)参照  テンプレート引数は第二引数に渡す「得たい戻り値の型」を指定する



```cpp:eval.hpp
#ifndef __ICL_EVAL_HPP_INCLUDED
#define __ICL_EVAL_HPP_INCLUDED

#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>
#include <windows.h>

#ifndef __ICL_EVAL_TEMP_NAME__
#define __ICL_EVAL_TEMP_NAME__ "______________________________________________"
#endif

namespace ICL{

template<typename RetT>RetT eval(const std::string& Source,const std::string& ReturnStatement){
    const std::string eval_temp_filename = __ICL_EVAL_TEMP_NAME__;
    std::ofstream o((eval_temp_filename+".cpp").c_str());
    o<<Source<<"\nextern \"C\" "
#ifdef _MSC_VER
    "__declspec(dllexport) "
#endif
    "decltype("<<ReturnStatement<<") "
    <<eval_temp_filename<<"(){return ("<<ReturnStatement<<");}"<<std::endl;
    o.close();

#ifdef _MSC_VER
    std::system(('"'+std::string(getenv("VS100COMNTOOLS"))+"..\\..\\VC\\bin\\vcvars32.bat\"").c_str());
    std::system(("cl /MD /LD "+eval_temp_filename+".cpp").c_str());
    std::remove((eval_temp_filename+".lib").c_str());
    std::remove((eval_temp_filename+".obj").c_str());
    std::remove((eval_temp_filename+".exp").c_str());
#endif
#ifdef __GNUC__
    std::system(("g++ -std=c++0x -static -shared -o "+eval_temp_filename+".dll "+eval_temp_filename+".cpp").c_str());
#endif
    std::remove((eval_temp_filename+".cpp").c_str());
    struct __{
        const std::string eval_temp_filename;
        HMODULE Dll;
         __() : eval_temp_filename(__ICL_EVAL_TEMP_NAME__),Dll(LoadLibrary((eval_temp_filename+".dll").c_str())){if(!Dll)throw GetLastError();}
        ~__(){FreeLibrary(Dll);std::remove((eval_temp_filename+".dll").c_str());}
        RetT operator()(){
            typedef RetT (*Func)();
            Func f=reinterpret_cast<Func>(GetProcAddress(Dll,eval_temp_filename.c_str()));
            if(!f)throw GetLastError();
            return f();
        }
    }f;
    return f();
}

template<typename RetT>RetT eval(const std::string& ReturnStatement){return eval<RetT>("",ReturnStatement);}

}//End : namespace ICL

#endif //__ICL_EVAL_HPP_INCLUDED

```
irc.freenode.net cheetsheet

nick の登録
`/msg nickserv register  <password> <email>`

ログイン（split したりしてセッションが切れた時）
`/msg nickserv identify  <password>`

自分の管理 channel の登録。
`/msg chanserv register #hoge`

chanservからなるとをもらう
`/msg chanserv op #hoge sotarok`

自動的に op する flag たてておく。
`/msg chanserv flags #hoge sotarok +O`

ちなみに tiarra 経由だと default の server に msg が飛んでしまうので、
`/msg chanserv@freenode ...`
のようにする必要がある
イメージファイルにXen Domain-Uを構築するときの注意点。


[&#91;Xen&#93;DomainUをさくっと作る方法](http://insilico.jognote.com/blog/2008/06/09/xendomainu%E3%82%92%E3%81%95%E3%81%8F%E3%81%A3%E3%81%A8%E4%BD%9C%E3%82%8B%E6%96%B9%E6%B3%95/ "jognote in silico -- Blog Archive") によると、

> disk では DomainU がハードディスクとして扱うためのイメージファイルを指定します。ここで指定したファイルは実際に存在しなければいけないので、インストーラを走らせる前に作成しておきます。
> 参考にしたCentOSのWikiの記述によると、virt-install では
> 
> > &#35; dd if=/dev/zero of=/srv/xen/mailserver.img oflag=direct bs=1M seek=2047 count=1
> 
> のようにして 2GB のファイルを作成する場合でも、作成する時点では最小限の大きさにしておいて、ファイルへの書き込みと共にサイズが成長していくような作り方をしているようですが、この方法で作成するとインストール中とか yum update してる時とかファイルサイズが大きくなるような作業をしている時に膨大な時間がかかります。確かOSのインストールに4時間ほどの時間がかかりました。なので
> 
> > &#35; dd if=/dev/zero of=/srv/xen/mailserver.img oflag=direct bs=1M count=2048
> 
> のようにして、あらかじめ所定の大きさのファイルを作成しておいたほうが快適に DomainU を使うことができます。

これを知らずに、count=1でイメージを作ったら、yum updateなんかがものすごく遅い…。

でも、以前からcount=1でイメージ作ってたんだけど、今回ほどは遅くなかったような気もする。

CPUの割り当てが少ない、というのは違いかもしれない。多めに割り当てれば少しはマシになるのだろうか…。
Rails 3.1でxxx_controller_spec.rbにURLリテラルを指定すると正しく認識されないものがある。


routes.rbに

```ruby
resources :users do
  get :show_detail, :on => :member
end  
```
と記述し、rake routesの結果に

```sh
show_detail_user GET    /users/:id/show_detail(.:format) {:action=>"show_detail", :controller=>"users"}
```

と含まれるのだが、

users\_controller\_spec.rbに

```ruby
get "/users/1/show_detail"
```

と書いた場合、bundle exec rspec spec/controllers/users\_controller\_spec.rb の結果が

 ActionController::RoutingError:
   No route matches {:controller=>"users", :action=>"/users/1/show\_detail"}
 
となってactionが正しくなくなってしまう。（意図するactionは"show_detail"）

```ruby
get "/users/:id/show_detail", :id => "1"
```

なども試したがダメだった。コントローラがルーティングに依存していないようになっているらしい。Rails 3.0.8で書かれた『Ruby on RailsによるWebアプリケーションスーパーサンプル』にはリテラルで書かれていたのだが、どう書くのが正しいのだろう？

環境は、
rails 3.1.0
rspec-rails 2.6.1

追記

```ruby
get :show_detail, :id => "1"
```

と記述すればとりあえずはよいらしい。ルーティングとコントローラのテストを独立させるべきということか。
オンラインソフトで、ソフトが起動できる期間をユーザー毎に設定したいのですが、定番の方法はないでしょうか。


・環境はWindows環境です（XP以降）。
・言語は、Visual Studioがサポートしている言語ならどれでもOKです。
・ソフト自体はオフラインで使用されます。（ネットワークを使った認証は不可です）
・期間は1年や半年といった単位です。
・認証はきつくなくても良いです。（例えば「PCの日付を変えたらいつまでも使える」ようなやり方でも問題ありません。）

説明が具体的になりすぎると、その情報を悪用する人がでてくる可能性があるので、ポインタだけ教えていただけないでしょうか。
include_path の解決された絶対 path を取得する。

`get_include_path()` を `PATH_SEPARATOR` で `explode()` した結果を foreach でまわして `file_exists()` 的なことをするひつようは、PHP 5.3 からなくなったわけですが。あまり知られてない（というかおととい知った）

```php:

<?php
$filename = stream_resolve_include_path('Hoge.php');

```
androidでresディレクトリに設置した動画ファイルの再生コード。

予めlayout.xmlでviewoViewを追加しておきます。

ただしapkの容量制限(16MB?)があるため、それほど大きな動画ファイルをapk内に設置するのは無理があるので、アプリケーション起動後、WEBから落とすかが必要と思います。

```java
VideoView videoView = (VideoView) findViewById(R.id.videoView1);
MediaController mediaController = new MediaController(this);
Uri videopath = Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.*****);
videoView.setVideoPath(videopath);
```
再生が完了した時の動作は、OnCompletionListenerを実装する。

```java
@Override
public void onCompletion(MediaPlayer mp) {
    // TODO Auto-generated method stub
    mp.seekTo(0);
    mp.start();
}
```
clojure でシェルスクリプトを実行したいのですが、何か方法は無いでしょうか？Palletを少しいじってみたのですが、Palletはシェルスクリプトを生成するだけでしょうか？実行する方法をご存じの方はいらっしゃいませんか？

clojure でシェルスクリプトを実行したいのですが、何か方法は無いでしょうか？Palletを少しいじってみたのですが、Palletはシェルスクリプトを生成するだけでしょうか？実行する方法をご存じの方はいらっしゃいませんか？
JavaScriptでデスクトップ通知を行うためのライブラリ. showメソッドにiconも追加しておきたいところ.


``` Notification.js
Notification = {
    initialized : false,
    NOT_ALLOWED: 1,
    NOT_SUPPORTED: 2,

    // 初期化. 利用前に必ず実行すること
    init: function() {
        if( typeof webkitNotifications === 'undefined' ) {
            return false;
        }
        this.initialized = true;
        if( typeof webkitNotifications.PERMISSION_ALLOWED === 'undefined' ) {
            webkitNotifications.PERMISSION_ALLOWED = 0;
            webkitNotifications.PERMISSION_NOT_ALLOWED = 1;
            webkitNotifications.PERMISSION_DENIED = 2;
        }
        if( typeof webkitNotifications.permissionLevel === 'undefined' ) {
            webkitNotifications.__defineGetter__('permissionLevel', function() {
                return this.checkPermission();
            });
            webkitNotifications.__defineSetter__('permissionLevel', function() {
            });
        }
        if( !webkitNotifications.createWebNotification ) {
            webkitNotifications.createWebNotification = webkitNotifications.createHTMLNotification;
        }
        return true;
    },

    // 作成したNotificationオブジェクトを返す
    create: function(title, message, icon) {
                if( !this.initialized ) {
                    if( !this.init() ) {
                        // ブラウザがNotification APIに対応していない.
                        throw Notification.NOT_SUPPORTED;
                    }
                }
                if( webkitNotifications.permissionLevel !== webkitNotifications.PERMISSION_ALLOWED ) {
                    //許可されていない
                    throw Notification.NOT_ALLOWED;
                } else {
                    return webkitNotifications.createNotification(icon, title, message);
                }
            },

    // ユーザにダイアログを表示する許可をもらう.
    // この関数はユーザが発生させたマウスイベント等の中でのみ正しく実行される.
    ask: function(f) {
             console.log("デスクトップ通知の許可をユーザに求めます。");
             webkitNotifications.requestPermission(f||function(){});
         },

    // Method show Notification.
    show: function(title, message, timeout) {
        timeout = timeout || 3000;    // default timeout is 3sec(=3,000msec)
        try {
            var notification = Notification.create(title, message, "");
            notification.ondisplay = function() {
                setTimeout(function(){
                    notification.cancel();
                    console.log("Notification close because timeout");
                }, timeout);
            };
            notification.show();
            console.log("Notification showing");
        } catch(e) {
            switch(e) {
                case Notification.NOT_ALLOWED:
                    Notification.ask();
                    break;
            }
        }
    }
};

```
gitsharpまたはlibgit2を使って、C#からgitリポジトリへのpushを行っているコードのサンプルを探しています！どうしても自作アプリからgitへのpushを行おうとしているのですが、どうしてもうまくいかないので。

gitsharpまたはlibgit2を使って、C#からgitリポジトリへのpushを行っているコードのサンプルを探しています！どうしても自作アプリからgitへのpushを行おうとしているのですが、どうしてもうまくいかないので。
複数人数で開発するときconfig/routes.rbがコンフリクトの温床になりがちなので、任意のファイルに分割したい。AppName::Application.routes.drawブロックを書いたファイルを作って、config/routes.rbを呼ぶ場所で同じように呼んでやればいいのかなぁ

複数人数で開発するときconfig/routes.rbがコンフリクトの温床になりがちなので、任意のファイルに分割したい。AppName::Application.routes.drawブロックを書いたファイルを作って、config/routes.rbを呼ぶ場所で同じように呼んでやればいいのかなぁ
registerEventListeners()はどこでよべばいいんだろう？

コンストラクタ内？
呼び出し元で 

```js
var foobar = new FooBar();
foobar.registerEventListeners();
```

みたいに直接呼んじゃう？ 

```javascript:FooBar.js

/**
 * @constructor
 */
var FooBar = function() {

};

FooBar.prototype = {

	/**
	 * イベントリスナ登録
	 */
	registerEventListeners: function() {
		var self = this;
		$(document).delegate('.foobar', 'click', function(event){ return self._foobarClickEventHandler(this, event); });
	},

	/**
	 * foobarクリック時のイベント
	 */
	_foobarClickEventHandler: function(foobar, event) {
		// ...
	}
};

```
大規模データでモデルの予測性能をチェックする関数


データが大規模になると、モデルの予測性能を調べるだけでもかなりの時間がかかってしまいます。そこでKsPlotの関数を使うと、データからサンプリングしながら性能をチェックし、プロットすることで、短時間で性能を可視化・評価することができます。以下のコードは100万サンプルのデータで予測性能をチェックしています。


```r:KsPlot.R
library(KsPlot)

set.seed(1)
x1   <- rnorm(1000000)
set.seed(2)
x2   <- rnorm(1000000)
set.seed(3)
y    <- 2*x1 + x2**2 + rnorm(1000000)

X1      <- data.frame(x1 = x1, x2 = x2)
X2      <- data.frame(x1 = x1, x2 = x2, x3 = x2**2)
y       <- y

set.seed(1)
KsResult1 <- KsamplePlot(X1, y)
```
virt-installを途中で中止するには、どうするのがベストなんだろう…？


Ctrl+] でコンソールを抜けて virsh shudown domname して virsh undefine domname で良いんだろうか。

上記のように、インストールをキャンセルして仮想サーバ定義も消す、というのを一度にやってくれるショートカットキーとかがあるんだろうか。

あと、上記のやり方だと、IDがリセットされないけれど、IDもリセットしたい時はどうするのだろう…。
CentOS 6.0をディスク構成指定してvirt-installでXen Dom-Uとしてインストールするには、どうすればいいんだろう…。


RHEL 6系からはtextインストールでディスク構成指定できなくなってるし、同じく6系ではVNCでGUIには対応してないらしいし…。

「OSのインストール」方面からのアプローチを模索するか、それとも「virt-installでのインストール手法」を模索するか、どちらがいいのやら。

それだけのためにDom-0にX入れてVirt-Managerってのもなぁ…それが確実と分かってるわけでもないし。
Qiitaでシンタックスハイライト可能な言語一覧

## 対応言語リスト
Qiita MarkdownのシンタックスハイライトにはRougeを利用しており、下記の対応言語リストに準じます。

[Languages](https://github.com/rouge-ruby/rouge/blob/master/docs/Languages.md)

順次対応を行っておりますが、リクエストは [Discussions](https://github.com/increments/qiita-discussions/discussions) までお願いします！


## コードブロックで言語を指定する方法

- コードブロック記法の後に言語名を指定してください。
- 言語名の表記は [Rougeに準じます。](https://github.com/rouge-ruby/rouge/blob/master/docs/Languages.md)
    - 基本的に補完は小文字で入力する必要があり、また一部の言語はファイルタイプでの入力が必要です。


（例）Rubyを利用する場合

~~~
```rb
brabrabra...
```
~~~

![Jan-27-2021 16-19-14.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/88/463643d0-9d81-4907-01a5-75b1022156b6.gif)


Qiita MarkdownについてはMarkdown記法 チートシートをご覧下さい。

http://qiita.com/Qiita/items/c686397e4a0f4f11683d


## Diffと各言語のシンタックスを同時に利用する方法
QiitaではDiff表示と各言語のシンタックスハイライトを同時に用いることができます。
利用する方法は以下の通りです。

- `diff_[言語名]`をシンタックスとして指定する
- 各行の始めで`+`, `-`を記述し、半角スペースをあける

これにより、各言語のシンタックスハイライトを用いながらDiffの表示も行うことができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158501/79f8ab8f-4caa-3aae-bec7-576ee2f50aff.png)

## 注意点

コードブロックの言語名に`plantuml`、`mermaid`を指定した場合、シンタックスハイライトではなくダイアグラムが表示されます。

ダイアグラムについては[Markdown記法 チートシート - Qiita](https://qiita.com/Qiita/items/c686397e4a0f4f11683d)をご覧ください。
以下のようなエラー画面が表示されてコメントが投稿できない場合は、どういった要因が考えられるでしょうか？


「あ」とかでは投稿できたんですが、ひょっとして内容が長すぎる？

```text
We're sorry, but something went wrong.
We've been notified about this issue and we'll take a look at it shortly.
```
Ctrl押しながらf/b上下スクロールするのをf押しながらj/kに置き換えれないかな

とりあえずはf押した後にj/k押したら動くようにしてみたけど気持ち悪い

```vim
nnoremap fj <C-f>                                                                   
nnoremap fk <C-b>
```
下のコードのように小文字を大文字にしてみたいんだけど "*str -= ..." のところでBus errorが出るのはなぜ



```c
char* str = "Hello World";
while(*str)
{
  if('a' <= *str && *str <= 'z')                                                  
        *str -= ('a' - 'A'); 
  str++;
}
```
モジュールを動的にロードする.



```py
def lazy_loader(name):
    """Loading function, class and module lazy."""
    try:
        mod = __import__(name)
    except:
        mod_list = name.split('.')
        mod = __import__('.'.join(mod_list[:-1]))

    components = name.split('.')
    for comp in components[1:]:
        mod = getattr(mod, comp)
    return mod

```
.vimrcの内容公開

あまり大したことはやってなく、ほんとに基本的な内容しかない。何かおススメの設定があれば教えてください。

```vim
" display
set number
set title
set showcmd

" color
syntax on
"colorscheme on

" Search
set ignorecase
set smartcase
set wrapscan
set hlsearch

" Edit
"set autoindent
set showmatch
set smartindent
set cindent

" Tab
set tabstop=4
set shiftwidth=4
set expandtab
set smarttab
set shiftround
set nowrap

" datetime
inoremap <Leader>c <C-R>=strftime('%Y-%m-%dT%H:%M:%S+09:00')<CR>

filetype plugin indent on

" insertモードでhjkl移動を利用する
imap <c-h> <Left>
imap <c-j> <Down>
imap <c-k> <Up>
imap <c-l> <Right>
```
propertyデコレータに簡易的に値をキャッシュするようにしたもの. 読み込みのみ. オブジェクトが削除されるまでキャッシュし続けるので注意.



```py
def cached_ro_property(f):
    cache = [None]
    def _cached_ro_property(*args, **kargs):
        if cache[0]:
            return cache[0]
        cache[0] = f(*args, **kargs)
        return cache[0]
    return property(_cached_ro_property)


from django.test import TestCase
import mox


class TestCachedRoProperty(TestCase):
    """Test for cached_ro_property decorator."""
    
    def setUp(self):
        self.m = mox.Mox()

    def tearDown(self):
        self.m.UnsetStubs()
        self.m = None

    def test_call_1(self):
        """Simple call."""

        from decorators import cached_ro_property

        # Procuder function that should be called once.
        producer = self.m.CreateMockAnything()
        producer().AndReturn(30)

        class C(object):
            @cached_ro_property
            def f(self):
                return producer()

        self.m.ReplayAll()
        c = C()

        self.assertEqual(c.f, 30)
        self.assertEqual(c.f, 30)
        self.m.VerifyAll()

    def test_call_2(self):
        """Check that property function reference self."""

        from decorators import cached_ro_property

        # Procuder function that should be called once.
        producer = self.m.CreateMockAnything()
        producer().AndReturn(30)

        class C(object):
            @cached_ro_property
            def f(self):
                return self.g()
            def g(self):
                return producer()

        self.m.ReplayAll()
        c = C()

        self.assertEqual(c.f, 30)
        self.assertEqual(c.f, 30)
        self.m.VerifyAll()

```
Gemfileでのgem指定色々

レポジトリの特定ブランチを使いたいとか，ローカルでちょっと変更して試したいときのGemfileの変更方法．
変更してbundleを実行すればよい．
ref: https://bundler.io/man/gemfile.5.html

```ruby
# あるレポジトリの特定ブランチ
gem 'albino', :git => 'git://github.com/yaotti/albino.git',
              :branch => "enable-g-flag"

# 追記: GitHubのmasterならこういう指定もできる(bundler v 1.1以降)
gem 'rails',  :github => 'rails/rails'

# ローカルにあるgem
gem 'albino', :path => '/Users/you/path/to/albino'
```
拡張子と言語のマッピングが欲しかったのでちょっとしたelisp書いた



```scm
(mapcar (lambda (pair)
          (insert (concat (car pair) ":"
                           (if (symbolp (cdr pair))
                               (symbol-name (cdr pair))
                             "unknown")
                           "\n")))
     auto-mode-alist)

;; outputs
;; \.md:markdown-mode
;; \.mk$:sh-mode
;; \.scm$:gauche-mode
;; \.rb$:ruby-mode
;; ...
```
gitで変更の一部のみコミット対象とする/変更を取り消す

ワークツリーに加えた変更のうち一部分だけをaddしたいときには
git add -p
すると，変更部分ごとにaddするかどうかを選択できる．
逆にgit checkout -pで，一部の変更を消す(正確にはaddされていない=unstagedな変更から消す)ことができる．
デバッグプリントのコードを消したいときなどに便利．

どちらもyやnなどで選択した後に毎回enterを押す必要があり面倒だが
git config --global interactive.singlekey true
を実行しておくと，yやnなどを押した時点で決定できる．

```sh
# 選択してgit addするかどうか決める
git add -p [file_or_dir]
# addされてない変更それぞれに対してgit checkout
git checkout -p [file_or_dir]
# git add/checkout -p時に，エンターでの決定を省略する
git config --global interactive.singlekey true

```
gitのブランチ移動

cd - のように，引数に-を指定すると直前にいたブランチに戻れる


追記：
git co master && git merge - みたいな使い方もできる．便利．
http://twitter.com/#!/jch2355/status/131665048170008576

```sh
git co master
git co some-feature
git co - # => masterに移動
git co - # => some-featureに移動
```
Rails3で部分テンプレート中においてxxx_pathというビューヘルパーが使用できない


ビューテンプレート 
app/views/tasks/index.html.erb 
から

```erb
<% @tasks.each do |task| %>
  <%= render task %>
<% end %>
```

のようにして部分テンプレート _task.html.erbを表示させたときに、部分テンプレート内で

```rb
link_to 'Show', task
```

と書くと、

"/tasks/1"

というRESTful URLではなく、

"/task.1"

といったURLが生成されてしまう。

```rb
task_path(task) 
url_for(task)
```

でも同様で、

```rb
url_for(:controller => 'tasks', :action => 'show', :id => task[:id])
```

のように、controllerとactionを指定すれば、正常なURLが生成される。
HPのサーバ機を新たに設定して、CentOS5.7を入れようとしているのだけど、HP用ソフトウェアについて、どれを導入したら良いのか迷ってる…。


別に導入しなくても問題なく稼働するのは（経験上）分かってるけれど、逆に言うと、導入したらどんな良いことがあるかも理解していないだけなわけで…。


a) 付属のSmartStart CD(x86_64) の./compaq/csp/linuxにあるもの。（これは何と言う名称なんだろう…？）
b) RHEL 5用の PSP（ProLiant Support Pack for Red Hat Enterprise Linux 5 (x86_64) Ver.8.73）
c) RHEL 5用の SPP（Service Pack for ProLiant - ProLiant ML/DL/SL Red Hat Enterprise Linux Server Pack Ver. 2011.09.0）
d) RHEL 5用にリストアップされているけど、汎用っぽい SPP（HP Service Pack for ProLiant Ver. 2011.09.0）
e) CentOS 5用の PSP（ProLiant Support Pack for CentOS 5（i386およびx86_64） Ver. 8.70）


まず、CentOS用かRHEL用かという以前に、PSPかSPPなのかということで大いに悩む。

PSPとSPPの違いについては、SPPの説明[ http://goo.gl/Bis1w ]を読めば、PSPやその他のツールなどをAll-in-Oneにしたものなんだろうな、とは何となく分かる。

けれど、そこで思うのは、「こういうのって、All-in-Oneパッケージの方がバージョン対応が遅れるんじゃね？」ということなんだよな…。

SPPがPSPを含んでいるとして、知りたいのは、上記に挙げられたSPPは、一体どのバージョンのを含んでいるのか、ということになる。

と、ここで、「あ、サポセンに聞けばいいのか」と思い当たる。

でも、これくらいの情報、絶対どこかに書いてそうなんだよなぁ…。
オフライン/オンラインのイベントを捕捉する



```js
// オンラインになったときに呼ばれるイベント
window.addEventListener("onLine", function(e) {
     // Somethiing
}, false);

// オフラインになったときに呼ばれるイベント
window.addEventListener("offLine", function(e) {
     // Something
}, false);

```
要素の表示状態が変化したときに投げられるイベント. GDD11jpで聞きながら書いたコードなので動くかどうかは分からないがメモしておく.



```js
document.addEventListener('visibilityChange', function(e) {
     console.log("hidden: " + document.hidden, "starge: " + document.visibilityState);
     // visibilityState: 
}, false);

```
『 SJIS is Windows-31J 』検証 - Ruby 1.9.3p0


!! コードが表示されないのでpastebinに書いた !!
!! 文字コードがCP932だと、もしかしてダメ？  !!

http://pastebin.com/68Q30Mu8

おー、Encoding::UndefinedConversionErrorがでない。
EmEditorも『# coding: SJIS』よるエンコード検出機能が動くようになった。

OS: Windows XP SP3

```Ruby
# coding: SJIS
# ruby 1.9.3p0 (2011-10-30) [i386-mingw32]

puts "8160:WAVE DASH            " << "～".encode("CP932").prepend("[ ").concat(" ]")
puts "8161:DOUBLE VERTICAL LINE " << "∥".encode("CP932").prepend("[ ").concat(" ]")
puts "817C:MINUS SIGN           " << "－".encode("CP932").prepend("[ ").concat(" ]")
puts "8191:CENT SIGN            " << "￠".encode("CP932").prepend("[ ").concat(" ]")
puts "8192:POUND SIGN           " << "￡".encode("CP932").prepend("[ ").concat(" ]")
puts "81CA:NOT SIGN             " << "￢".encode("CP932").prepend("[ ").concat(" ]")
# => 8160:WAVE DASH            [ ～ ]
# => 8161:DOUBLE VERTICAL LINE [ ∥ ]
# => 817C:MINUS SIGN           [ － ]
# => 8191:CENT SIGN            [ ￠ ]
# => 8192:POUND SIGN           [ ￡ ]
# => 81CA:NOT SIGN             [ ￢ ]

```
git submoduleの追加と削除



```sh
# path/to/reposに外部リポジトリを追加
> git submodule add git@github.com:account/repos.git path/to/repos

# 削除は .git/config and .gitmodules から[submodule "path/to/repos"]を削除．その後
> git rm --cached path/to/repos

```
SimpleXMLのSimpleXMLElement::asXML()をきれいにインデントする関数

```php
<?php
/**
 * SimpleXMLのasXML()をきれいにインデントする関数
 * @package    Sites
 * @author     Suin <suinyeze@gmail.com>
 * @copyright  2011 Suin
 * @license    MIT License
 */
$xml = '<?xml version="1.0"?><root><foo>FOO</foo><bar /><baz><hoge>HOGE</hoge><fuga /><!-- Comment --><piyo><![CDATA[CDATA desuyo!]]></piyo></baz><!-- Comment --></root>';

echo cleanUpXML($xml);

function cleanUpXML($string)
{
	$string = preg_replace("/>\s*</", ">\n<", $string);
	$lines  = explode("\n", $string);
	$string = '';
	$indent = 0;

	foreach ( $lines as $line )
	{
		$increment = false;
		$decrement = false;

		if ( preg_match('#<\?xml.+\?>#', $line) == true )
		{
			// <?xml … 
		}
		elseif ( preg_match('#<[^/].+>.*</.+>#', $line) == true )
		{
			// Open Tag & Close Tag
		}
		elseif ( preg_match('#<.+/>#', $line) == true )
		{
			// Self-closing Tag
		}
		elseif ( preg_match('#<!.*>#', $line) == true )
		{
			// Comments and CDATA
		}
		elseif ( preg_match('#<[^/].+>#', $line) == true )
		{
			// Open Tag
			$increment = true;
		}
		elseif ( preg_match('#</.+>#', $line) == true )
		{
			// Close Tag
			$decrement = true;
		}
		else
		{
			// Others
		}

		if ( $decrement === true )
		{
			$indent -= 1;
		}

		$string .= str_repeat("\t", $indent).$line."\n";

		if ( $increment === true )
		{
			$indent += 1;
		}
	}

	return $string;
}
```

実行結果

```xml:結果
<?xml version="1.0"?>
<root>
	<foo>FOO</foo>
	<bar />
	<baz>
		<hoge>HOGE</hoge>
		<fuga />
		<!-- Comment -->
		<piyo>
			<![CDATA[CDATA desuyo!]]>
		</piyo>
	</baz>
	<!-- Comment -->
</root>
```
svnのブランチ名をプロンプトへ

`__git_ps1`と大体同じように使える

```bash
$ __my_svn_ps1 [SVN:%s]
```

```bash
__my_parse_svn_branch2() {
    local LANG=C
    local svn_url=$(svn info 2>/dev/null | sed -ne 's#^URL: ##p')
    local svn_repository_root=$(svn info 2>/dev/null | sed -ne 's#^Repository Root: ##p')
    echo ${svn_url} | sed -e 's#^'"${svn_repository_root}"'##g' | awk '{print $1}'
}

__my_svn_ps1(){
    local svn_branch=$(__my_parse_svn_branch2)
    test "${svn_branch}" == "" || echo ${svn_branch} | xargs printf "$1"
}
```

参考
* <http://hocuspokus.net/2009/07/add-git-and-svn-branch-to-bash-prompt/>
APIの公開

Railsでapiを公開して、domain.com/OOO という形でOOOを使えるようにしてアプリを作れるようにしたいのですが、まずは自分でこの形でアプリを作ってみたいと思っています。
あるアプリAでAPIを公開して，別のアプリBからそのアプリAのデータを使うというイメージです。
APIの公開というのがどういった形で行ったらいいのか、いまいちよくわかりません。
1. 具体的な方法
2. 参考資料
を教えていただけませんか？
Apacheの再コンパイル時に「libexpat.so: could not read symbols: File in wrong format.」

ApacheにSSLを有効化して再コンパイルしてインストールし直そうとしたら、表題のようなエラーが…。

これだけなら、検索したらすぐに出てくるエラー内容で、対策も決まっている。
configureオプションで --with-expat=builtin とか、--libdir=/usr/lib64 がそれだ。

だけど問題は、初回のインストール時には出ていなかったし、さらにもう一度インストールし直してるんだけど、その時にも出ていない。

それから今までの間の何らかの変化が、エラーを呼び込んでいる…。

しかも、configureオプションでは全然対策できない。エラーのまま。

openssl{,-devel}は入ってるし、expat{,-devel}も入ってる。

なぜだろう…。
困った。

###今回の参考URL

- http://blogs.yahoo.co.jp/airmikan/27115552.html

- http://www.tatsuyoshi.net/toyota/tech/200806.html#0603

- http://kjirou.sakura.ne.jp/wiki_mirror/?a/Subversion%A4%C8Apache%A4%C7Web%A5%EA%A5%DD%A5%B8%A5%C8%A5%EA%A4%F2%BA%EE%C0%AE

- http://d.hatena.ne.jp/yohei-a/20100226/1267156642
plackapp

    #!/usr/bin/env perl
    use strict;
    use Plack::Runner;
    
    my ($app, $args) = split(/=/, shift(@ARGV), 2);
    
    if ($app =~ /^\+(.+)$/) {
        $app = $1;
    } else {
        $app = "Plack::App::$app";
    }
    
    my $runner = Plack::Runner->new;
    $runner->parse_options('-M' => $app, '-e' => "new $app $args", @ARGV);
    $runner->run;
    
    __END__
    
    =head1 NAME
    
    plackapp
    
    =head1 SYNOPSIS
    
    plackapp Directory
    
    plackapp 'Directory={root=>q(..)}' -p 9999
Webview(ScrollView)のフェード(端のグラデーション)の色を変更する

webviewを継承したクラスを作成してgetSolidColorで指定する。

```java:webview.java
webview = new _webview(this);
class _webview extends WebView {

		public _webview(Context context) {
			super(context);
			// TODO Auto-generated constructor stub
		}
		  @Override
		  public int getSolidColor()
		  {
		    return Color.BLACK;
		  }
}
```
Railsでのpryコマンド利用設定&実行例

**2012/05/30 pry-railsを使うよう編集**

pry: http://pry.github.com/
pry-rails: https://github.com/rweng/pry-rails

## インストール
`gem install pry pry-doc pry-rails`
pry-docはコアメソッド(Cで実装されているものなど)の情報を見るのに必要．

## Railsで利用する

```ruby:Gemfile
group :development do
  gem 'pry'
  gem 'pry-doc'
  gem 'pry-rails'
end
```

以上をGemfileに書き，`bundle`を実行すれば`rails c`でpryが実行されるようになる．

## 実行例
以下のようにクラスやオブジェクトを渡り歩いて色々操作できる．

```text:pry-sample.log
$ rails c
[1] pry(main)> cd Item # Itemクラスに移動する
[2] pry(Item):1> self # self: Itemクラス
=> Item(id: integer, user_id: integer, created_at: datetime, updated_at: datetime, ...)
[3] pry(Item):1> first # Item.first
=> #<Item id: 1, user_id: 1, created_at: "2011-11-04 14:32:09", updated_at: "2011-11-04 14:32:09",  ...>
[4] pry(Item):2> cd first # Item.firstに移動する
[5] pry(#<Item>):3> self # Item.first
=> #<Item id: 1, user_id: 1, created_at: "2011-11-04 14:32:09", updated_at: "2011-11-04 14:32:09", ... >
[6] pry(#<Item>):3> user
=> #<User id: 1, url_name: "yaotti", ...>
[7] pry(#<Item>):3> nesting # 移動した跡を見る
Nesting status:
--
0. main (Pry top level)
1. Item
2. #<Item>
[8] pry(#<Item>):3> .ls # shellのコマンドを実行するときは先頭に.を付ける
Capfile         Guardfile       Rakefile        config          doc             public ...
[9] pry(#<Item>):3> ^D # ctrl-dやexitを実行すると，1つ前のスコープに戻る
[10] pry(Item):2>
```

## ランタイムにpry実行
ソースコード内に`binding.pry`を仕込むと，実行時にその行のスコープでpryが実行される．

## その他
show-methodやedit-methodコマンドなども便利．詳しくは https://github.com/pry/pry/wiki を参照．
http://qiita.com/items/2b36068cdf2e40e75c2d もまとまっている
HTTP_ACCEPT_LANGUAGEをパースする関数

```php
<?php
$cases = array(
	'ja',
	'ja-jp',
	'ja;q=1',
	'da, en-gb;q=0.8, en;q=0.7',
);

foreach ( $cases as $case )
{
	$acceptLanguages = parse_accept_language($case);
	echo 'CASE: '.$case.PHP_EOL;
	var_dump($acceptLanguages);
}

function parse_accept_language($acceptLanguage)
{
	preg_match_all('/(?P<langcode>[a-z-]+)(?:;q=(?P<quality>[0-9\.]+))?/', $acceptLanguage, $matches);

	foreach ( $matches['quality'] as &$quality )
	{
		if ( $quality === '' )
		{
			$quality = 1.0;
		}
		else
		{
			$quality = floatval($quality);
		}
	}

	$acceptLanguages = array_combine($matches['langcode'], $matches['quality']);

	return $acceptLanguages;
}
```
結果

```

CASE: ja
array(1) {
  ["ja"]=>
  float(1)
}
CASE: ja-jp
array(1) {
  ["ja-jp"]=>
  float(1)
}
CASE: ja;q=1
array(1) {
  ["ja"]=>
  float(1)
}
CASE: da, en-gb;q=0.8, en;q=0.7
array(3) {
  ["da"]=>
  float(1)
  ["en-gb"]=>
  float(0.8)
  ["en"]=>
  float(0.7)
}
```
Fast Enumeration で使う変数のスコープ

for in ループにスコープ外の変数を指定して、最後の項目を取得しようとしてもうまくいかない。ループを終えたときには nil になっている。

```objc
    NSArray *ary=[NSArray arrayWithObjects:@"a", @"b", @"c", nil];
    id item=@"test start";
    id other=nil;
    for (NSInteger i = 0; i<[ary count]; i++) {
        item=[ary objectAtIndex:i];
    }
    NSLog(@"for = %@", item); // for = c
    item=@"for end";
    for (item in ary) {
        item=item;
        other=item;
    }
    NSLog(@"for in = %@", item); // for in = (null)
    NSLog(@"other = %@", other); // other = c
```
Webview(ScrollView)のフェード(端のグラデーション)を消す

webview.setVerticalFadingEdgeEnabled(false);

このページが詳しい。
http://wikiwiki.jp/android/?UI%A5%B3%A5%F3%A5%DD%A1%BC%A5%CD%A5%F3%A5%C8%2FView
[Revised] 値をキャッシュするpropertyデコレータ

以前に書いたスニペットの書き直し. 一度読みだしたプロパティはオブジェクトが破棄されるまで保持し続けます. そういう仕様です. 

デコレータ変数にキャッシュバックエンドを指定して, ちゃんとしたキャッシュを使う様にも書けるね
あとでやってみよう

```python:dec.py
from functools import wraps
import mox
from unittest import TestCase

def cached_property(f):
    prefix = '_cached_property_'
    @wraps(f)
    def _cached_property(self):
        key = prefix + f.__name__
        if hasattr(self, key):
            return getattr(self, key)
        value = f(self)
        setattr(self, key, value)
        return value
    return property(_cached_property)


class TestCachedProperty(TestCase):
    def setUp(self):
        self.m = mox.Mox()

    def tearDown(self):
        self.m.UnsetStubs()
        self.m = None

    def test_call_1(self):
        """Simple call."""

        # Procuder function that should be called twice.
        producer = self.m.CreateMockAnything()
        producer().AndReturn(30)
        producer().AndReturn(101)
        producer().AndReturn(None)
        producer().AndReturn(0)
        producer().AndReturn('')

        class C(object):
            @cached_property
            def f(self):
                return producer()

        # Try
        self.m.ReplayAll()
        c = C()
        c2 = C()
        c3 = C()
        c4 = C()
        c5 = C()

        # Verify
        self.assertEqual(c.f, 30)
        self.assertEqual(c.f, 30)
        self.assertEqual(c._cached_property_f, 30)
        self.assertEqual(c2.f, 101)
        self.assertEqual(c2.f, 101)
        self.assertEqual(c2._cached_property_f, 101)
        self.assertEqual(c3.f, None)
        self.assertEqual(c3.f, None)
        self.assertEqual(c3._cached_property_f, None)
        self.assertEqual(c4.f, 0)
        self.assertEqual(c4.f, 0)
        self.assertEqual(c4._cached_property_f, 0)
        self.assertEqual(c5.f, '')
        self.assertEqual(c5.f, '')
        self.assertEqual(c5._cached_property_f, '')
        self.m.VerifyAll()

        return

    def test_call_2(self):
        """Check that property function reference self."""

        # Procuder function that should be called once.
        producer = self.m.CreateMockAnything()
        producer().AndReturn(30)
        producer().AndReturn(101)

        class C(object):
            @cached_property
            def f(self):
                return self.g()
            def g(self):
                return producer()

        # Try
        self.m.ReplayAll()
        c = C()
        c2 = C()

        # Verify
        self.assertEqual(c.f, 30)
        self.assertEqual(c.f, 30)
        self.assertEqual(c._cached_property_f, 30)
        self.assertEqual(c2.f, 101)
        self.assertEqual(c2.f, 101)
        self.assertEqual(c2._cached_property_f, 101)
        self.m.VerifyAll()

        return
```
Time::DATE_FORMATS

```ruby:config/initializers/time_formats.rb
Time::DATE_FORMATS[:simple_time]     = lambda {|time| time = time.to_datetime; "#{time.hour}:#{sprintf('%02d', time.minute)}" }
Time::DATE_FORMATS[:simple_datetime] = lambda {|time| time = time.to_datetime; "#{time.month}/#{time.day} #{time.hour}:#{sprintf('%02d', time.minute)}" }
```
```ruby
user.created_at.to_s(:simple_time)     #=> "0:00"
user.created_at.to_s(:simple_datetime) #=> "11/14 0:00"
```
Rails3.1でroutes.rbファイルを分割する

複数人数で開発するときroutes.rbはコンフリクトの温床になりがちなので、分割する方法を調べた。

まずどんなフォルダ名でもいいはずだけど無難にmkdir config/routesなどをして、その下にroutes.rbの中身を一部切り出してやる。書式はroutes.rbとまったく同じ。

```ruby:config/routes/omniauth.rb
 MyApp::Application.routes.draw do                                                                                                                                                            

  match '/auth/:provider/callback' => 'sessions#create'
  match '/auth/failure' => 'sessions#failure'
  match '/signout' => 'sessions#destroy', :as => :signout

end
```

application.rbでconfig.pathsを開き、切り出したファイルを、Railsがroutesとして認識するファイル一覧に追加する。

```ruby:config/application.rb
 config.paths["config/routes"] << "config/routes/omniauth.rb" 
```
JavaScriptの正規表現

```string.replace(/[ｱ-ﾝ]/g, "")```では, JavaScriptは全ての半角カナを取り除くことはできない. 実際に, ```"ｱｲｳｴｵｶｷｸｹｺｻｼｽｾｿﾀﾁﾂﾃﾄﾅﾆﾇﾈﾉﾊﾋﾌﾍﾎﾏﾐﾑﾒﾓﾔﾕﾖﾗﾘﾙﾚﾛﾜｦﾝｧｨｩｪｫｬｭｮｯｰ".replace(/[ｱ-ﾝ]/g, "")="ｦｧｨｩｪｫｬｭｮｯｰ"```となってしまう. 

では全ての半角カナを取り除くにはどうするか？

```string.replace(/[ｦ-ﾝ]/g, "")```としてやればいい. 奇妙なようにも見えるのだが.
Perlでたらいまわし関数

- See: [竹内関数 - Wikipedia](http://ja.wikipedia.org/wiki/%E7%AB%B9%E5%86%85%E9%96%A2%E6%95%B0)

```perl:tarai.pl
#!/usr/bin/env perl
use strict;
use warnings;

my $count = 0;

sub tarai {
    my ( $x, $y, $z ) = @_;

    $count++;
    warn "$count: tarai($x, $y, $z)\n";

    if ( $x <= $y ) {
        return $y;
    }
    else {
        return tarai(
            tarai( $x - 1, $y, $z ),
            tarai( $y - 1, $z, $x ),
            tarai( $z - 1, $x, $y )
        );
    }
}

my @args = ( @ARGV >= 3 ) ? @ARGV : ( 10, 5, 0 );

print tarai(@args), "\n";
```
文字列にキーワードが含まれるか判定する略記法

```JavaScript
if (~string.indexOf(keyword)) {
  // found
} else {
  // not found
}
```

- `String.indexOf()` は引数のキーワードが見つからなかったとき -1 を返す
- Bitwise NOT演算子 `~` はオペランドを符号付き32ビット整数とみなしてビットを反転させる
- `~(-1) === 0` であり、Bitwise NOTが 0 になるのはこれのみ
- したがって上記のコードは `indexOf()` が -1 のとき = キーワードが見つからなかったときのみ else 節を実行する!
JavaScriptでToastを表示させる

下記JavaScriptを定義した上で, ```showToast("hogehoge", 5);```とすれば, 5秒間だけトーストスタイルで"hogehoge"が表示される

``` JavaScript:Toast.js
////
//// Show Toast Style Message From JavaScript.
///////////////////////////////////////////////////////////////////////////////////////
var timer;
var toastElement;

///
/// Method For Show Toast Style Message
/// @param message	Meesage String 
/// @param second	Second For Message Showing. Or Default Setting Time(=3second)
///
function showToast( message, second ) {
	second = second || 3;
	var divElement = document.createElement("div");
	var spanElement = document.createElement("span");
	setToastStyle(divElement, spanElement);
	spanElement.innerText = message;
	divElement.appendChild(spanElement);

	document.body.appendChild(divElement);

	// Adjust Message Show Place
	divElement.style.position = "absolute";
	divElement.style.left = (window.innerWidth/2 - divElement.offsetWidth/2) + "px";
	divElement.style.top = (window.innerHeight*3/4) + "px";
	toastElement = divElement;

	var from = 0;
	var distance = 0.8;
	var duration = 1000;
	var begin = new Date() - 0;
	var id = setInterval(function() {
			var time = new Date() - begin;
			var current = easing(time, from, distance, duration);
			if( time > duration ) {
				clearInterval(id);
				current = from + distance;

				// Remove Toast From Display
				timer = setTimeout("removeToast()", second * 1000);
			} else {
				toastElement.style.opacity = current;
				toastElement.style.transparent = current;
			}
	}, 10);
}

///
/// Style Setting For Toast Style Message.
///
function setToastStyle(divElement, spanElement) {
	divElement.style.padding = "10px 70px";
	spanElement.style.padding = "3px";
	divElement.style.backgroundColor = "#f0e68c";
	divElement.style.borderRadius = "1em";
	divElement.style.border = "1px solid red";

	divElement.style.opacity = 0;
	divElement.style.transparent = 0;
	
}

///
/// Remove Toast From Display
///
function removeToast() {
	if( toastElement ) {
		var from = 0.8;
		var distance = -0.8;
		var duration = 1000;
		var begin = new Date() - 0;
		var id = setInterval(function() {
				var time = new Date() - begin;
				var current = easing(time, from, distance, duration);
				if( time > duration ) {
					clearInterval(id);
					current = from + distance;
					document.body.removeChild(toastElement);
					toastElement = null;
				} else {
					toastElement.style.opacity = current;
					toastElement.style.transparent = current;
				}
		}, 100);
	}
}

function easing( time, from, distance, duration ) {
	return distance * time / duration + from;
}
```
RSpecにおける letやlet!とインスタンス変数の使い分け

インスタンス変数は定数代わりでかつメモ化するほどコストが高くない場合。

letは遅延評価してほしいときやメモ化する必要があるほどコストが高い場合。

let!はdescribe/contextごとに評価してほしい場合。

このルールで書いてすごくきれいにコード書けてガッツポーズした。
*.gemspecで追加した依存gemのrequireをGemfileで指定する

 * Bundlerは*.gemspecで定義された依存gemを読み込むことができる
 * gemの中にはgem名とrequireするときの名前が違うものがある
 * Gemfileでrequireするときの別名を指定することができる

*.gemspecで定義した依存gemを読み込むときの別名をGemfileで指定することができます。

```ruby:*.gemspec
Gem::Specification.new do |s|
  # ...
  s.add_development_dependency "activemodel"
  # ...
end
```

```ruby:Gemfile
source :rubygems
gemspec # load from *.gemspec

group :development do
  # *.gemspecでdevelopment dependencyとして定義されたgemは
  # Bundlerの:development groupに属する
  gem 'activemodel', require: 'active_model'
end
```

*.gemspecで適切に依存gemをグループ分けするとたいへんべんりでよいです。
RailsやSinatraでModelの制約をもとにHTML5の制約属性値を生成する

ようなアイデアを実現するライブラリって既にあるんでしょうか。ちょっと調べたのですが見つからなかったです。

最近、Padrinoというウェブアプリケーション・フレームワークでそういうことを実現するgemを書いた ([Padrino::Validation::HTML5](https://github.com/aereal/padrino-validation-html5)) のですが、既存の似たようなライブラリがあればぜひ参考にしたいので、情報あればよろしくおねがいします。

もしもなさげでしたら、Railsにportする人とか大募集です。
使ってないポートを取得する (Perl)

ref: [使ってないポートを取得する](http://qiita.com/items/992)

    #!/usr/bin/env perl
    use strict;
    use warnings;
    use v5.14;
    use IO::Socket::INET;

    sub empty_port () {
        my $sock = IO::Socket::INET->new(
            Prot   => 'tcp',
            Listen => 1,
            (($^O eq 'MSWin32') ? () : (ReuseAddr => 1)),
        );
        my $port = $sock->sockport;
        $sock->close;
        $port;
    }

    say empty_port;
Google Reader の新しいデザインで余白を小さくして11インチでも快適にする

11インチだと現状、余白が大きすぎて情報の一覧性が乏しくなるので、User Style で調整。だいぶ見やすくなった。

```css:
#top-bar {
  height: 46px;
}
#search {
  padding: 9px 0;
}
#viewer-header {
  height: 35px;
}
#entries.list .entry .collapsed {
  padding: 2px 0;
}
```
XXmallocのメモリ管理アルゴリズムについてわかりやすい記事

dlmalloc, tcmalloc, jemallocについて，以下の各記事を読めば各mallocのアルゴリズムはわかるはず．

## dlmalloc
Linuxの一部やAndroidのDalvik VMで利用されている．シンプルながらうまく考えられている．
チャンク(連続空き領域1つ)の境界と構造体の境界が違う所が罠．
http://g.oswego.edu/dl/html/malloc.html
http://mkosaki.blog46.fc2.com/blog-entry-241.html にわかりやすい講演資料が，と思ったら動画がprivateになってる…


## tcmalloc
thread-caching malloc. Googleで利用されている．
スレッドがキャッシュ持つのでfreeしてもメモリ利用量が減らない!のが罠．
http://goog-perftools.sourceforge.net/doc/tcmalloc.html

## jemalloc
Facebookが高速化やモニタ機能追加などの改良を加えて利用している．キャッシュ構造を頑張ってる印象
https://www.facebook.com/note.php?note_id=480222803919
**追加:** 和訳 by @repeatedly: http://d.hatena.ne.jp/repeatedly/20110110/1294634486
論文： https://docs.google.com/viewer?url=http://www.unixhowto.de/docs/jemalloc.pdf&pli=1
Prolog入門1

``` Prorog
father(naoyuki, hyogo).
father(saburo, naoyuki).
father(saburo, shinji).
father(yoshihisa, hisako).
mother(hisako, hyogo).
mother(yoko, naoyuki).
mother(yoko, shinji).
mother(nobuko, hisako).
```

のように家族構成をPrologで定義し, `father(F, C)`を実行すると, 定義したデータから, father(F, C)に一致するF, Cの組がすべて得られる.

``` Prolog
F = naoyuki,
C = hyogo ;
F = saburo,
C = naoyuki ;
F = saburo,
C = shinji ;
F = yoshihisa,
C = hisako.
```
[memo] エンコーディング変換経路 on Ruby1.9.3

##### version: ruby 1.9.3p0

SJISからUTF-16LEへの変換パス

```SJIStoUTF-16LE.rb
p Encoding::Converter.new("SJIS", "UTF-16LE").convpath
#=> [[#<Encoding:Windows-31J>, #<Encoding:UTF-8>], [#<Encoding:UTF-8>, #<Encoding:UTF-16LE>]]
```
Shift_JISからUTF-16LEへの変換パス

```Shift_JIStoUTF-16LE.rb
p Encoding::Converter.new("Shift_JIS", "UTF-16LE").convpath
#=> [[#<Encoding:Shift_JIS>, #<Encoding:UTF-8>], [#<Encoding:UTF-8>, #<Encoding:UTF-16LE>]]
```
Fleetに自作の関数を食わせる方法をご存知ありませんか？

自分で定義した関数get-userを、fleetのテンプレート内で呼び出そうとすると、

Exception in thread "main" java.lang.Exception: Unable to resolve symbol: get-user in this context (index.html.fleet:10)

となってしまいます。
関数 get-userのユニテは通るので、関数の定義自体が間違っている訳ではないです。
どなたか、ご存知でしたらご教授いただければ幸いです。
端末の種類ごとに異なるJavaScriptを実行させる

```javascript:matchmedia.js
if ( window.matchMedia("only screen and (max-width: 480px")).matches ) {
     // For Mobile
} else if (window.matchMedia("only screen and (min-width: 481px) and (max-width: 1024px)").matches ) {
     // For Tablet
} else {
     // For PC
}
```
Toastの表示時間は２パターンしか選べない

TOASTの引数で整数を渡すことができるが、結局は２パターンのどちらかしか選べないようです。

Toast.LENGTH_LONG：長め(4秒ぐらい)
Toast.LENGTH_SHORT：短め(2秒ぐらい)

http://android.roof-balcony.com/view/toast/
http://www.mail-archive.com/android-developers@googlegroups.com/msg48322.html
Test::Unitで外部プロセスを使う

1.9だけど，なんか他に上手い方法ないものか…

```ruby
class FooTest < Test::Unit::TestCase
  def setup
    @pid = spawn('food', '--arg=value')
    sleep 1

    # ...
  end

  def teardown
    Process.kill('SIGKILL', @pid)
  end

  # ...
end
```
Growl が暴走したら再起動してほしくて

いやまあ、ちゃんとプロセス監視とかしろっていう話かもしれないけど、ローカルの環境とか頑張りたくないのでこういう cron とか動かせばいいかなって。

    #!/bin/sh
    
    CPU_USAGE=`ps aux | grep Growl.app | sed -e 's/  */ /g' -e 's/ /=/g' -e ' 1d' | cut -d '=' -f 3 | cut -d '.' -f 1`
    
    if [ $CPU_USAGE -gt 20 ]; then
        killall Growl
        open /Applications/Growl.app
    fi
libpngとMono.frameworkが相性悪そう

ioをhomebrewでインストールしようとしたら以下のエラーが出た。
`error: png.h: No such file or directory`
libpngがないはずないので、`brew doctor`したらMono.frameworkが当たっているかもと言われたので外してみたら動いた。
eclipseにカラーテーマを適用する


1.メニューから[Help]->[Install New Software]->type filter textから”MarketPlace Client”をインストール
2.メニューから[Help]->[Eclipse MarketPlace]->"Eclipse Color Theme"をインストール
3.メニューから[Window]->[Preferences]->[General]->[Appearance]->[Color Theme]からお好みのテーマを選択
viewpointを変えながら連番で画像を保存

色々な結果を一枚のキャンバスにplotした画像を、毎回viewpointを変えながら保存したい場合。
注意したいのはfor文の中にclearを使う処理を入れていると、後のiなどの値に影響が出る。そういう場合はclearvarsなどで対応。

``` matlab:
az = 0;
el = 0;

f = figure; %ここでfigureのハンドルを取得。
grid;       %gridが欲しければ。

for i = 1:10

view(az,el); %viewpointを指定。
plot(); %plotする。

filename = sprintf('file/path.jpg', i);
saveas (f,filename, 'jpg');

el = el + 5; %5°ずつ変化させる。
end

```
コマンドラインで pastebin にプレーンテキストを投稿/取得

http://sprunge.us/ を使うと便利。

```bash
function netcopy {
	curl -F 'sprunge=<-' http://sprunge.us/
}

function netpaste {
	curl http://sprunge.us/$1
}
```
```
here$ netcopy < hoge.rb
http://sprunge.us/xxx

here$ ssh there
there$ netpaste xxx > hoge.rb
```
Shell Script での文字列操作

なんかいつもわすれてしまうんだけど。だいたいよくつかうのは `##` かなー。

```bash:
#!/bin/bash

FILE="/usr/local/var.piyo/hoge.piyo"

# 先頭から = #
# 文字列の先頭から、最初に一致するパターンを取り除く (${VAR#pattern})
echo ${FILE#*.} # => piyo/hoge.piyo
echo ${FILE#*/} # => usr/local/var.piyo/hoge.piyo
echo ${FILE#*a} # => l/var.piyo/hoge.piyo

# 文字列の先頭から、最後に一致するパターンを取り除く (${VAR##pattern})
echo ${FILE##*.} # => piyo
echo ${FILE##*/} # => hoge.piyo
echo ${FILE##*a} # => r.piyo/hoge.piyo

# 末尾から = %
# 文字列の末尾から、最初に一致するパターンを取り除く (${VAR%pattern})
echo ${FILE%.*} # => /usr/local/var.piyo/hoge
echo ${FILE%/*} # => /usr/local/var.piyo
echo ${FILE%a*} # => /usr/local/v

# 文字列の末尾から、最後に一致するパターンを取り除く (${VAR%%pattern})
echo ${FILE%%.*} # => /usr/local/var
echo ${FILE%%/*} # =>
echo ${FILE%%a*} # => /usr/loc
```
アフリカの戦略ゲーム

アフリカの戦略ゲームのWeb版一緒に作る仲間を探しています。
Webでユーザー2人がゲームするゲームです。
お手伝いいただける方がいたらアフリカ料理食べながら作りたいと思います。
今開発中の母国のポータルサイトに載せたいので手伝ってください。
https://docs.google.com/present/view?id=df3m495z_41c354dncb
Git の Web インターフェース比較

普通に管理するよりも何かしら見やすいインターフェースを使った方が便利なので比較。

* [GitHub](http://github.com)
多数のサービスと連携できるので便利。数百単位でプライベートリポジトリを持ちたい場合は下記オープンソースのものを使った方がいいかも。

* [Gitorious](http://gitorious.org/)
多機能であるのにも関わらず、オープンソースで利用できる。きれいで使いやすいインターフェース、GitHubでいうところの PUll Request に当たる Merge Request 機能まである。チームごとにメンバーやできたり、プロジェクトごとにリポジトリを管理できるので、大きな組織で使いたい場合に良い。Issues はない。インストールはかなり面倒。

* [GitLab](http://gitlabhq.com/)
最近公開されたオープンソースのインターフェース。かなり良くまとまっている。Gitorious ほど大きくないのでインストールもそこまで難しくない（と思う）。コミットも多いので、これから使うならこれがいいかも。

* [BitBucket](https://bitbucket.org/)
無料プランでもプライベートリポジトリを無制限に作ることができる。普段、GitHub上で活動しているとあまりこちらに行かなくなるので、正直あまり使わない。
ssh の公開鍵の設定めんどい

ssh ログインをパスフレーズ使ってログインするために、公開鍵を渡すときの話

## ×

```sh
$ cat "~/.ssh/id_rsa.pub" | ssh user@hostname "cat >> .ssh/authorized_keys"
```

* 長い
* .ssh ディレクトリないときもっと面倒 (要 `mkdir .ssh`)
* `authorized_keys` が新規作成された時も面倒 (要 `umask 077`)

## ○

```sh
$ ssh-copy-id user@hostname
```
* 短い
* このためだけに覚えるの面倒
* <del>ポート番号を 22 から変更していると無理っぽい？</del> → 下の yaotti 氏のコメント参照
git リポジトリを置いておくためのユーザを作る

```
sudo groupadd -r git
sudo useradd -r -g git -m -d /home/git -s /bin/sh git
add-your-public-key-to /home/git/.ssh/authorized_keys

# Login via SSH as the user "git" has no password and cannot login as usual
ssh git@localhost
git init --bare --shared repo.git
exit

cd ~/path/to/repo
git push git@localhost:repo.git master
```
画像を読み込まずに高さ／幅を取得する

読み込まないので負荷をかけににくい。

```java:getBitmapSize.java
BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inJustDecodeBounds = true;//これが読み込まないオプション
Bitmap preBitmap = null;
InputStream preIStream = new FileInputStream(path);
preBitmap = BitmapFactory.decodeStream(preIStream, null, opts);
preIStream.close();

int bmW = opts.outWidth ;//画像のwidth
int bmH = opts.outHeight ;//画像のheight        
```
Arch Linux と Zsh で $PATH の設定にハマることがある

Arch Linux では /etc/profile が ~/.zshenv の**後に**読み込まれるうえ、中で PATH=hogehoge しているために ~/.zshenv でセットした $PATH が上書きされてしまう。

回避策は3つ：

1. /etc/profile を書き換える
2. .zprofile などの /etc/profile の後に読み込まれるファイルでパスを設定する
3. .zprofile などで `source ~/.zshenv` する

2か3の場合、自分でパスを設定した後 `typeset -U path` して $PATH 内の重複する要素を消すとよい。
mintty を Solarized に

[Solarized ってこんなやつ！](http://ethanschoonover.com/solarized)

下記のスクリプトから

* `solarized-base-colors.sh`
* `solarized-dark-colors.sh` か `solarized-light-colors.sh`

の二つを .bashrc やら .zshrc やらで実行させる。

### ベースの色設定 (solarized-base-colors.sh)

必ず実行する。

```sh:solarized-base-colors.sh
echo -ne '\e]4;1;#DC322F\a'   # red
echo -ne '\e]4;2;#859900\a'   # green
echo -ne '\e]4;3;#B58900\a'   # yellow
echo -ne '\e]4;4;#268BD2\a'   # blue
echo -ne '\e]4;5;#D33682\a'   # magenta
echo -ne '\e]4;6;#2AA198\a'   # cyan
echo -ne '\e]4;7;#EEE8D5\a'   # white (light grey really) -> base2
echo -ne '\e]4;8;#002B36\a'   # bold black (i.e. dark grey -> base03)
echo -ne '\e]4;9;#CB4B16\a'   # bold red -> orange
echo -ne '\e]4;10;#586E75\a'  # bold green -> base01
echo -ne '\e]4;11;#657B83\a'  # bold yellow -> base00
echo -ne '\e]4;12;#839496\a'  # bold blue -> base0
echo -ne '\e]4;13;#6C71C4\a'  # bold magenta -> violet
echo -ne '\e]4;14;#93A1A1\a'  # bold cyan -> base1
echo -ne '\e]4;15;#FDFDE3\a'  # bold white -> base3
```

### 前景背景カーソル設定（暗いやつ, solarized-dark-colors.sh）

これか `solarized-light-colors.sh` を実行する。

```sh:solarized-dark-colors.sh
echo -ne '\e]10;#657B83\a'  # Foreground -> base00
echo -ne '\e]11;#002B36\a'  # Background -> base03
echo -ne '\e]12;#93A1A1\a'  # Cursor -> base1
```

### 前景背景カーソル設定（明るいやつ, solarized-light-colors.sh）

これか `solarized-dark-colors.sh` を実行する。

```sh:solarized-light-colors.sh
echo -ne '\e]10;#657B83\a'  # Foreground -> base00
echo -ne '\e]11;#FDF6E3\a'  # Background -> base3
echo -ne '\e]12;#93A1A1\a'  # Cursor -> base1
```

以上です。
ディレクトリを再帰的に削除する方法のメモ

* RecursiveIteratorIteratorを使うと楽。

```php
<?php
$dir = '/path/to/dir';

$files = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator($dir, FilesystemIterator::SKIP_DOTS),
    RecursiveIteratorIterator::CHILD_FIRST
);

foreach ( $files as $file )
{
	if ( $file->isDir() === true )
	{
		rmdir($file->getPathname());
	}
	else
	{
		unlink($file->getPathname());
	}
}

rmdir($dir);
```
自分のクラスで定義しているメソッドのみを返す: ReflectionClassを拡張して

```PHP
<?php

class Foo
{
	public function aaa()
	{
	}
}

class Bar extends Foo
{
	public function bbb()
	{
	}
}

class Baz extends Bar
{
	public function ccc()
	{
	}
}

class MyReflectionClass extends ReflectionClass
{
	/**
	 * Gets a list of methods which are defined in the self class.
	 * @param integer $filter
	 * @return array
	 */
	public function getMyMethods()
	{
		$myName  = $this->getName();
		$methods = call_user_func_array(array($this, 'getMethods'), func_get_args());
		
		foreach ( $methods as $key => $method )
		{
			$className = $method->getDeclaringClass()->getName();
			
			if ( $myName != $className )
			{
				unset($methods[$key]);
			}
		}
		
		return $methods;
	}
}

$fooClass = new MyReflectionClass('Foo');
var_dump($fooClass->getMyMethods());
/*
array(1) {
  [0]=>
  object(ReflectionMethod)#2 (2) {
    ["name"]=>
    string(3) "aaa"
    ["class"]=>
    string(3) "Foo"
  }
}
*/

$barClass = new MyReflectionClass('Bar');
var_dump($barClass->getMyMethods());
/*
array(1) {
  [0]=>
  object(ReflectionMethod)#3 (2) {
    ["name"]=>
    string(3) "bbb"
    ["class"]=>
    string(3) "Bar"
  }
}
*/

$bazClass = new MyReflectionClass('Baz');
var_dump($bazClass->getMyMethods());
/*
array(1) {
  [0]=>
  object(ReflectionMethod)#4 (2) {
    ["name"]=>
    string(3) "ccc"
    ["class"]=>
    string(3) "Baz"
  }
}
*/
```
[PHP] ReflectionClassで親クラスのクラス名を取得してみる

```PHP
<?php

class Foo
{
}

class Bar extends Foo
{
}

class Baz extends Bar
{
}

$fooClass = new ReflectionClass('Foo');
var_dump($fooClass->getParentClass());
// bool(false)

$barClass = new ReflectionClass('Bar');
var_dump($barClass->getParentClass());
/*
object(ReflectionClass)#3 (1) {
  ["name"]=>
  string(3) "Foo"
}
*/

$bazClass = new ReflectionClass('Baz');
var_dump($bazClass->getParentClass());
/*
object(ReflectionClass)#4 (1) {
  ["name"]=>
  string(3) "Bar"
}
*/
```

http://www.php.net/manual/ja/reflectionclass.getparentclass.php