OmniAICreator/Qiita-1.07M huggingface dataset:
Go の HTTP サーバーと keep-alive

Go の http パッケージを使って hello server を書いてみる

```hello.go
package main

import (
	"io"
	"net/http"
)

func HelloServer(w http.ResponseWriter, req *http.Request) {
	io.WriteString(w, "Hello World.\n")
}

func main() {
	http.HandleFunc("/", HelloServer)
	http.ListenAndServe(":8000", nil)
}
```

このサーバーは、 keep-alive してくれない。 `Content-Length` ヘッダーをつけていないと勝手に `Transfer-Encoding: chunked`  になって、 chunked だと keep-alive してくれない。

`Content-Length` ヘッダーをつけると、勝手に keep-alive してくれるようになる。

```hello.go
package main

import (
	"strconv"
	"io"
	"net/http"
)

func HelloServer(w http.ResponseWriter, req *http.Request) {
	msg := "Hello World.\n"
	w.Header().Add("Content-Length", strconv.Itoa(len(msg)))
	io.WriteString(w, msg)
}

func main() {
	http.HandleFunc("/", HelloServer)
	http.ListenAndServe(":8000", nil)
}
```

今度は勝手に `Connection: keep-alive` をつけてくれて、ちゃんと keep-alive に対応してくれる。

でも、 chunked エンコーディングはいらないけど、 keep-alive はしたくない場合もあるだろう。 (kazeburoの罠とか)
その場合は明示的に `Connection: close` ヘッダーを書いてやる。

```hello.go
package main

import (
	"strconv"
	"io"
	"net/http"
)

func HelloServer(w http.ResponseWriter, req *http.Request) {
	msg := "Hello World.\n"
	w.Header().Add("Content-Length", strconv.Itoa(len(msg)))
	w.Header().Add("Connection", "close")
	io.WriteString(w, msg)
}

func main() {
	http.HandleFunc("/", HelloServer)
	http.ListenAndServe(":8000", nil)
}
```

Go の HTTP サーバーはパフォーマンスも結構良くて、コードも読みやすいので、HTTPサーバー自体に機能を組み込みたい時は Apache や nginx のモジュールを書く代わりに Go で Web アプリを書くという選択肢はありそう。
割と初期にハマるtitleというプロパティについて。


UINavigationControllerを使ったアプリを作るときに、表示されているNavigationBarにビューのタイトルを表示させようとして


``` objective-c:Sample

self.navigationController.title = @"タイトル";

```

として、NavigationBarにタイトルが出なくてションボリする事は割とあると思いますが。実際は以下のように、NavigationItemに対してタイトルを設定してあげると意図したとおりの動作をします。


``` objective-c:Sample

self.navigationItem.title = @"タイトル";

```

どうしてこうなるのか？という点ですが
一つ目のコードでは、UINavigationControllerの親クラスのUIViewControllerに定義された```title```プロパティに値を設定しているだけで、これは定義の通りUIViewControllerのタイトルを設定するための物だからです。
対して、二つ目のコードではUINavigationBar上で管理されている、UINavigationItemの```title```プロパティへ値を設定しているので、NavigationBarのタイトル部分へ設定した値が反映されます。
Sinatra でコントローラ分割的なことをする時の Tips

Sinatra 書いてると予想外にルーティングが多くなってきてダルいみたいな局面の時用。本来は設計時にちゃんと Rails とか使っとくのが正しい

```base.rb
class Base < Sinatra::Base
  use Front
  use API
end
```

```front.rb
class Front < Sinatra::Base
  get '/'
    slim :index
  end
end
```

```api.rb
class API < Sinatra::Base
  get '/api'
    not_found
  end
end
```
ターミナルでDTM的な

kenji0302 さんの投稿より
http://qiita.com/items/42e4fc452744ad93ddf7

``` bash
# フワッぶおーっ
$ while true; do afplay  /System/Library/Sounds/Hero.aiff && sleep 0.2s | afplay /System/Library/Sounds/Basso.aiff | afplay /System/Library/Sounds/Blow.aiff; done
```

``` bash
# ポクポクちーーーーーん YO!
$ while true; do if test $((i%3)) -ne 0; then afplay /System/Library/Sounds/Ping.aiff; else afplay /System/Library/Sounds/Glass.aiff | say 'Yo'; fi; i=$((i+1)); done
```

音を選んで && 演算子の後に sleep を何秒か入れると続けて音が出る。
sleep せずにパイプで繋げると同時に音が出る。
Retina用画像ファイル名を通常画像ファイル名に変換するBashワンライナー

`hoge@2x.png`というファイルを作ってもらい、ツールで一括縮小した後でファイル名を一括変更するbashワンライナー。

```
for name in `ls -1`; do newName=${name%@2x.png}; mv ${name} "${newName}.png"; done
```
Cookbookの記法チェックをするFoodcriticをTravisCIで継続テスト

<!-- too_old -->
> **この記事は最終更新から1年以上経過しています。** 気をつけてね。


[MVT: Foodcritic and Travis CI](http://technology.customink.com/blog/2012/06/04/mvt-foodcritic-and-travis-ci/) より、


OpsCode ChefのCookBookを書いたら評論家[Foodcritic](http://acrmp.github.com/foodcritic/)に見せる。
前述の案内の通りTravisCIでGithubにPushする度に自動でfoodcriticを実行しておいてもらう。

## foodcritic

`gem install foodcritic`かGemfileに書いて`bundle`。

とりあえず作成中の[aptからMongoDBをインストールしてあれこれするレシピ](https://github.com/higanworks-cookbooks/mongodb-10gen)に対して実行してみる。

```
$ foodcritic cookbooks/mongodb-10gen/
FC001: Use strings in preference to symbols to access node attributes: cookbooks/mongodb-10gen/recipes/replica-set.rb:48
FC001: Use strings in preference to symbols to access node attributes: cookbooks/mongodb-10gen/recipes/replica-set.rb:50
FC001: Use strings in preference to symbols to access node attributes: cookbooks/mongodb-10gen/recipes/single.rb:42
FC001: Use strings in preference to symbols to access node attributes: cookbooks/mongodb-10gen/recipes/single.rb:44
FC002: Avoid string interpolation where not required: cookbooks/mongodb-10gen/recipes/replica-set.rb:31
FC002: Avoid string interpolation where not required: cookbooks/mongodb-10gen/recipes/replica-set.rb:59
FC002: Avoid string interpolation where not required: cookbooks/mongodb-10gen/recipes/single.rb:25
FC019: Access node attributes in a consistent manner: cookbooks/mongodb-10gen/recipes/replica-set.rb:48
FC019: Access node attributes in a consistent manner: cookbooks/mongodb-10gen/recipes/replica-set.rb:50
FC023: Prefer conditional attributes: cookbooks/mongodb-10gen/recipes/replica-set.rb:58
```


ルール1,2,19と23に引っかかった、同様の出力をTravisCIからも得られるようにしよう。


## TravisCI

TravisCI用の設定をリポジトリに追加する。

### gitリポジトリに幾つか追加する

一応CookBookと被らないよう、専用のGemfileパスを使うよう案内されている。

```.travis.yml
language: ruby
gemfile:
   - test/support/Gemfile
rvm:
  - 1.9.2
  - 1.9.3
script: bundle exec rake foodcritic
```

`rake` と `foodcritic` をbundleするように指定。

```test/support/Gemfile
source "https://rubygems.org"

gem 'rake'
gem 'foodcritic'
```

```Rakefile
#!/usr/bin/env rake

desc "Runs foodcritic linter"
task :foodcritic do
  if Gem::Version.new("1.9.2") <= Gem::Version.new(RUBY_VERSION.dup)
    sandbox = File.join(File.dirname(__FILE__), %w{tmp foodcritic cookbook})
    prepare_foodcritic_sandbox(sandbox)

    sh "foodcritic --epic-fail any #{File.dirname(sandbox)}"
  else
    puts "WARN: foodcritic run is skipped as Ruby #{RUBY_VERSION} is < 1.9.2."
  end
end

task :default => 'foodcritic'

private

def prepare_foodcritic_sandbox(sandbox)
  files = %w{*.md *.rb attributes definitions files libraries providers
recipes resources templates}

  rm_rf sandbox
  mkdir_p sandbox
  cp_r Dir.glob("{#{files.join(',')}}"), sandbox
  puts "\n\n"
end
```


`rake`コマンドのデフォルトで`foodcritic`を実行するように指定。

下記URLで実行開始。

[https://travis-ci.org/#!/higanworks-cookbooks/mongodb-10gen](https://travis-ci.org/#!/higanworks-cookbooks/mongodb-10gen)


ローカルでfoodcriticを叩いた時と同じ出力をTravisCI上で確認できる。

では直していこう。
sinatra オートリロード


どうやらshotgunはパフォーマンス的に微妙らしいので、
Sinatra/Reloaderを使うことにした。


``` Gemfile
source :rubygems
gem 'sinatra', require: 'sinatra/base'

group :development do
  gem 'sinatra-contrib', require: 'sinatra/reloader'
end
```



```
$ bundle install --path vendor/bundle --without production
```

__Bundler使うパターン__
Modularスタイルで、development環境の時にsinatra/reloaderライブラリを読み込む。
developmentモードで起動したときに有効になる。(デフォルトでdevelopmentモード)

``` application_cntroller.rb
require "sinatra/base"
require "sinatra/reloader"

class ApplicationController < Sinatra::Base

# オートリロードの設定
configure :development do
  register Sinatra::Reloader
end
```

サーバー立ち上げ

```
$ bundle exec rackup
```
MacOSXのターミナルで音を鳴らす

Macのターミナルで音を鳴らしたくて /dev/audio や /dev/dsp を探したけどみつからない。よくよく調べたところ MacOSX の場合はコマンドラインで音声データを再生できるらしい。

こんな感じ。

````bash:
afplay /System/Library/Sounds/Submarine.aiff
````

サーバー監視スクリプトに組み込むとか、コンパイル終了時に音楽鳴らすとか、いろいろ使えそうだね。
Waveファイルを一定間隔で分割する

ブレイクビーツを作るためにちょっと書いた。

```haskell:slicer.hs
-- Usage:
-- ./slice 32 amen_4bars.wav amenBreak

import System.Environment
import Data.WAVE

import Control.Monad
import System.FilePath.Posix
import Data.Maybe

create :: FilePath -> Int -> IO [WAVE]
create path n = do
	WAVE header samples <- getWAVEFile path
	let size = (fromJust $ waveFrames header) `div` n
	return $ map (WAVE $ WAVEHeader (waveNumChannels header) (waveFrameRate header) (waveBitsPerSample header) (Just size)) $ splitAts (replicate n size) samples
	
splitAts :: [Int] -> [a] -> [[a]]
splitAts (n:ns) xs = take n xs : splitAts ns (drop n xs)
splitAts _ xs = []

main = getArgs >>= \args -> case args of
	(n : path : out : _) -> do
		let base = takeBaseName path
		waves <- create path (read n)
		forM (zip [0..] waves) $ \(i,wave) ->
			putWAVEFile (out `combine` replaceBaseName path (base ++ show i)) wave
```
函数ポインタ実演

Cの函数ポインタをほとんど触ったことがなかったので勉強がてら組んで見ました。
以下はC言語の函数としてSKIコンビネータ(正確にはコンビネータではない)を組んでみたものです

```c:ski.c

#include <stdio.h>

void* I(void* x){
    return x;
}

void* K(void* x, void* y){
    return x;
}

void* S(void* (*x)(void*, void*), void* (*y)(void*), void* z){
    return (*x)(z, (*y)(z));
}

void out(int a){ printf("here!:%d",a); }

int main(void)
{
    // SKK = I
    void (*f)(int) = S(K,K,out);
    (*f)(10);
    return 0;
}
```

S,K,Iの函数を作って組み込むことは出来ましたが、問題はCでは呼び出しの時に変数の数も揃える必要があるのでカリー化が上手く出来ず、例えばSKなどを函数として扱いたくてもS(K,a,b)のa,bに当たる函数を用意する必要が出てくるという事でした。
もしも今後Lazy Kを実装する機会に恵まれれば、是非やってみたいなと思いながら今回は諦めることになりそうです。
iPhoneアプリ開発@XCode4.5 でなん度もなん度も調べてしまう便利な小技を思いつき次第まとめていく

#NSArray, NSDictionary, NSNumber を簡単に初期化

```objc
// NSArray を 簡単に初期化できます。(最後のnilは不要)
NSArray* values = @[@"value1",@"value2",@"value3"];

// NSDictionary を 簡単に初期化できます。
NSDictionary* dic = @{@"key1":@"value1", @"key2":@"value2"};

NSNumber を 簡単に初期化できます。
//NSNumber* val1 = @100; // [NSNumber numberWithInt:100];

// こんなこともできます。
NSDictionary* person = @{@"name":@"tom", @"age":@100, @"friends":[@"alan",@"george"]}
```
# NSArrayのなかから特定の値のものを取得
-[NSPredicate] をつかいます

# iPad/iPhone/iPhone5かどうかの判断

下記のコードを、Project_Prefix.pchにでもおいておきましょう

```objc
// iPadかどうかの判断
UIKIT_STATIC_INLINE IsPad() {
#ifdef __IPHONE_3_2
		return UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad;
#else
		return NO;
#endif
}

// iPhone5の画面サイズかどうか判断
UIKIT_STATIC_INLINE BOOL Is568h() {
    return [UIScreen mainScreen].bounds.size.height == 568.0f;
}
```

# UIView の背景を画像にする
画像をパターンとして描画するので、画像のサイズが view のサイズより小さい場合は、
画像が上下左右つながるようにしておきましょう

```objc
view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"hoge"]];
```

# n秒後に処理を実行する

```objc
// 2秒後に、self の hoge を実行する。
[self performSelector:@selector(hoge) withObject:nil afterDelay:2.0];
// 上記の処理をキャンセルするには
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(hoge) object:nil];

// ユーザーが画面を2秒間タッチしなかったら、何かの処理を行う実装
// HogeView.m
-(void)hoge
{
// Tabbarを表示するとか、ボタンを表示するとか...
}
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
  [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(show) object:nil];
  [self performSelector:@selector(show) withObject:nil afterDelay:2.0];
}   
```
IPython 0.13 で起動時にロードする .py ファイルを指定する方法

#Abstract

Python インタラクティブシェルの使い勝手を大きく向上してくれる IPython ですが、
環境変数 PYTHONSTARTUP を無視するという欠点があります。

このエントリでは通常の Python インタラクティブシェルのように、
IPython 起動時に指定した .py ファイルをロードする方法を紹介します。

なお、動作確認 は Debian で行っています。
たぶん、Linux なら同じ方法で設定できると思いますが、
間違いなどがありましたらご連絡ください m(_ _)m

手順は大きく分けて 2 つです。

  1. IPython のデフォルトプロファイルを作成
  2. デフォルトプロファイルを編集

#1. IPython のデフォルトプロファイルを作成

ターミナルで次のコマンドを実行します。

```sh
ipython profile create
```

すると、下記のようにデフォルトプロファイルを作成したことと、
デフォルトプロファイルの保存先がターミナルに表示されます。
( {ディレクトリ名}の部分は環境によって異なります。 )

```sh
[ProfileCreate] Generating default config file: u'{ディレクトリ名}/ipython_config.py'
```

#2. デフォルトプロファイルの編集

適当なエディタで先ほど作成したデフォルトプロファイルを開いて、
次の行を探してください。

```python:ipython_config.py
# List of files to run at IPython startup.
# c.InteractiveShellApp.exec_files = []
```

まず、 `c.InteractiveShellApp.exec_files = []` のコメントアウトを解除します。
次に、リストの中に IPython 起動時にロードしたい .py ファイルを指定します。

例えば `/home/my_name/bin/python_startup.py` をロードしたいときは次のようになります。

```python:ipython_config.py
# List of files to run at IPython startup.
c.InteractiveShellApp.exec_files = ["/home/my_name/bin/python_startup.py"]
```

以上で指定したファイルが IPython 起動時にロードされるようになります。
Windows/Linux で動作する Qiita Client、「Kobita」


# これ何

現在開発中です。。。

Windows/Linux で動く qiita クライアント作ってます。まだ完成してません。

# リポジトリ

https://github.com/mattn/kobita

次回見に来た頃には出来てるかもしれません。。。

## 一覧画面

![](http://go-gyazo.appspot.com/329df47dcf65c646.png)

## 編集画面

![](http://go-gyazo.appspot.com/30a1fedff7fe7d97.png)

## 表

|A |B |
|:-:|:-:|
|甲|乙|

## コード

```perl
use strict;
use warnings;

warn "foo";
```

# インストール

今のところ、`python-gtk`、`python-webkit`、`markdown`が必要です。

# 開発状況

まだ作りかけです。
「こび太」と呼んで下さい。
気になったらすぐテストしよう

少しでも不安があるときにはテストを書こう。
今は予想はできても、また困るかもしれない。

というわけで、予想はつくけど、多分動かして確認したことはないんじゃないかなぁ。
と思ったのでJavaのArrayListクラスのtoArrayメソッドをテストしてみる。
元のコードはJavaだけど、ここに掲載するのが面倒なのでGroovyです。

```groovy:ArrayListToArrayCheck.groovy
// はたと困ったのでテスト
// T[] arr=ArrayList<T>.toArray(T[])
// で得られた配列arrをいじくるとどうなるんだったっけ？
// 予想では引数として与えた配列へ値がコピーされ、
// 返却値は配列への参照となっているハズ。
ArrayList<String> alist = new ArrayList<String>()
alist.add(0,'文字列１')
alist.add(0,'文字列２')
alist.add(0,'文字列３')
assert(alist.get(0)=='文字列３')
assert(alist.get(1)=='文字列２')
assert(alist.get(2)=='文字列１')
String[] strs = alist.toArray(new String[3])
String[] test = ['文字列３','文字列２','文字列１']
assert(strs == test)


// 配列の中身を変えてみる
strs[0] = strs[0].replace(/文字列/,'もじれつ')
strs[1] = strs[1].replace(/文字列/,'もじれつ')
strs[2] = strs[2].replace(/文字列/,'もじれつ')
assert(strs != test) // 配列の中身が変わった

String[] strs2 = alist.toArray(new String[3])
assert(alist.get(0)=='文字列３')
assert(alist.get(1)=='文字列２')
assert(alist.get(2)=='文字列１')
assert(strs != strs2) // alistの中身の変更はなし

// 引数にtestを与えてみる
test = ['文字列３','文字列２','文字列１']
strs = alist.toArray(test)
assert(strs[0]=='文字列３')
assert(strs[1]=='文字列２')
assert(strs[2]=='文字列１')
assert(strs == test)

// 配列の中身を変えてみる
strs[0] = strs[0].replace(/文字列/,'もじれつ')
strs[1] = strs[1].replace(/文字列/,'もじれつ')
strs[2] = strs[2].replace(/文字列/,'もじれつ')
assert(strs == test) // strsとtestが同時に変更されている。
println strs
println test
assert(strs.is(test)) // 参照が一致している。
```

予想通りでした。
書いた意味があったかどうかは、書いた人が決めればいいことです。
JSファイルの読み込み管理をする簡易スクリプト


引数に配列でファイルのパスを指定するとそれを順次読み込むスクリプト。依存と並列読み込みを追加で入れたいけど、とりあえずそれはあとでやる。


```javascript
(function (win, doc, exports) {

    'use strict';

    function imports(scripts) {
        if (!Array.isArray(scripts)) {
            scripts = [scripts];
        }

        var len = scripts.length;
        var i = 0;


        (function _load() {
            if (!(len--)) {
                return;
            }

            var s = doc.createElement('script');

            s.type = 'text/javascript';
            s.onload = s.onerror = function () {
                doc.body.removeChild(s);
                _load();
            };

//IEの場合はこっち
//            s.onreadystatechange = function () {
//                if (s.readyState === 'complete' || s.readyState === 'loaded') {
//                    s.onreadystatechange = null;
//                    doc.body.removeChild(s);
//                    s = null;
//                    _load();
//                }
//            };


            s.src = scripts[i++];
            doc.body.appendChild(s);
        }());
    }

    /*! ----------------------------------------------------------
        EXPORTS
    -------------------------------------------------------------- */
    exports.imports = imports;

}(window, document, window));
```
Emacs で Go を書く設定メモ


go-mode.el てのが案の定あるのでそれを入れる。

go-mode.el - m92oの技術系日記
http://d.hatena.ne.jp/m92o/20091113/1258085705

Goのセットアップをする - YAMAGUCHI::weblog
http://ymotongpoo.hatenablog.com/entry/2012/07/13/162844

go-mode - ~fumi/ChangeLog
http://www.ftnk.jp/~fumi/cl/2009-11-21-1.html

go-mode.el と go-mode-load.el の二つが配布されている。 Homebrew でインストールした場合、

```
$ find /usr/local -name 'go-mode*'
/usr/local/Cellar/go/1.0.3/misc/emacs/go-mode-load.el
/usr/local/Cellar/go/1.0.3/misc/emacs/go-mode.el
```

こういうパスにあるので ~/.emacs.d 以下の適当なディレクトリにコピーして load-path を通す。

設定はいろいろあるけどインデント幅だけどうにかできれば十分なので (デフォルトは 8 タブ) こんな感じにする。

```
(require 'go-mode-load)
(add-hook 'go-mode-hook
	  '(lambda ()
	     (setq tab-width 2)
	     ))
```
zip_with

Ruby の `Array#zip` はブロックを取れますが，戻り値は `nil` となっているため，Haskell の `zipWith` のような処理はできません．探してみましたがそれっぽいのは無いので自作してモンキーパッチを当てることにしました．

```ruby:zip_with
class Array
  def zip_with *args
    if block_given?
      self.zip(*args).map{|a| yield *a}
    else
      self.zip(*args).map
    end
  end
end
```

これで，下記のように `zip_with` を使えます．

```ruby
a = 1, 2, 3
b = 1.0, 2.0, 3.0
c = 'a', 'b', 'c'
a.zip_with(b, c){|i,j,k| (i*j).to_s + k } # => ["1.0a", "4.0b", "9.0c"]
```

ブロックを与えなかった場合の挙動がこれで良いのかよく分かっていないですが，とりあえずこんな感じに．
tmux で automatic-rename off が効かない場合の対処


.tmux.conf に *setw -g automatic-rename off* を記述してるにも関わらず勝手にリネームされてしまう現象が起こった。どうやら zsh の設定とコンフリクトしているようで .zshrc に以下の設定を追記したら解決した。

    DISABLE_AUTO_TITLE=true

## 参考リンク

* [tmuxでautomatic-rename offの設定を無視られないようにする](http://ufssf.hateblo.jp/entry/2012/08/17/085547)
rbenvで管理しているrubyのバージョンを2.0.0-p195にアップデートする手順

rbenvを使ってる人向けのupdate手順です。これを書いている時点で最新の2.0.0-p195にあわせて書いてあります。違うバージョンの場合は適時読み替えてください。

## インストールしてあるruby-buildで利用可能なrubyのバージョンを確認する

```
$ ruby-build --definitions 
```
で利用可能なrubyのバージョン一覧が見られます。2.0.0-p195があればOK。

## ruby-buildが2.0.0-p195を含んでない場合

```
$ rbenv install 2.0.0-p195
ruby-build: definition not found: 2.0.0-p195
```
となるので、まずruby-buildを最新にします。ruby-buildをどうやってインストールしているかによって手順が違います。

### ruby-buildをgithubから直接してインストールしている場合
https://github.com/sstephenson/ruby-build から`git clone`してインストールした場合はpull masterしてもう一度インストールする。

```
$ git remote -v # 確認
origin	git://github.com/sstephenson/ruby-build.git (fetch)
origin	git://github.com/sstephenson/ruby-build.git (push)

$ git pull origin master
...

$ ./install.sh 
Installed ruby-build at /usr/local
```

### rbenvをhomebrewでインストールしている場合

```
$ brew upgrade ruby-build
```

もし、upgradeしたあとでも2.0.0-p195が含まれていなければ、ruby-buildの側の変更がhomebrewにまだ取り込まれていない可能性が高いです。
以下のようにやるとruby-buildのHEADをとってくることが出来ますが、待てるなら少し待つのがよいと思います。

```
$ brew upgrade --HEAD ruby-build
```

(追記: d6kaizさんとuasiさんからいただいたコメントを参考に書き直しました)

参照:

* https://github.com/sstephenson/ruby-build/pull/233
* https://github.com/mxcl/homebrew/pull/16172
* http://d.hatena.ne.jp/suginoy/20120530/p2

## ruby 2.0.0-p195 のインストール
あとは普通にインストールする。

```
$ rbenv install 2.0.0-p195
Downloading openssl-1.0.1e.tar.gz...
-> https://www.openssl.org/source/openssl-1.0.1e.tar.gz
Installing openssl-1.0.1e...
Installed openssl-1.0.1e to /Users/kawasy/.rbenv/versions/2.0.0-p195

Downloading ruby-2.0.0-p195.tar.gz...
-> http://ftp.ruby-lang.org/pub/ruby/2.0/ruby-2.0.0-p195.tar.gz
Installing ruby-2.0.0-p195...
```
となって完了。

簡単！
KVMの仮想ディスクを拡張する方法


VMware Server で運用していた仮想マシンをKVMに移行して稼働させていたのだが、元のディスク容量が小さく運用に支障をきたす程だし、新しい仮想環境はディスク容量が潤沢なので、仮想ディスクを拡張することにした。

その手順を記録しておく。

## 前提
仮想ディスクタイプ: raw
仮想マシンのディスク管理タイプ: LVM
拡張する容量: 10GB

## 仮想ディスクのバックアップ

作業を始める前に、必ず仮想ディスクをバックアップしておくこと。

## 仮想ディスクの拡張

```bash
# 仮想ディスクの容量を確認
qemu-img info virtual-disk.img

# 仮想ディスクの容量を拡張
qemu-img resize virtual-disk.img +10G

# 仮想ディスクの容量を再度確認
qemu-img info virtual-disk.img
```

### gpartedでパーテーションの作成

gpartedのISOをダウンロード

```
$ wget "http://sourceforge.net/projects/gparted/files/gparted-live-stable/0.13.1-2/gparted-live-0.13.1-2.iso/download"
```

ダウンロードしたISOで仮想マシンを起動し、パーティションの作成を行う。
仮想マシンにCD-ROMドライブがない場合は、仮想マシンマネージャから追加を行う。
CD-ROM追加時にISOを指定しないとエラーになるので注意。
※ 参考URL: http://opensuse-man-ja.berlios.de/opensuse-html/cha.libvirt.config.html

###fdiskで physical volume を作成

```bash
# fdisk /dev/sda3
# n   新たに領域を作成する
n

# p   領域テーブルを表示する
p

# 領域番号 (1-4):
1

# 最初 シリンダ (1-1827, default 1):
Enter

# 終点 シリンダ または +サイズ または +サイズM または +サイズK (1-1827, default 1827):
Enter

# t   領域のシステム ID を変更する
t

# 16進数コード (L コマンドでコードリスト表示):
8e

# p   領域テーブルを表示する
p

# w   テーブルをディスクに書き込み、終了する
w
```

fdiskが終了するので再起動 

```
# reboot
```

###LVM物理ボリュームを作成 
※ /dev/sda3はマシンやディスクタイプによってことなるので、
　　pvdisplayやlvdisplay、dfコマンドなどで確認すること。

```
# pvcreate /dev/sda3
```

### ボリュームグループに物理ボリュームを割り当てる 

```
# vgextend VolGroup00 /dev/sda3
```

### 論理ボリュームを増加させる

```
# lvextend -L +10Gb /dev/VolGroup00/LogVol00
```

### ファイルシステムサイズの再認識

```
# resize2fs /dev/VolGroup00/LogVol00
```

### 容量が増えたか確認

```
# df -m
```

※ 参考URL: http://se-suganuma.blogspot.jp/2009/04/centoslvmvmwarehdd.html
perldoc-vim


Vim の中から perldoc を引けるプラグイン。モジュール名（e.g. Getopt::Long）にカーソルをフォーカスした後 *Shift + k* すると、ウィンドウがもうひとつ開いて POD が表示される。

    #!/usr/bin/perl
    use strict;
    use warnings;

    use Getopt::Long; # <= ここで Shift + k を押す 

さらに POD を表示させた状態で *s* をタイプすると、モジュールのソースが表示される。モジュールのソースを簡単に確認できて非常に便利。
jist のご紹介

[gist](https://gist.github.com/) にコマンドラインから投稿できる [gist gem](https://github.com/defunkt/gist) は皆さんよくご存知かと思いますが、 gist より高機能っぽい [jist](https://github.com/ConradIrwin/jist) ってのがあるようですね。

ConradIrwin/jist
https://github.com/ConradIrwin/jist

gist gem との目に付く違いとしては、

 * github にログインして credential を保存するための --login
 * デフォルトでは private gist になる
 * -a オプションで anonymous として投稿も可能 (誰得...?)
 * -t で OAuth2 access token を指定もできる (外部コマンドから呼び出すときに便利そう)
 * -c, -P など clipboard 連携も (手元では動かなかったけど)
 * gist -t で extension (syntax highlight) を指定できたが -t は無い。そのかわり -f で filename.extension を任意に指定可能
   * `$ echo '{"foo":"bar"}' | jist -f foo.js` みたいに標準入力を食わせつつファイル名指定できて便利

など。地味に便利になってる感じです。

gist gem は Content-Type の指定不足で `%` を含む文字列の POST に失敗するバグがあり (500 Internal Server Error になる)、 Issue がいくつもあがっているけど一向に修正される気配もないので、これからは jist を使うのが良いっぽい感じですよ。
Ubuntu で Nautilus 起動時にデスクトップを起動しない

タイル型 WM を使っている時、例えば Firefox の「ディレクトリを開く」を選択すると、Nautilus と同時にデスクトップも立ち上がって非常に迷惑だった。そこで以下のようにしてみた。今のところ問題なく動いている。

1. sudo mv /usr/bin/nautilus /usr/bin/nautilus.orig
2. sudo vim /usr/bin/nautilus (下のファイルを作成)
3. sudo chmod 755 /usr/bin/nautilus

```sh:/usr/bin/nautilus
#!/bin/bash
nautilus.orig $@ --no-desktop &
```

この方法、設定している部分がわからない時の無理矢理な代替案として結構便利。例えば、リモートデスクトップクライアントの vinagre は内部で rdesktop を実行しているが、vinagre 側で rdesktop の設定 (解像度など) を変更することができないので、同様に rdesktop.org を作成して問題を回避できる。

どうしても設定の変更方法がわからない場合はバイナリの間にスクリプトをかますことを検討してみるといい。
Sublime Text2 言語パッケージ作成：補完定義


言語パッケージは、Tab キーを押したときに残りが表示されるようにするための「補完定義」と、カラーハイライトなどを行うための「構文定義」の２つの側面を定義したものです。まずは、コード補完に関するファイルを作成します。その後で構文定義も作成しますが、長いため別記事に書きます。

## 事前準備
まずは、仮の構文定義ファイルとして、拡張子が *.tmLanguage* のファイルをパッケージディレクトリに作成しておきます。

```xml:***.tmLanguage
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>fileTypes</key>
	<array>
		<string>拡張子</string>
	</array>
	<key>name</key>
	<string>構文名</string>
	<key>patterns</key>
	<array>
	</array>
	<key>scopeName</key>
	<string>source.構文名</string>
	<key>uuid</key>
	<string>9b597cba-0612-4f3d-8e02-edaa14abdc95</string>
</dict>
</plist>
```

拡張子は、補完を行うファイルの拡張子。構文名は、何でもよいので識別できる名前(言語の名称など)にします。ここで scopeName に対応した値 (source.構文名) が、後で必要になってきます。


## 作成するファイル
* **Completion ファイル** (.sublime-completions)
* **Snippet ファイル** (.sublime-snippet)

Completion でできることは Snippet でもできますが、Snippet には１ファイルに１個しか定義が書けません。このため、Completion には型の名前・定数・関数など、Snippet にはイベントや制御構文を書いていくことにします。

## Completion ファイル

```json:***.sublime-completions
{
	"scope": "source.ext, source.dxt",

	"completions":
	[
		// Types
		"integer ",
		"float ",
		"key ",
		"list ",
		"rotation ",
		"string ",
		"vector ",
		// Flow Controls
		"jump ",
		"return",
		// Constants
		"CONSTANT1",
		"CONSTANT2",
		"CONSTANT3",
		"CONSTANT4",
		"CONSTANT5",
		"CONSTANT6",
		// Functions
		{ "trigger": "func1", "contents": "func1(${1:integer val})" },
		{ "trigger": "func2", "contents": "func2(${1:float val})" },
		{ "trigger": "func3", "contents": "func3(${1:integer val1}, ${2:integer val2}, ${3:integer val3}, ${4:integer val4}, ${5:float val5}, ${6:float val6}, ${7:float val7})" }
	]
}
```

**scope** には、「事前準備」で作成した構文定義ファイルの scopeName に対応する値 (source.構文名) を指定します。後で構文定義をするときに見直します。

**completions** の小要素として、補完を行うコードを並べます。上から順に、型、単純な制御子、定数、関数と並べてあります。

型は、必ず空白の後に文字が書かれるため、空白を入れてあります。JUMP も同様。

関数の引数は*${n:(引数名称)}*で囲みます。

## Snippet ファイル

```xml:***.sublime-snippet
<snippet>
    <content><![CDATA[do
{
	${2:code}
}
while ($1);
$0]]></content>
    <tabTrigger>do</tabTrigger>
    <scope>source.lsl, source.esl</scope>
    <description>do … while …</description>
</snippet>
```
**content** に *<![CDATA[〜]]>* で括って補完内容を書きます。
改行・空白・タブなどはそのまま反映されます。
カーソルは、$1, $2, $0 の順に飛びます(常に $0 が最後、あとは昇順)。
プレースホルダに何か文字を表示させたい場合は ${2:code} のように、文字を表示させたくない場合は $1 のように書きます。

**tabTrigger** には、置換を発動する文字を定義します。

**scope** は先の説明と同様です。

**description** には、補完時に右端に表示される説明を書きます。ここを設定しないと、Snippet ファイルの名前が表示されます。

上の例で補完を行うと、このような感じになります。
![補完中](http://dl.dropbox.com/s/d2kmjathrqb3lbq/do.png?dl=1)

選択すると...
![補完後](http://dl.dropbox.com/s/a0lt6jupej4w53s/hokango.png?dl=1)
プラグインの実行時に引数を渡す


渡したい引数を``run``メソッドの第3引数以降に定義。

```py
class HogeCommand(sublime_plugin.TextCommand):
  def run(self, edit, fuga, hege):
    print fuga
    print huge
```

キーマップの設定で``args``に対しハッシュを渡す。この際のキーが上記で定義した``run``メソッドの引数と対応する。

```javascript
{ "keys": ["super+c"], "command": "hoge", "args": {"fuga": "a", "hege": "b"} }
```
evalを使わない動的なクラス定義

```ruby
class_names = %w[Some Klass Name]

class_names.each do |name|
  self.class.const_set name, Class.new {|k|
    attr_accessor :attr
    def initialize
      @attr = :attr
    end
  }
end

class_names.each do |klass|
  p self.class.const_get(klass).new
end
```
既存DLL配布モジュールで発生する PInvokeStackImbalance の回避

開発が止まってるものとか、ソースコードが配布されていない物、とりあえず使ってみたいだけって物で実行時に PInvokeStackImbalance が出たときの回避方法。
そもそも PInvokeStackImbalance を出さないようにするには、MSDNで検索で。

http://nyaruru.hatenablog.com/entry/20051224/p1

まず，どうも vshost を有効にしていると 1 回目のデバッグ実行のみしか効果が無さそうなので，とりあえず今のところ vshost は諦める他無さそう．というわけでプロジェクト設定の「デバッグ」の項目から vshost を有効にするのチェックは外しておく．ここから先は 3 通り．

方法1 レジストリキーを使う方法
    "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework" に "MDA" という値を作って "0" を設定すると MDA が完全に無効化される．

方法2 環境変数を使う方法
    "COMPLUS_MDA" という環境変数に "0" を設定すると MDA が完全に無効化される．

方法3 コンフィグファイルを使う方法
    "COMPLUS_MDA" という環境変数に "1" を設定するとデバッガはコンフィグファイルを参照するようになる．次に実行ファイルと同じフォルダに "(アプリケーション名.exe).mda.config" というファイルを作成し，次の内容をセット．FDBK38347 の Microsoft からの書き込みにある通り，MDA を完全に殺してしまう必要はなくて，pInvokeStackImbalance のみを無効化すれば今回の件については十分な模様．

    <?xml version="1.0" encoding="utf-8" ?>
    <mdaConfig>
      <assistants>
        <pInvokeStackImbalance enable="false" >
      </assistants>
    </mdaConfig>
Qiitaのお勧めユーザのうち，実際にQiitaに投稿してるユーザのみフィルタリングする

今日の[Qiitaハッカソン](http://qiitahackathon.peatix.com/)に参加するにあたり，最初はChrome拡張を作ろうと思ってました（実際は違うものを作った).
卑怯にも昨晩のうちに機能をひとつ実装済みでした．
Qiitaのお勧めユーザ一覧のページには，アクティブユーザもそうでないユーザも表示されますが**投稿をしているユーザのみ表示する**というボタンを追加する，という機能です．

せっかくなので公開します．
https://github.com/daisy1754/oreore-qiita-extension

主なソースコードはだいたい下の２つ

``` qiita_util.js
const API_END_POINT = 'https://qiita.com/api/v1';
var qiita = {};

function getToken(onCompletion) {
  $.post(API_END_POINT + '/auth',
      {url_name:'name',
       password:'pass'},
      function(data){
         qiita.token = data.token;
         onCompletion(qiita.token);
      });
}

function useGETAPI(api, token, callback) {
  var data = {};
  if (token)
    data.token = token;
  $.get(API_END_POINT + api, data, callback);
}
```

``` recommended_users.js
getToken(function(token){
  var usersManager = new RecommendedUserManager(token);
  var activeUserButton = $("<div>");
  activeUserButton.addClass('button');
  activeUserButton.text("投稿をしているユーザのみ表示する");
  activeUserButton.click(function(){usersManager.getUserNames();});
  $("body").append(activeUserButton);
});

var RecommendedUserManager = (function () {
  function RecommendedUserManager(token) {
      this.token = token;
  }
  RecommendedUserManager.prototype.getUserNames = function () {
    $("#user-follow-list-box").find("a").each(
      (function(manager) {
        return function(){
          var userName = $(this).attr('href');
          useGETAPI(userName, manager.token, manager.updateRecommend($(this)));
        };
      })(this));
  };
  RecommendedUserManager.prototype.updateRecommend = function(targetElement) {
    return function(data) {
      if (data.items == 0) { // User is read-only
        targetElement.parents("li").remove();
      }
    };
  };
  return RecommendedUserManager;
})();
```

今日ハッカソンで出されてたChrome拡張は，どれもQiitaクライアント的な意味合いが強かったように思います．
上のソースのように，Webアプリのインタフェースを勝手に書き換えたりボタンを生やしたりできるのもブラウザ拡張の魅力だと思っていて，こういうChrome拡張も増えてくるとけっこう楽しいんじゃないかと思ってます．
JKiitaをネイティブアプリ化して更なるダラダラ閲覧ライフを実現する方法


[Jkiita](http://qiita.com/items/7f157af4d111e7b3656a)はJKでQiitaをダラダラとみるためのJKによるJKのためのツールです。

ブラウザ立ち上げるのメンドイ。

ダラダラしたいからランチャー、一発で開きたい。

そんな人向けにJkiitaをネイティブアプリ化する方法を紹介します。

1 [Fluid](http://fluidapp.com/)をダウンロードする

![](http://fluidapp.com/images/fluid_logo_icon.png)

2 Fluidを起動する

3 `URL` に `http://jkiita.herokuapp.com/reader` と入力、`Name` に `JKiita` と入力する。`Create` をクリックする


![img.png](https://qiita-image-store.s3.amazonaws.com/0/889/fc2eb81a-4aa5-a797-95a6-5e53f7b7d4cd.png)


これで JKiita.app という名前のアプリが完成します。

あとはドックなりランチャーなりで JKiita.app を立ち上げて、JKJKするだけです。
CapybaraでPDFダウンロード（ファイルダウンロード）をテスト

まず最低限レスポンスヘッダをみればよいらしい

```ruby
it '請求書のPDFがダウンロードできる' do
  click_button('PDFダウンロード')
  expect(page.response_headers['Content-Type']).to eq("application/pdf")
end
```
jQueryでファイルダウンロード

ハマったので備忘録としてメモ。

画面でボタンをクリックするとファイルのダウンロードを行う処理。
ファイルが無い場合は画面遷移を行わずに画面へエラーメッセージまたはダイアログで通知したい。
サーバはJavaを使用。FWは使用しない。(SAStrutsなら簡単そう？)

ダイアログを出すならAjaxかなと思いjQueryを使用。
Servletの非同期呼び出しは下記のように$.postで呼び出し、パラメータとコールバックメソッドを指定する

```javascript:
function download(parameter) {
	query = {
		parameter : parameter,
	}
	$.post("/DownloadServlet", query, read);
}

function read(resp) {
	// コールバック関数でなんか処理
}
```

ただ、Ajaxだとレスポンスをjavascriptが解釈してしまい、ブラウザのダイアログによるファイルダウンロードを行うことができない。
そのため、最初の非同期呼び出しでチェック処理だけ行い、ファイルが無ければコールバック関数でダイアログを表示、ファイルがあれば別のファイルダウンロード用サーブレットを呼び出すことで対応した。

```javascript:
function download(parameter) {
	query = {
		parameter : parameter,
	}
	$.post("/DownloadFileCheckServlet", query, read);
}

function read(resp) {
	// コールバック関数でなんか処理
	if (resp.length == 0) {
		// レスポンスに何も入力されて無ければファイル有り(とする)サーブレットをGetメソッドで呼び出し
		location.href = "/DownloadServlet";
	} else {
		// レスポンスに入力されていればエラーメッセージとしてダイアログに出力(とする)
		alert(resp);
	}
}
```

これでチェック処理でエラーが発生した時はレスポンスにエラーメッセージを書き込めばダイアログが表示され、レスポンスに何も書き込まれなかった(エラーでない)場合はファイルダウンロード用サーブレットが呼ばれてブラウザによるダウンロードが開始される。

チェック処理とファイルダウンロード処理で別サーブレットになるので、セッションで値を共有しました。
ここは一時フォームを作成してPostメソッドでsubmitしても良いかもしれません。

下記のサイトを参考にさせて頂きました。ありがとうございます。
http://chez-sugi.net/journal-20070306
Qiita の テーブル記法を Vim で簡単に書く

## 元データ

```
hoge huga piyo
foo bar baz
tsura poyo ponyo
inu neco tori
```

↑これをコピペしてハンズオンで試していただけると分かりやすいと思います．

## データを整列する

[vim-alignta](https://github.com/h1mesuke/vim-alignta "vim-alignta") や [Align](http://www.vim.org/scripts/script.php?script_id=294 "Align") を用いてデータを整列します．（vim-alignta のほうがおすすめ）
左詰めや右詰め，中央揃えなど簡単に指定できます．（詳しくは各プラグインの help を見て下さい）

```
hoge  huga piyo
foo   bar  baz
tsura poyo ponyo
inu   neco tori
```

## 横線を引く

hoge の行と foo の行の間に横線を引きたいとします．
まず，hoge の行と foo の行の間に空行を入れ，

```
hoge  huga piyo

foo   bar  baz
tsura poyo ponyo
inu   neco tori
```

次に `16i-<Esc>` と入力します．`i` の前に数字を入力してからインサートモードに入ることで，入力した文字を数字回数分だけ入力できます．適当に多めの数字を入力しておいて，あとでいらない - を `D` で削除するのが楽だと思います．

```
hoge  huga piyo
----------------
foo   bar  baz
tsura poyo ponyo
inu   neco tori
```

## 縦線を引く

例えば hoge と huga の間に縦線を引きたい場合，huga の直前で `<C-v>` を押してブロック矩形選択し，neco の直前までカーソルを持って行き，`r|` とすると縦線を引くことができます．行の右端や左端に縦線を入れる場合は置き換えではなく一斉挿入しないといけないので，代わりに `I|<Esc>` を使います．

```
hoge |huga piyo
-----|----------
foo  |bar  baz
tsura|poyo ponyo
inu  |neco tori
```

他の部分にも同様にして縦線を引けます．

## : を入れる

左/右/中央揃えをするためのコロンを入れます．
これはあまり良い方法が思いつかなかったですが，横線を引いた行で適当に `f|` と `;` で移動しながら `r:` していく方法が考えられます．

## 出来上がり

```
|hoge |huga|piyo | 
|:----|---:|:---:|
|foo  |bar |baz  |
|tsura|poyo|ponyo|
|inu  |neco|tori |
```

|hoge |huga|piyo | 
|:----|---:|:---:|
|foo  |bar |baz  |
|tsura|poyo|ponyo|
|inu  |neco|tori |

線を引く専用のプラグインを入れなくても，矩形選択などを使えば Vim なら簡単に表が書けます．

## 線を描くプラグイン

線を描く機会が多い人は [DrawIt.vim](http://www.vim.org/scripts/script.php?script_id=40 "DrawIt.vim") という線を描くためのプラグインもあります．

## 参考
[Vimエディタで線を描画する](http://nanasi.jp/articles/howto/editing/drawline.html "Vimエディタで線を描画する")
共通makefileで存在しているターゲットを上書きしたい

普通に上書きするとワーニングが出るので、%を付けるといいそうです。

```Common.mk
%clean:
	@rm *.o
```

```Makefile:Makefile
include Common.mk

clean:
	@rm *.o *.d
```

くわしくは以下をどうぞ。
参考リンク: [Makefileで既にそのtargetが存在しているかで分岐する - Higepon’s blog - Mona OS and Mosh](http://d.hatena.ne.jp/higepon/20061127/1164639881)
Sunspot/Solr　インデックス更新をアトリビュート指定して除外する

``` ruby:user.rb
class User < ActiveRecord::Base
  # last_sign_in_at, current_sign_in_at, sign_in_count, updated_at が変更されてもインデックスを更新しない
  searchable :ignore_attribute_changes_of => [:last_sign_in_at, :current_sign_in_at, :sign_in_count, :updated_at] do
    text :username
    text :bio
    time :created_at
  end
end
```
Rails 4.0 find_or_create_by


rails/activerecord/CHANGELOG.md @ 300d080ada31ac297264e6abba6ca16cd2db5925

を読んでみたので誤訳 & わからない部分は後で調べ直すためのメモ。
 
`find_or_create_by`, `find_or_create_by!`, `find_or_initialize`が追加されている。
これらのメソッドは`first_or_create`系のメソッドと似ているが、レコードが作られるときの振る舞いは少し異なっている。

```ruby
User.Where(firstname: 'Hoge').first_or_create
```
はスコープのコンテキストで実行される`create`コールバックを伴って

```ruby
User.Where(firstname: 'Hoge').create
```
を実行する。これは、コールバック内で実行するクエリに影響を及ぼす。
(Whereの結果がcreateに影響するということでいいのかな?)

```ruby
User.find_or_create(firstname: 'Hoge')
```
は

```ruby
User.create(firstname: 'Hoge')
```
を実行する。これは明らかにコールバック内のクエリのスコープに影響を与えない。(うーん、確かに`Where`が消えたので`Where`の結果が`create`のクエリを汚すことはないか。ただ、これだと、`find_or_create_by`のfindの意味合いがよくわからないとおもうのだが・・・。あとで調べ直す。)

`find_or_create_by`を利用したほうは読みやすく、素直だ。

もし、レコード生成時に追加で必要な属性があるなら、以下の方法のうちどちらかを採用すればいい。

```ruby
User.create_with(active:true).find_or_create_by(firstname: 'Hoge')
User.find_or_create(firstname: 'Hoge'){|u| u.active = true}
```

`first_or_create`系のメソッドは`find_or_create`のAPIを支持して、nodoc'edとした。`first_or_create`系のメソッドはそのうちdeprecatedとなるかもしれないが、これらの実装は少なく、たくさんのうっとうしいdeprecation warningをユーザに出す価値は多分ないでしょう。
("これらの実装は小さく"の部分がわからんなぁ。後で調べ直す。)
HTML5時代の Contents-type 設定

## サーバー設定の確認

HTML5になって,新しい拡張子/ファイルタイプがいろいろ出ているが,
サーバー側で正しいレスポンスヘッダーが出力できていないの事があるのでメモ.

手元のApacheには、httpd.conf に以下の設定がデフォルトでしてある.

```apacheconf:httpd.conf
LoadModule mime_module modules/mod_mime.so
TypesConfig /etc/mime.types
```

この設定ファイルの中身は

```apacheconf:/etc/mime.types
text/html					html htm
```

の用な, Contents-typeと拡張子のペアがひたすら書いてある.

基本的には,このリストに書いていないものを追記すれば良さそう.

## 追記する設定

まだいろいろ試行錯誤中なので, 後から変更しやすい.htaccessに書いておこう.

```apacheconf:/etc/mime.types
AddType text/cache-manifest .appcache
AddType image/svg+xml .svg
AddType font/woff .woff
AddType font/ttf .ttf
AddType video/mp4 .mp4
```

結果的にこんな感じ.

## TODO
+ それぞれのファイルを設置して動作検証
+ その他のフォーマットを調べて追記
	+ 特に Video, Audio タグ周り
	+ それ以外のマニアックなヤツ
Gitでリモートのマージ済みのブランチを一括削除する

github-flowとかと併用するのが便利かも

```
git branch -a --merged | grep -v master | grep remotes/origin| sed -e 's% *remotes/origin/%%' | xargs -I% git push origin :%
```

ローカルの場合はこちら: [Git でマージ済みのブランチを一括削除する #git - Qiita](http://qiita.com/items/10a57a4f1d2806e3a3b8)
【質問】C#.NET の命名規則

C#.NET の命名規則について質問です。

私自身はJava歴のほうが長くて、C# の命名規則については
他の人のコードを見たりして覚えたクチです。
今までやった C# 案件がそんなに多くなくて、確たる自信がないので一応確認したいのですが…

・メソッド名は大文字始まり
・変数は小文字始まり
・変数名の頭にアンスコを付けるのは private 変数等のみ
  （ローカル変数や引数の頭には付けない）

と認識しているのですが、合ってるでしょうか。
また、これは C# の一般的なルールと思って良いですか？

----------
たとえば明確なコーディングルールがなくて各自おまかせで書いているとして、
ローカル変数やメソッド引数がアンスコ始まりになっている箇所があったら
これは「C# では普通こういう書き方はしないのでできたら揃えませんかー」と言って良いレベルでしょうか？
それとも別に他人に直させるほどのものではない？
私がコーディングルールを決める人でもなんでもないただのヒラPGだとして。

----------
あと定数名はパスカル形式が普通なんです、よね？
つい大文字のアンスコ区切りにしてしまうのですが…

× private const int IDX_HOGE_NAME = 5;
○ private const int IdxHogeName = 5;

ですか？


よろしくお願いします。
Mac版Excelのショートカットキー


WindowsのExcelになれてた人がまず戸惑うところ。

#### セルの編集を開始する
`control`+`u`

#### セル内で改行
`option`+`⌘`+`enter`

#### 選択したセルのクリア
`fn`+`delete`

#### シートの切り替え
`option`+`←` or `option`+`→`

#### 表示の拡大縮小
`control`+`⌘`+上下にスワイプ

## 参考としたページ
 * [Excel のショートカット キー](http://mac2.microsoft.com/help/office/14/ja-jp/excel/item/64766a97-9258-4f78-9feb-2742ce769041)
 * [Excel for mac のショートカットキー（取り急ぎ）](http://example.com/)
deviseで確認パスワードを入れずに新規登録する方法

デフォルトでは`password`と `password_confirmation`の入力が必須です。
そこで、`password_confirmation`なしでの登録方法です。
***

```ruby:model/user.rb
class User < ActiveRecord::Base
   attr_accessible :email, :password, :password_confirmation, :remember_me
end
```

とデフォルトではなっています。ここで、`:password_confirmation`を削除します。

```ruby:views/registrations/new.html.erb
<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>

  <div><%= f.label :last_name %><br>
  <%= f.text_field :last_name %></div>

  <div><%= f.label :first_name %><br>
  <%= f.text_field :first_name %></div>

  <div><%= f.label :email %><br />
  <%= f.email_field :email %></div>

  <div><%= f.label :password %><br />
  <%= f.password_field :password %></div>

  <div><%= f.label :password_confirmation %><br />
  <%= f.password_field :password_confirmation %></div>

  <div><%= f.submit "登録する" %></div>

<% end %>
```

ここでは、`f.label :password_confirmation`と`f.password_field :password_confirmation`を削除します。

これで確認パスワードなしで新規登録することができます。
Python で複素数を扱う


Pythonista のみなさんは当然ご存知と思いますが、Python で普通に複素数を扱えることに感動したので・・・。

`12 + 3j` のように書くことで、複素数（`Complex`）を作ることができます。虚部には j をつけます。

実部と虚部を取り出すには、以下のように `real` と `imag` を使います。

```py
comp = 12 + 3j
print(comp.real)
# 12.0
print(comp.imag)
# 3.0
```

かけ算や割り算もばっちりです。

```
print((1 + 2j) * (3 + 4j))
# (-5+10j)
print((1 + 2j) / (3 + 4j))
# (0.44+0.08j))
```
Dynamo on Elixer - works on Heroku!

## Excuse

Elixirという勢いのある言語の情報ということで、この記事は大変古く、基本的に歴史的経緯の確認以上の役には立たないと思います。

## そもそもElixirってなに

* http://elixir-lang.org/

> Elixir is a functional meta-programming aware language built on top of the Erlang VM.

* 1st class なマクロ
* protocols による多態のサポート
* Pattern matching
* 最終的に Erlang の VM を生成する / Erlang、OTPとの連携性

* 日本語の情報
* http://d.hatena.ne.jp/k-1/20120310/p1

## Heroku toolbelt 入れる

* https://toolbelt.heroku.com/ から入れる

## Setup Erlang, rebar, & Elixir

* Homebrew でとりあえず入れてよし

```bash
brew install erlang
brew install elixir
brew install --HEAD rebar

erl
#=> Erlang R15B02 (erts-5.9.2) [source] [64-bit] [smp:8:8] [async-threads:0] [hipe] [kernel-poll:false] [dtrace]
rebar --version
#=> rebar 2.0.0 R15B02 20121101_110141 No VCS info available.
elixir -v
#=> Elixir 0.7.0
mix help
```

## ウェブアプリケーションフレームワーク、 Dynamo を入れる

* https://github.com/dynamo/dynamo

```bash
git clone https://github.com/dynamo/dynamo
cd dynamo
mix deps.get
mix install
```

## プロジェクトを作成する

```bash
mix dynamo ../shinjuku_ex
```

## First run!

```bash
mix deps.get
mix server
# Generated shinjuku_ex.app
# Running ShinjukuEx at localhost:4000 with Cowboy on dev
```

* 言われた通り `app/views/index.html.eex` を編集するとライブで反映される。

## deploy to heroku

* https://github.com/goshakkk/heroku-buildpack-elixir
* README 現状とやや違うんですけどね……

```bash
heroku apps:create shinjuku-ex-official \
    --buildpack "https://github.com/goshakkk/heroku-buildpack-elixir.git"

# Create Procfile
# web: mix server -p=$PORT

# specify versions
echo OTP_R15B02 > .preferred_otp_version
echo v0.7.0 > .preferred_elixir_version
git add . && git commit

# Explicitly add web process
heroku ps:scale web=1
git push heroku master
```

* Let's visit http://shinjuku-ex-official.herokuapp.com/

## あとは

* CMS を Dynamo で作るだけですね(......)
    * どっかのフォルダにおいた markdown ファイルを勝手に解釈してくれるようなやつがいいッス
    * Markdown: pure erlang らしい https://github.com/erlware/erlmarkdown
    * exdoc での利用例？: https://github.com/elixir-lang/exdoc/pull/23 
* ドメイン取らなきゃですな

## static 対応について

* https://github.com/dynamo/dynamo/pull/10
* このパッチを参考にできると思う。そもそもまだstatic fileないけど、いずれ。

## Source

* https://github.com/Shinjuku-ex/shinjuku.ex.web

## Super Ultra Thanks

* http://blog.mururu.net/43
* https://github.com/mururu/renoir-search-elixir
MacOSX 10.7.5ではCocoaアプリではGLKitが使えない

iOSではなく、Cocoaの話なので要注意です。xCodeは4.5.1です

iOSで現在使用可能なGLKitがCocoa環境でも使えるときいて、
使ってみたが、どうも実行時にエラーが出る。
調べてみると10.8、GLKitはマウンテンライオンからしか使えないようだ。
なんとも悲しいことである。
じゃあLionアプリを作る時 OpenGL用のベクトル・行列ライブラリは何使えばいいんじゃ・・・。
C++ならばたくさんいいのがあるのだが、ブリッジがObjective-cでは面倒臭い。
C言語から呼べる良いライブラリあったら教えてください（切実）。

自分でつくれって？　面倒です。
バグを一番生まないコツは、プログラムを自分で書かないことですしね！

しかし、完全な解決策ではないが、GLKitをCocoaで使う方法はあります。
かなり強引な方法です。
ポイントは、
・GLKitはリンクしなくてもヘッダーは読める。そう、importできる。
・GLKitの実装はほとんどがinline。つまり関数がヘッダーに書かれている。
この２点です。
つまり、ヘッダーだけ使っちゃおうということです。
しかし普通にヘッダーをインポートで使えるか？
と思うと、GLKMatrix4Identityをどこかでつかっちゃうと、Undefined symbolsリンクエラー。
さて、原因をさぐる為にヘッダーへジャンプすると、

```ObjC
extern const GLKMatrix4 GLKMatrix4Identity;
```

とある。
これは変数を宣言だけしている。つまり変数を外部結合にしてヘッダーにその情報がのっかっている。
今回はライブラリをリンクしていないため、この実態にアクセスできないために、未定義のシンボルである、とおこられてしまう。

となると、もう答えは一つしかない。
外部結合の変数を自分で好きなソースファイルに記述すればいい。

```ObjC
#import <OpenGL/OpenGL.h>
#import <GLKit/GLKit.h>

//こういうのは本当によくないとおもうけどたまにはいいよね！
const GLKMatrix4 GLKMatrix4Identity = {
    1.0f, 0.0f, 0.0f, 0.0f,
    0.0f, 1.0f, 0.0f, 0.0f,
    0.0f, 0.0f, 1.0f, 0.0f,
    0.0f, 0.0f, 0.0f, 1.0f
};
```

これでリンクエラーは解消。
ヘッダーにGLK_INLINEとついている関数であれば、インポートさえすれば使えるので安心である。

しかしこれがついていない場合は、同じように自分で定義するしか道はない。
GLKMatrix4InvertとかGLKMatrix4InvertAndTranspose
である。
また面倒なものを残してくれたものである。


ともあれほとんどはGLK_INLINEなので問題ないだろう。
ただしアップルの審査なんかは保証できない。


今回得るベき教訓は、やはり内部結合と外部結合をしっかり理解しておくことは大切だ、
ということだろうか。
now called `fs.exists` ?


コンパイル時にワーニングが出るようになっていた。

```
$ coffee -c sample.coffee
path.exists is now called 'fs.exists'.
```

ググるとpath.existsがfs.existsに変わったとかある???
よくわからんが一箇所path.exists をfs.existsに置き換えたらワーニングが出なくなった。

command.js

```
412行あたり
- return path.exists(jsDir, function(exists) {
+ return fs.exists(jsDir, function(exists) {
```

いいのか？
CentOS 5.x 標準の Ruby では bundler が使えない件

とある古いアプリを見ていてですね。ふと "今時 bundler 使わないとか馬鹿じゃねーの？" と思ったわけですよ。

で、手元で bundler 化して意気揚々とデプロイしようとしたところ...

bundler (1.0 or later)

> 我々ハー rubygems 1.3.6- ヲ要求スル！

rubygems 1.3.6 

> 我々ハー Ruby 1.8.6- ヲ要求スル！

CentOS 5.x

> え？ Ruby？ 1.8.5ですけど何か？

詰んだ...
:targetセレクタはDOMContentLoadedイベントの中で機能しない

MacのChromeで確認。

```html:index.html
<div id="a"></div>
```

というHTMLがあり、URLが`index.html#a`の時、

```javascript
document.querySelector(':target');
```

でdiv要素が取得できるはずですが、DOMContentLoadedイベントの中ではまだ取得できない。

```javascript
window.addEventListener('DOMContentLoaded', function() {
    document.querySelector(':target'); // 常に null !
    document.querySelector('#a'); // こっちはちゃんと取得できる
});

window.addEventListener('load', function() {
    document.querySelector(':target'); // ちゃんととれる
});
```
[質問　初歩/linux(ubuntu)]　ディレクトリ移動コマンドについて

某twitterクライアントをダウンロードしたら、ダウンロードアプリの保存場所に使用しているディレクトリとは異なるディレクトリに回答してしまいました (/home/yu/DLapps/mikutterの所を/home/yu/ダウンロード/mikutter)。
それで上書き保存がてらディレクトリの移動をしようとしましたが、「mv　mikutter /home/yu/DlApps/mikutter」を実行しても、「mv: `mikutter' から `/home/DlApps/mikutter' へ移動できません: そのようなファイルやディレクトリはありません」というエラーが表示されます。
初心者なので、理解度が足りなくて間違えた使用をしているだと自分でも思いますが、コマンドも使えるようにしてUbuntuでプログラミングの勉強をしようと思っているので、もし良かったらご教授いただけたら幸いです
PHPフレームワーク「Laravel」関連情報まとめ


###### Symfony、CakePHP、CodeIgniter、FuelPHP などの数あるPHPフレームワークでも、より新しい部類に入り、日本でも徐々に注目を浴びてきてる(らしい)、「Laravel」の関連情報をまとめました。

### 本家サイト

* 「Laravel - A Clean & Classy PHP Framework」
http://laravel.com/

* Laravel @ github
https://github.com/laravel/laravel

### ドキュメント

* 「Laravel Documentation」
ドキュメント本家(英語)
http://laravel.com/docs

* 「Laravel:Web職人のためのフレームワーク」
ドキュメント日本語訳 (by Hirohisa Kawaseさん)
http://laravel.kore1server.com/docs/home

* 「Laravel 3公式ドキュメント日本語版」
ドキュメント日本語訳・電子書籍版 (by Hirohisa Kawaseさん)
https://leanpub.com/laravel-3-japanese

### チュートリアル

* 「Code Happy」
Laravelのチュートリアルブログ (daylerees.com 日本語訳) (by Hirohisa Kawaseさん)
http://kore1server.com/tutorial/code-happy

* 「Laravel: Code Happy (JP)」
上記チュートリアルの日本語訳・電子書籍版、最新 (by Hirohisa Kawaseさん)
https://leanpub.com/codehappy-jp

* 最新Laravel情報 (by Hirohisa Kawaseさん)
http://kore1server.com/tutorial/laravel

* PHPフレームワークLaravel (@ WinRoad徒然草)
http://w.builwing.info/category/laravel/

### 紹介記事

* 「LaravelはポストCodeIgniterの最有力候補なのか」(@ ユービックログ研究所)
http://www.ubiqlog.com/archives/category/php/laravel

* 「有力なPHPフレームワークのGoogle Insights結果 (FuelPHP,Laravel,CodeIgniter,Symfony,CakePHP)」(@ 9ensanのLifeHack)
http://9ensan.com/blog/php/php-framework-google-insights-20120908/

* 「MVCフレームワーク Laravel 3.0」(@ ECサイト運営開発記)
http://d.hatena.ne.jp/nohohon_x/20120427/1335540925

### Tips、その他

* Laravel カテゴリ(@ spls)
http://spls.jp/category/php/laravel

* Laravel カテゴリ(@ ECサイト運営開発記)
http://d.hatena.ne.jp/nohohon_x/searchdiary?word=*[Laravel]
libcurl を iOS SDK 6.0 用にビルドする


## ソースを用意する

Apple Open Source から [curl-69.2](http://www.opensource.apple.com/source/curl/curl-69.2/) をダウンロードします。[OS X 10.8.2 Source](http://www.opensource.apple.com/release/mac-os-x-1082/) のページから一括ダウンロードできます。

ダウンロードしたら、どこか適当な場所に置いて解凍しましょう。

## ビルドする

解凍したディレクトリ（curl-69.2）の下に `curl` というディレクトリがあります。ここにビルドスクリプトを置いてビルドします。

ビルドスクリプトは [ios5 - Using libcurl on iOS 5 as an alternative to NSURLConnection - Stack Overflow](http://stackoverflow.com/questions/9039554/using-libcurl-on-ios-5-as-an-alternative-to-nsurlconnection) の解答をもとに以下の点を変更しました。

- SDK を 6.0 に
- Xcode の場所の変更
- armv6 を削除し、armv7s を追加

```build_libcurl_ios.sh
#!/bin/sh 
export SDK=6.0

buildit()
{
    target=$1
    platform=$2

    export CC=/Applications/Xcode.app/Contents/Developer/Platforms/${platform}.platform/Developer/usr/bin/gcc
    export CFLAGS="-arch ${target} -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/${platform}.platform/Developer/SDKs/${platform}${SDK}.sdk"
    export CPP="/Applications/Xcode.app/Contents/Developer/Platforms/${platform}.platform/Developer/usr/bin/llvm-cpp-4.2"
    export AR=/Applications/Xcode.app/Contents/Developer/Platforms/${platform}.platform/Developer/usr/bin/ar
    export RANLIB=/Applications/Xcode.app/Contents/Developer/Platforms/${platform}.platform/Developer/usr/bin/ranlib

    ./configure --disable-shared --without-ssl --without-libssh2 --without-ca-bundle --without-ldap --disable-ldap \
            --host=${target}-apple-darwin10

    make clean
    make
    $AR rv libcurl.${target}.a lib/*.o
}

buildit armv7 iPhoneOS
buildit armv7s iPhoneOS
buildit i386 iPhoneSimulator

lipo -create libcurl.armv7.a libcurl.armv7s.a libcurl.i386.a -output libcurl.a
```

`libcurl.a` というファイルができれば OK です。それぞれのアーキテクチャ用のビルドと後に `lipo` で一つのユニバーサルバイナリにまとめているようですね。

## 使う

1. `libcurl.a` と `curl-69.2/curl/include` を iOS のプロジェクトにまるまるコピーします。参照ではなく、ファイルごとコピーです。
2. 使用するところで `#include "curl.h"`
3. これで [libcurl](http://curl.haxx.se/libcurl/) が使えるはずです。
コマンド実行に一定時間以上かかった場合処理時間を表示する

```.zshrc
REPORTTIME=3
```

上記のように書いておけば，コマンド実行に3秒以上かかったときにtimeコマンドと同じように処理時間を出してくれる

```sh
$ ec2-describe-regions
REGION eu-west-1 ec2.eu-west-1.amazonaws.com
REGION sa-east-1 ec2.sa-east-1.amazonaws.com
...
ec2-describe-regions 10.14s user 0.68s system 77% cpu 14.018 total
```
Finderから直接その場所のターミナルを開く方法

知らなかったので備忘録として。

今までは、

　ターミナルを開く
　　↓
　cd と打った後に Finder 側から開きたいフォルダをドラッグアンドドロップ

で開いていたが、どうやら右クリックのメニューに【ターミナルで開く】なるものを追加できるらしい。

設定(System Preferences)の

``` 
「Keyboard」>「Services」>「Files and Folders」>【New Terminal at Folder】
```
ここにチェックを入れれば、Finder 上のフォルダを右クリックから Terminal で開くことができる。

試したのは Lion なので、Snow Leopard や Moutain Lion はわかりません。
OS X 上で libcurl を使って HTTP 通信


C, C++ がほとんどわからないのですが・・・。

1. まずプロジェクトを作ります。Xcode で News -> Project -> OS X -> Command Line Tool -> C++
2. Project -> Build Phases -> Link Binary With Libraries で `libcurl.dylib` を追加。

`curl_easy_perform()` で取得したページの内容は、`CURLOPT_WRITEFUNCTION` で指定したコールバックで処理できるようです。

```main.cpp
#include <iostream>
#include <curl/curl.h>

size_t onReceive(char *ptr, size_t size, size_t nmemb, void *userdata)
{
    char result[nmemb];
    memcpy(result, ptr, size * nmemb);
    std::cout << result << std::endl;
    return size * nmemb;
}

int main(int argc, const char * argv[])
{
    CURL *curl = curl_easy_init();
    if (!curl) {
        std::cerr << "Failed to init curl." << std::endl;
        curl_easy_cleanup(curl);
        return 1;
    }
    curl_easy_setopt(curl, CURLOPT_URL, "http://curl.haxx.se/");
    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, onReceive);
    CURLcode res = curl_easy_perform(curl);
    
    if (res != CURLE_OK) {
        fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
        curl_easy_cleanup(curl);
        return 1;
    }
    
    curl_easy_cleanup(curl);    
    return 0;
}
```

参考
http://curl.haxx.se/libcurl/c/curl_easy_setopt.html
TypeScriptのタグ名がすべて小文字になってしまいます

タグ名として「TypeScript」と大文字を含めた形で指定を行なっても、
投稿後には「typescript」と全て小文字として扱われてしまうようです。

TypeScriptの正式な表現に合わせて大文字を含めた形でタグ名を表現したいです。
githubで使えるショートカット

[GitHub](https://github.com/) のページに飛んで

* `shift + ?` .. ヘルプ
* `s` .. 検索バーへ移動 (レポジトリの切り替え)
* `w` .. ブランチの切り替え
* `t` .. 見たいファイルにジャンプ
* `1` .. 指定行へ移動
* `m` .. Markdown Cheat Sheet が開く (thanks tmd45)

ブランチの切り替えとファイルにジャンプは便利そう

元ネタこちら: [githubでソース見るときにこのショートカットだけは知っといたほうが良い « それで、僕は何を成し遂げたのだろう](http://adachi-takehiro.com/github%e3%81%a7%e3%82%bd%e3%83%bc%e3%82%b9%e8%a6%8b%e3%82%8b%e3%81%a8%e3%81%8d%e3%81%ab%e3%81%93%e3%81%ae%e3%82%b7%e3%83%a7%e3%83%bc%e3%83%88%e3%82%ab%e3%83%83%e3%83%88%e3%81%a0%e3%81%91%e3%81%af/)
TypeScriptでの基本的なクラスの書き方

TypeScriptでは、クラスを以下のように書くことができます。

```javascript:class.ts
class HogeClass {
    foo: string;
    constructor(foo: string) {
        this.foo = foo;
    }
}
```

コンストラクタに対して「constructor」と明記するのが、他のメジャーなOOP言語と異なる部分ですね。

JavaScriptの場合ですと、オブジェクトに属した変数のことを「プロパティ」と読んでいましたが、TypeScriptの仕様書によりますと、上記のfooのような、クラスに属した変数を「Members」と呼んでいます。なので、C++のように「メンバ変数」と呼んでもいいのかもしれません。
# FacebookアプリをUAで振り分ける

## 概要
facebookアプリ内ブラウザで閲覧している場合はSafariで開き直してもらえるように通知をだしたい時など、
ユーザがfacebookアプリ内ブラウザであるか判定する方法

## 対象UA（2012/11/01現在）
Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Mobile/10A405 [FBAN/FBIOS;FBAV/5.0;FBBV/47423;FBDV/iPhone5,2;FBMD/iPhone;FBSN/iPhone OS;FBSV/6.0;FBSS/2; FBCR/

## 判定方法 JavaScript

```javascript
function isFacebookApp(ua){
    return ua.indexOf('FBAN') == -1 ? false : true;
}
```

## 注意点

上記はfacebookの非公式情報の為、変更される可能性があります
メインのロジックでは利用しないことをオススメします