OmniAICreator/Qiita-1.07M huggingface dataset:
第六回オフラインリアルタイムどう書くの参考問題の回答例。Haskell で。

お題はこちら http://qiita.com/items/4c60f10b73812e86441c

かかった時間は30分ぐらいでしょうか。かなり雑です。

```haskell:Answer.hs

module Answer(solve) where

import Data.List

type Pos = (Int, Int)

l_intersect :: (Pos, Pos, Pos) -> (Pos, Pos, Pos) -> String
l_intersect ((a11, a12), (a21, a22), (a31, a32)) ((b11, b12), (b21, b22), (b31, b32)) =
    show $ length $ union (union (intersect rect1 rect3) (intersect rect1 rect4))
                          (union (intersect rect2 rect3) (intersect rect2 rect4))
    where
        rect1 = [(x,y)|x<-(n a11 a21), y<-(n a12 a22)]
        rect2 = [(x,y)|x<-(n a11 a31), y<-(n a12 a32)]
        rect3 = [(x,y)|x<-(n b11 b21), y<-(n b12 b22)]
        rect4 = [(x,y)|x<-(n b11 b31), y<-(n b12 b32)]
        n a b = if a < b then [a..b] else [b..a]

solve :: String -> String
solve [a11,a12,'-',a21,a22,'-',a31,a32,',',b11,b12,'-',b21,b22,'-',b31,b32] =
    l_intersect ((read [a11], read [a12]), (read [a21], read [a22]), (read [a31], read [a32]))
                ((read [b11], read [b12]), (read [b21], read [b22]), (read [b31], read [b32]))
```

```haskell:test.hs

module Main where
import Test.HUnit
import Answer

-- referring to source of words 
-- http://www.haskell.org/ghc/docs/latest/html/libraries/base-4.6.0.0/src/Data-List.html#words
split :: (a -> Bool) -> [a] -> [[a]]
split f s =
    case dropWhile f s of
         [] -> []
         s' -> w : split f s''
               where (w, s'') = break f s'

doAssert :: [String] -> Assertion
doAssert (name:input:expected:_) =
    assertEqual name expected (solve input)
doAssert _ = error "Specify a list which contains more than 3 items."

main :: IO ()
main =
    readFile "patterns.tsv"
    >>= runTestTT . test . map (doAssert . split (== '¥t')) . lines
    >>  return ()

-- % runhaskell test.hs
-- ### Failure in: 1
-- #2
-- expected: "13245"
--  but got: "12345"
-- Cases: 3  Tried: 3  Errors: 0  Failures: 1
```
同一ドメインのインラインフレームの関数を呼び出す

基本的には

```JavaScript:JavaScript
document.getElementById( 'iframe_id' ).contentWindow.func();
```

で呼び出すことができる。

これで呼び出せない場合があり、`undefined`が返ってきた。
原因としては、インラインフレームの読み込みが終わる前に関数を呼び出していた模様。

色んな記事を探してもこんなことがあまり起こっていなかったし、どういうときにこうなるかはちょっと不明。ただ、読み込みに時間が掛かってるだけ？

対象法しては、

```JavaScript:JavaScript
document.getElementById( 'iframe_id' ).onload = function ()
{
    document.getElementById( 'iframe_id' ).contentWindow.func();
};
```

として、インラインフレームの読み込みが完了したあとに、関数を呼び出すと無事呼び出すことができました。
Perl6導入記

最初に
================================================================================
perl6には非常に興味があったものの、なかなか手を出せずにいた私です。
今回、遂にperl6に手を出したので、その導入からhello worldまでを書いてみたいと思います。

\# このネタ、何番煎じなんだろうか <br />
\## そんなのキニシナイ

NOTE: 以下の情報は、記事作成(2012-12-23)当時のものです。
最新の情報とは異なる可能性がありますので、ご注意ください。

作業環境
- OS: Vine Linux 6.1
- CPU: AMD Phenom(tm) II X4 955
- MEM: 4GByte
- GCC: 4.7.2
- Perl5: 5.12.3


インストール
================================================================================
まずは、処理系を落としてきます。
今回導入するのは、Rakudoです。

まずは公式ページへ行って、ダウンロードについて調べます。

http://rakudo.org/

トップページを見ると、2012-11版が最新のようです。
How to get Rakudo Perl 6のページを見ながら、インストール作業を進めます。

まずはお気に入りの端末を開いてください。
PCを再起動して、text modeでログインしても構いません。
やりやすいほうで構いません。
なお、git、make、gcc、Perl5.8以降、ICU4Cがインストール済であることを前提とさせて頂きますので、あしからずご了承ください。

標準的なlinuxディストリビューションならば、最初から揃っているはずですので、問題ありませんよね。

閑話休題。

さて、まずは作業ディレクトリを作ります。
今回は適当に、次のようにして作成しました。

> $ mkdir ~/perl6.rakudo/
> $ cd ~/perl6.rakudo/

続いて、ソースコードをcloneします。

> $ time git clone git://github.com/rakudo/rakudo.git

15秒程度でcloneが終了しました。
cloneすると、作業ディレクトリ以下にrakudoというディレクトリができます。

> $ ls
> rakudo/
> $ cd rakudo/
> $ ls
> CREDITS  Configure.pl  INSTALL.txt  LHF.markdown  LICENSE  README  VERSION  blib/  docs/  dynext/  lib/  src/  t/  tools/

こんな感じになりました。
続いてmakeに入ります。
先に言っておきますと、makeは得てして時間がかかりますが、はい、結構かかります。
ただしkernelをmakeするよりはかかりませんので、問題ありません。

まずはMakefileを作成します。

> $ time perl Configure.pl --gen-parrot --gen-nqp

7分強程度で、問題なく終了しました。
2度目移行は、

> $ time perl Configure.pl --with-parrot=./parrot/parrot --with-nqp=./nqp/nqp

とできるので、1秒かからずにMakefileを作成することができます。

さて、ではいよいよビルドします。
ドキドキしますね。

> $ time make
> $ time make install

5分弱で終了しました。
./perl6という実行可能ファイルが作成されているはずです。
また./install以下には、ドキュメントやら何やら色々と入っているようです。
make installとしてますが、パスの通った場所へのインストールは行われません。
そのせいで少しハマりました。

とまれ、今回の目的であるhello worldへ進みましょう。


hello world!を試してみる
================================================================================
さて、いよいよperl6を動かしてみたいと思います。

> $ pwd
> /home/kamichidu/perl6.rakudo/rakudo/
> $ ./perl6
> > say 'hello world!';
> hello world!
> > exit;

感動しますね。
今までperlshを使っていたりしましたが、普通にインタラクティブなシェルが使えるとは。

続いてファイルから実行させてみます。

```perl6:hello_world.pl
\#!~/perl6.rakudo/rakudo/perl6

say q/hello world!/;

1;
```

> $ ./perl6 ./hello_world.pl
> hello world!

ちゃんと出力されましたね。
感動ですね。


最後に
================================================================================
つまらない記事ではございましたが、最後までお付き合い頂きありがとうございました。
これからperl6を勉強していきたいと思います。
この記事でやってみたように、 perl6の導入は非常に簡単なので、みんなどんどん導入して遊べばいいと思います。
AirDropをTerminalから立ち上げるシェルスクリプト


これを bin に入れておけばFinderをポチポチしなくてもAirDropを即座に立ち上げることができる。

```osascript:airdrop
#!/usr/bin/osascript
tell application "Finder"
    activate
    tell application "System Events" to keystroke "R" using {command down, shift down}
end tell
```
ある文字列が実行可能かどうか調べる


 * `$commands`
   * 実行ファイル
 * `$functions`
   * 関数
 * `$aliases`
   * エイリアス

それぞれ連想配列として宣言されている。

関数として実行できるかどうかだと次のようになる:

```zsh:
function hello-world {
  echo "Hello World"
}

$+functions['hello-world'] # -> 1
```
iOSで高速フーリエ変換を使う


画像処理や音声処理でお世話になるFFT（高速フーリエ変換）ですが、iOSの場合、AppleよりFFTを計算するライブラリが用意されています。
その使い方について。

## 準備
プロジェクトに`Accelerate.framework`を追加してください。
そして、FFTを用いたいソースコードに以下を追記してください。
例：

``` objective-c:FFTSample.m
#import <Accelerate/Accelerate.h>
```

## FFTを計算する
以下が実際の計算になります。

``` objective-c:FFTSample.m
// data: 入力
// length: 入力のうち利用する要素数
- (void)calcFFT:(float*)data dataLength:(int)length
{
    // データ長を2のn乗の大きさにする
    unsigned int sizeLog2 = (int)(log(length)/log(2));
    unsigned int size = 1 << sizeLog2;
        
    // fftのセットアップ
    FFTSetup fftSetUp = vDSP_create_fftsetup(sizeLog2 + 1, FFT_RADIX2);
    
    // 窓関数の用意
    float* window = calloc(size, sizeof(float));
    float* windowedInput = calloc(size, sizeof(float));
    vDSP_hann_window(window, size, 0);
    
    // 窓関数を入力値に適用し、windewedInputへ
    vDSP_vmul(data, 1, window, 1, windowedInput, 1, size);
    
    // 入力を複素数にする
    DSPSplitComplex splitComplex;
    splitComplex.realp = calloc(size, sizeof(float));
    splitComplex.imagp = calloc(size, sizeof(float));
    
    for (int i = 0; i < size; i++) {
        splitComplex.realp[i] = windowedInput[i];
        splitComplex.imagp[i] = 0.0f;
    }

    // FFTを計算する
    vDSP_fft_zrip(fftSetUp, &splitComplex, 1, sizeLog2 + 1, FFT_FORWARD);
    
    // 結果を表示する
    // FFTの性質から半分のデータのみ利用する
    for (int i = 0; i <= size/2; i++) {
        float real = splitComplex.realp[i];
        float imag = splitComplex.imagp[i];
        float distance = sqrt(real*real + imag*imag);
        NSLog(@"[%d] %.2f", i, distance);
    }
    
    // メモリを開放する
    free(splitComplex.realp);
    free(splitComplex.imagp);
    free(window);
    free(windowedInput);
    vDSP_destroy_fftsetup(fftSetUp);
    
}
```

あとは実行してみましょう。
元になるデータですが、例えばsin波などをつかってみてください。

``` objective-c:FFTSample.m
- (void)execute
{
    int dataLength = 512;
    float* data = calloc(dataLength, sizeof(float));
    for(int i = 0; i < dataLength; i++) {
        // dataLength中で30回振動させる
        data[i] = sin(i * 30.0f / (float)dataLength * 2.0f * M_PI);
    }
    [self calcFFT:data dataLength:dataLength];
}
```

恐らく以下のような出力を得られるかと思います。
30付近のみ掲載します。あとは0なので。

```
[28] 0.00
[29] 128.00
[30] 256.00
[31] 128.00
[32] 0.00
```

## 参考
Appleの公式ドキュメント
http://developer.apple.com/library/ios/#documentation/Performance/Conceptual/vDSP_Programming_Guide/UsingFourierTransforms/UsingFourierTransforms.html

vDSPを使う（高速フーリエ変換編 その6）：なんてこったいブログ
http://nantekottai.com/2010/10/04/fft-with-vdsp-6/
timeコマンドについて調べた

zshのtimeと/usr/bin/timeが別物ってことに気づかずハマったので、メモ。
使い方としてはどちらも引数にコマンドを渡すと、そのコマンドの実行時間を出力してくれるというもの。

# zsh
zshで`time`コマンドをそのまま使うとzshの提供するtimeが発動する。

```
$ which time
time: shell reserved word
```

で、このtime使うとこんな出力がされる

```
$ time sleep 1;
sleep 1  0.00s user 0.01s system 1% cpu 1.017 total
```

このフォーマットは環境変数`TIMEFMT`に従う。

```
$ echo $TIMEFMT
%J  %U user %S system %P cpu %*E total
```

これの意味は`man zshparam`のTIMEFMTの項目で見れる。
timeコマンド自体の説明は`man zshmisc`に載っている。`man time`で見れるのは/usr/bin/timeの使い方であって別物。/usr/bin/timeで使えるようなオプションはない。

ちなみに`REPORTTIME`という環境変数設定しておくと一定時間以上かかったコマンドの時間を出力してくれるが、このzshのtimeで出力される。
http://qiita.com/items/b72373f7e4bc79b13568

# /usr/bin/time
こちらを使うと以下の様な出力になる。

```
$ /usr/bin/time sleep 1;
0.00user 0.00system 0:01.02elapsed 1%CPU (0avgtext+0avgdata 2080maxresident)k
0inputs+0outputs (0major+172minor)pagefaults 0swaps
```

こいつのフォーマットは環境変数`TIME`に従う。TIMEが設定されてなかったら以下のフォーマットになる。

```
  %Uuser %Ssystem %Eelapsed %PCPU (%Xtext+%Ddata %Mmax)k
  %Iinputs+%Ooutputs (%Fmajor+%Rminor)pagefaults %Wswaps
```

使い方やフォーマットの意味は`man time`で見れる。多分大体zshのtimeと同じ。オプションが使える分高機能？

# 蛇足
「time コマンド」とかでぐぐって出てくるのは/usr/bin/timeの方ばっかりだし、`man time`して出てくるのも/usr/bin/timeの使い方なのに、`time`とコマンドを打つと思ったとおりに動いてくれなくて困ってた。
オプションは使えないし環境変数`TIME`をいじっても出力変わらないし。
ほんと時間無駄にした(´・ω・｀)
第六回オフラインリアルタイムどう書くの参考問題の回答例。groovy で。

第六回オフラインリアルタイムどう書くの参考問題
http://qiita.com/items/4c60f10b73812e86441c
の実装。
まだ出てない言語で行こうということで、まずは groovy で。


```groovy:Land.groovy
// groovy 2.0.1

def ptInRect( x, y, a, b )
{
    (0..1).every{
        (a[it]..b[it]).contains( [x,y][it] )
    }
}

def solve( src )
{
    areas=src.split(",").collect{
        it.split( "-" ).collect{ it.chars.collect{ it-('0'  as  char)} }
    }
    (0..99).count{ xy->
        x=xy%10
        y=xy/10 as int /*// to help markdown */
        areas.every{ 
            ptInRect( x, y, it[0], it[1] ) || ptInRect( x, y, it[0], it[2] )
        }
    }
}

testData().each{
    actual = solve( it[0] )
    if ( actual != it[1] ){
        printf( "**EXPECTED is %d ***", it[1] )
    }
    printf( "%s -> %d\n", it[0], actual );
}
def testData(){ 
    """\
    #1  23-94-28,89-06-51   11
    #2  11-84-58,02-73-69   40
    #3  18-41-86,77-04-32   26
    #4  81-88-23,64-58-14   0
    #49 28-31-92,13-98-79   48
    """.split( /\n/ ).collect{
        m = ( it =~ /\#\d+\s+(\S+)\s+(\d+)/ )
        m ? [ m[0][1], Integer.decode( m[0][2] ) ] : null
    }.findAll{ it }
;}
```

例によって、テストデータの大半は省略。

ruby の map や all が groovy だと collect や every であることになかなか慣れない。あと、divmod が無いらしい(見つけられてないだけかも)。

それと、10/2 が 2(Integer) ではなく 2.5(BigDecimal) になることを忘れていて、ちと苦しんだ。

実装の方針は、マス目の数が多くなったら遅すぎて駄目になるけどまあ 10✕10 固定なので全マス検査でいいよね、という態度で。

ruby と比べて気持ちいいのは、やっぱり it。
Segmented Prefix Scan

[GPGPU Advent Calendar](http://atnd.org/events/34539)22日目です！（ほんとは15日に書く予定だったのを急遽代わってもらいました。

とは言うもののだいぶネタが尽きてきているので、Segmented Prefix Scanの紹介でもします。
Segmented Prefix Scanとは、例えば

```cpp:input.cpp
int groupIndeces = {0, 0, 0, 1, 1, 2, 2, 2, 2, 3};
int values       = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
```

というデータがあった時に、グループごとのPrefix Scanすなわち部分和を計算して

```cpp:answer.cpp
int results = {3, 7, 26, 9};
```

という結果を計算する手法です（※和じゃなくても加法群であればいいようです？）。
グループ番号を行番号に見立てるなどして、行列計算する時に使ったりします。

## 通常のPrefix Scan
まず復習で、普通にPrefix Scanをしましょう（以降、exclusive scanとします）。
色々最適化はありますが、素朴にやるとこんなかんじになるはずです。

| ループ回数 | #0 | #1 | #2 | #3 | #4 | #5 | #6 | #7 | #8 | #9 | 説明 |
|:----------:|---:|---:|---:|---:|---:|---:|---:|---:|---:|---:|:----:|
|          0 |  0 |  1 |  2 |  3 |  4 |  5 |  6 |  7 |  8 |  9 |初期状態|
|          1 |  0 |  1 |  3 |  5 |  7 |  9 | 11 | 13 | 15 | 17 |1つ左を足す|
|          2 |  0 |  1 |  3 |  6 | 10 | 14 | 18 | 22 | 26 | 30 |2つ左を足す|
|          3 |  0 |  1 |  3 |  6 | 10 | 15 | 21 | 28 | 36 | 44 |4つ左を足す|
|          4 |  0 |  1 |  3 |  6 | 10 | 15 | 21 | 28 | 36 | 45 |8つ左を足す|

繰り返し回数は`log2(全要素数)`です。

## Segmented Prefix Scan
これにグループごとにする場合は、なんと基本的なアルゴリズムは普通のPrefix Scanそのままでちょっと加えればできちゃいます。方法は、[MITの資料](http://ocw.mit.edu/courses/mathematics/18-337j-applied-parallel-computing-sma-5505-spring-2005/lecture-notes)か、[NVIDIAの資料](http://mgarland.org/files/papers/nvr-2008-003.pdf)に書いてあります。

つまり、最初に、グループの先頭をtrueあとをfalseとするフラグを生成します

```flags.cpp
int groupIndeces = {0, 0, 0, 1, 1, 2, 2, 2, 2, 3};
int flags        = {T, F, F, T, F, T, F, F, F, T};
```

次に、こんな演算Add2を定義します。

```Add2.cpp
void Add2(int i, int j)
{
	values[j] = flags[j] ? values[j] : (values[i] + values[j]);
	flags[j] |= flags[i];
}
```
つまり、フラグは常に論理和を取り、自分のフラグがfalseだった場合のみ値を足し合わせるという演算です。こんな演算を使って普通のPrefix Scanをすれば

| ループ回数 | #0 | #1 | #2 | #3 | #4 | #5 | #6 | #7 | #8 | #9 | 説明 |
|:----------:|---:|---:|---:|---:|---:|---:|---:|---:|---:|---:|:----:|
|            |  0 |  1 |  2 |  3 |  4 |  5 |  6 |  7 |  8 |  9 |初期状態|
|          0 |  T |  F |  F |  T |  F |  T |  F |  F |  F |  T |フラグ|
|            |  0 |  1 |  3 |  3 |  7 |  5 | 11 | 13 | 15 |  9 ||
|          1 |  T |  T |  F |  T |  T |  T |  T |  F |  F |  T |1つ左を足す|
|            |  0 |  1 |  3 |  3 |  7 |  5 | 11 | 18 | 26 |  9 ||
|          2 |  T |  T |  T |  T |  T |  T |  T |  T |  T |  T |2つ左を足す|

となって結果が求められます。
ね、簡単でしょう（？）

## 注意点
ここで重要なのは（当たり前ですが）Segmented Prefix Scanにすると、条件分岐が入ってくることと、一方で繰り返し回数は最大で`log2(グループ内の最大要素数)`に減ることです。

## まとめ
というわけで、疎行列とベクトルの積とかをこれで簡単に計算できるようになります。が、行列・ベクトル演算なら、素直にライブラリ（cuSPARSEとかMAGMAとか）使ったほうがよいと思います。

というわけで、次回（明後日）はcuSPARSEの話をします。

その前に、明日は[@tanakmura](https://twitter.com/tanakmura)さんです！
デリゲートをキャストする

同じ引数、戻り値を持っていても以下のような代入はできません。

``` csharp:Program.cs
PropertyChangedEventHandler h1 = (_, __) => { };
EventHandler<PropertyChangedEventArgs> h2;

h2 = (EventHandler<PropertyChangedEventArgs>)h1;    // エラー
```

[ugaya40](http://qiita.com/users/ugaya40) さんから正しいやり方を教えて頂きました。

``` csharp:Program.cs
PropertyChangedEventHandler h1 = (_, __) => { };
EventHandler<PropertyChangedEventArgs> h2;

h2 = new EventHandler<PropertyChangedEventArgs>(h1);    // OK
```
NSDecimalNumberの初期化、および、NaNの判定処理

## 初期化  

````objc
NSDecimalNumber myNumber = [NSDecimalNumber decimalNumberWithString:@"0"];
````

## NaNの判定  

````objc
if ([[NSDecimalNumber notANumber] isEqualToNumber:myNumber]) {
}
````


>
cocoa - Determine if NSNumber is NaN - Stack Overflow
http://stackoverflow.com/questions/719417/determine-if-nsnumber-is-nan
>
Bioconductor 情報まとめ

(追記していきます)2013.1.11


+ [Bioconductor Home](http://www.bioconductor.org/)
+ [Bioconductor code search](http://rgm3.lab.nig.ac.jp/source/) by @oogasawa
+ [Coding Standards (コーディング規約)](http://wiki.fhcrc.org/bioc/Coding_Standards)
第6回オフラインリアルタイムどう書くrubyでの解答

現場での解答。ひどい・・
問題は
http://nabetani.sakura.ne.jp/hena/ord6kinship/

```ruby
GEN = [1, 2, 5, 14] 

def gen(n)
  GEN.each_with_index do |e, i|
    return i - 1 if n < e
  end
  3
end

def solve(q)
  x, y = q.split('->').map(&:to_i)
  return 'me' if x == y
  gx = gen(x)
  gy = gen(y)
  xw = (x - GEN[gx]) / 3
  yw = (y - GEN[gy]) / 3
  if gx == gy
    if xw == yw
      return 'si'
    elsif gx >= 2 and xw / 3 == yw / 3
      return 'co'
    end
  elsif (gx - gy).abs > 1
    return '-'
  elsif gx > gy
    if xw + GEN[gx-1] == y
      return 'mo'
    elsif  gx >= 2 and xw / 3  == yw
      return 'au'
    end
  else
    if yw + GEN[gy-1] == x
      return 'da'
    elsif  gy >= 2 and yw / 3 == xw
      return 'ni'
    end
  end
  '-'
end

DATA.readlines.each do |line|
  no,q,a = line.chop.split(/\s+/)
  ans = solve(q)
  print no + "\t"
  print ans
  puts ans == a ? 'o' : 'x'
end
__END__
0	5->2	mo
1	28->10	au
2	1->1	me
```
シェルスクリプトでエラー時の処理を行う方法

## 変数 $? を利用する方法
> $?
> 直前に実行されたコマンドのステータス（終了フラグ）を表します。これを使って実行されたコマンドが正しく終了したかどうか判定します。
>
> [連載　シェルスクリプト・ステップ・バイ・ステップ 第5回　シェルの変数に慣れる](http://www.atmarkit.co.jp/flinux/rensai/shell05/parameter.html)

```sh
#!/bin/bash

function my_command() {
    # 処理
    return 1
}

my_command
if [ $? -gt 0 ]; then
    # エラー処理
fi
```

いままで上記のようにコマンドを実行した後の $? の値を見て分岐させていた。
機能としては十分なのだが、もっとスッキリした書き方がある。

## OR演算子 || を利用する方法

コマンドの戻り値を直接利用する。論理積でコマンドを繋いでいく方法と同じやり方。

```sh
#!/bin/bash

function my_command() {
    # 処理
    return 1
}

function my_error() {
    # エラー処理
    exit 1
}

my_command || my_error
```

スタイリッシュだ。

## 参考リンク
* [シェルスクリプトのエラー処理を見やすく書く](http://d.hatena.ne.jp/yohei-a/20091222/1261458975)
* [短絡評価 - Wikipedia](http://ja.wikipedia.org/wiki/%E7%9F%AD%E7%B5%A1%E8%A9%95%E4%BE%A1)
* [意外に知られていない && と || の短絡評価](http://www.kijineko.co.jp/node/484/)
第6回オフラインリアルタイムどう書くの問題

オフラインでリアルタイムに「どう書く」をやるイベント(http://atnd.org/events/34368 )を行いました。

問題は
http://nabetani.sakura.ne.jp/hena/ord6kinship/
です。

実装ができた方はこちらのコメント欄からリンクを張っていただくと見つけやすくて助かります。
pry で require のエイリアスを定義しておく

pry でちょっとライブラリを試したいときに，毎回

```ruby
require 'hoge'
```

と打つのは面倒なので，`.pryrc` で次のようにエイリアスを定義してみた．

```ruby:.pryrc
alias :r :require
```

これで，

```ruby
r 'hoge'
```

と書くだけで，`require` することができる．
pry を起動する前から `require` するライブラリが決まっていれば，

```
pry -r hoge
```

として pry を起動すれば良い．
link_to の引数と展開の違いまとめ



いつもわからなくなるのでまとめとく。

▼基本 コントローラやアクション、IDなど予約パラメータやルート定義にあるものはURLに含まれる
<%= link_to "TEST1-1", controller:"product", action:"edit" %>
<%= link_to "TEST1-2", controller:"product", action:"edit", id: 1 %>

```
<a href="/product/edit">TEST1-1</a>
<a href="/product/edit/1">TEST1-2</a>
```

-
▼第２引数をハッシュにすればURL情報であることを明示でき、また第３引数が確実にhtml属性になる。
「ハッシュの中のid」と「外のid」の扱いに注目。
<%= link_to "TEST2-1",{controller:"product", action:"edit"},  id:"title" %>
<%= link_to "TEST2-2",{controller:"product", action:"edit", id:3}, id:"title" %>

```
<a href="/product/edit" id="title">TEST2-1</a>
<a href="/product/edit/3" id="title">TEST2-2</a>
```

第２引数の中にある予約パラメータ以外のもの(book_author)は、クエリとして渡される。
<%= link_to "TEST2-3",{controller:"product", action:"edit",id:3, book_author:"Bob"},  id:"title" %>

```
<a href="/product/edit/3?book_author=Bob" id="title">TEST2-3</a>
```


-

▼第３引数もちゃんとハッシュにしたほうがわかりやすい。
<%= link_to "TEST3",{controller:"product", action:"edit"}, {id:"title", class:"top"} %>

```
<a href="/product/edit" id="title">TEST3</a>
```

-
▼ハッシュにした場合、第３引数より後は無視される。
<%= link_to "TEST4",{controller: "product", action: "edit"}, {id: 1, class: "top"},{width: 100, height: 200} %>

```
<a href="/product/edit" class="top" id="1">TEST4</a>

```
TortoiseSVNのマージツール設定

WinMergeを使用する場合のマージツール設定をメモ。

`C:\Program Files\WinMerge\WinMergeU.exe -e -x -ub -wl -dl "■編集不可:相手 %tname■" %theirs -dm %mname %merged -wr -dr "■編集不可:自分 %yname■" %mine`

この設定では以下のように競合ファイルを表示します。

左　：リポジトリのファイル（参照用、編集不可） 
中央：マージするファイル（編集用） 
右　：ワーキングコピーのファイル（参照用、編集不可）
日本語に大体マッチする正規表現

`(?:[ぁ-ヶ]|[亜-黑]|ー)+`

実際にはポロポロ漏れがあるよーな
（Eclipseの全文検索でソース内の日本語を検索したときはそうでした。「不」「。」「一」などがマッチしない）
（Perlではほとんどマッチします）
RAMディスクを作成する


以下のコマンドを実行

```bash:
$ diskutil erasevolume HFS+ "ramdisk" `hdiutil attach -nomount ram://2097152`
```

ram://xxxxxx の xxxxxx の値は作成するRAMディスクの容量(MByte) * 2048 の値とする。
上記の例では 1GByte のRAMディスクを作成している。

上記を実行すると `/Volumes/ramdisk` にRAMディスクがマウントされる。 


## 参考
[How to create a RAM Disk with Mac OS X Terminal | Your Daily Mac](http://www.yourdailymac.net/2011/06/how-to-create-a-ram-disk-with-mac-os-x-terminal/)
出芽酵母のいちばん長い遺伝子

[Galaxy](https://main.g2.bx.psu.edu/)などを使っても良いのですが、[Bioconductor](http://www.bioconductor.org/)のパッケージを使ってやってみます。

## 準備
モデル生物の中には、遺伝子を含む転写領域の情報がパッケージとして用意されているものがあります。
ここでは出芽酵母（Saccharomyces cerevisiae）の遺伝子領域リストを取得するために、Bioconductorから[TxDb.Scerevisiae.UCSC.sacCer3.sgdGene](http://www.bioconductor.org/packages/release/data/annotation/html/TxDb.Scerevisiae.UCSC.sacCer3.sgdGene.html)パッケージをインストールします。

```r:パッケージのインストール
source("http://bioconductor.org/biocLite.R")
biocLite("TxDb.Scerevisiae.UCSC.sacCer3.sgdGene")
```

```r:遺伝子領域のリストを得る
# パッケージの読み込み
library(TxDb.Scerevisiae.UCSC.sacCer3.sgdGene)

# 遺伝子名とその開始位置・終了位置などのリストをGRangeList形式で読み込む
sacCer3.gene.GRangesList <- transcriptsBy(TxDb.Scerevisiae.UCSC.sacCer3.sgdGene,
                                          by="gene")

# データフレーム形式への変換
sacCer3.gene <- as.data.frame(sacCer3.gene.GRangesList)

```

今回使うパッケージでは、遺伝子領域のリストが表形式ではないGRangesList形式で提供されていますが、
表形式であるデータフレームに変換したほうが解析の見通しがつきやすいでしょう。
`head()`関数を使ってデータフレームの一部を確認できます。

```r:result
> head(sacCer3.gene)
  element seqnames start   end width strand tx_id tx_name
1   Q0010     chrM  3952  4338   387      +  6665   Q0010
2   Q0010     chrM  4254  4415   162      +  6666   Q0017
3   Q0032     chrM 11667 11957   291      +  6667   Q0032
4   Q0055     chrM 13818 16322  2505      +  6668   Q0050
5   Q0055     chrM 13818 18830  5013      +  6669   Q0055
6   Q0055     chrM 13818 19996  6179      +  6670   Q0060
```

##一番長い遺伝子を探す

```r:データフレーム内の目的行を抽出
# 遺伝子の長さが最大の行番号を取得
sacCer3.gene.maxRow <- which.max(sacCer3.gene$end-sacCer3.gene$start)

# 上で取得した行番号をつかってデータフレームの一部にアクセス
sacCer3.gene[sacCer3.gene.maxRow,]
```

上のコードを実行すると、

```r:result
> sacCer3.gene[sacCer3.gene.maxRow,]
     element seqnames  start    end width strand tx_id tx_name
4209 YLR106C   chrXII 349006 363738 14733      -  4390 YLR106C
```

こんな結果が出てきます。YLR106Cというのは[MDN1](http://www.yeastgenome.org/cgi-bin/locus.fpl?dbid=S000004096)の別名です。



## いやぁ、Rって本当にいいもんですね

_「勝つか負けるかはもう問題ではない。日本の国民を生かすか殺すかなのです」_

そもそもなんで酵母の最長遺伝子長なんてものが知りたくなったのかは[こちら](http://qiita.com/items/f946a2744fec5b994945)に書きました。
アプリ名-Prefix.pchに書いておきたい内容


## アプリ名-Prefix.pch
````objectivec:
#import <Availability.h>

#ifndef __IPHONE_5_0
#warning "This project uses features only available in iOS SDK 5.0 and later."
#endif

#ifdef __OBJC__
    #import <UIKit/UIKit.h>
    #import <Foundation/Foundation.h>
    #define LOG(A, ...) NSLog(@"LOG: %s:%d:%@", __PRETTY_FUNCTION__,__LINE__,[NSString stringWithFormat:A, ## __VA_ARGS__]);
#endif
````

## LOG()
- ログにクラス名やコードのラインを出す
- これがないと不安になる
Rails3.2.9以降ではActiveModelのid項目にオブジェクトを直接設定するとNoMethodErrorになる


##発生する問題
Rails3.2.8までは以下のようなコードが動いていました。

````ruby
# Rails3.2.8
hoge = Hoge.find(1)

piyo.hoge_id = hoge

piyo.hoge_id # => 1
````

Rails3.2.9以降で同じコードを実行すると、`NoMethodError`が発生します。

````ruby
# Rails3.2.9
hoge = Hoge.find(1)

piyo.hoge_id = hoge
# NoMethodError: undefined method `to_i' for #<Hoge:0x007f9c4bbafe20>
````

これはハッシュでbuild/createするような場合も同様です。

````ruby
# Rails3.2.9
hoge = Hoge.find(1)
params = { name: 'fuga', hoge_id: hoge }

piyo.build_fuga(parmas)
# NoMethodError: undefined method `to_i' for #<Hoge:0x007f9c4bbafe20>
````

##解決策
解決策としては`hoge_id`には`hoge`オブジェクトではなく、`hoge.id`のように、明示的にidを渡します。

````ruby
# Rails3.2.9
hoge = Hoge.find(1)

piyo.hoge_id = hoge.id

piyo.hoge_id # => 1
````

##備考
Rails3.2.8からRails3.2.10 or 3.2.11にバージョンアップした場合でも同じ問題が発生するので、注意してください。

##参考サイト
- http://stackoverflow.com/questions/13348980/activerecord-to-i-method-removed-in-rails-3-2-9
- https://github.com/rails/rails/commit/96a13fc7
TopHatのオプションはデフォルトでヒトなどの哺乳類に最適化されてる

```
-I/--max-intron-length <int>	 The maximum intron length. When searching 
for junctions ab initio, TopHat will ignore donor/acceptor pairs farther than 
this many bases apart, except when such a pair is supported by a split segment 
alignment of a long read. The default is 500000.
```

[TopHat :: Center for Bioinformatics and Computational Biology](http://tophat.cbcb.umd.edu/manual.html)

下は酵母のRNA-SeqをIGVで可視化したもの。青い線は本来、Exon間にまたがってMapされたリード (Junction reads)のIntron部分を示しているはずなのだが、ここでは異様に長くなっている。
TopHatのデフォルトでは500,000 bpにわたる長さのIntronにも対応しているためこのようなことが起こる。酵母ではそんな長さのIntronは存在しない（たぶん[遺伝子長が最大のMDN1でも、遺伝子全体の長さが15,000bpくらい](http://qiita.com/items/e9197f8a7b6743107866)）ので、上のオプションでmax-intron-lengthをもっと小さな値(せいぜい20,000 bpとか？)にしてあげたほうがいい。

![junction](https://dl.dropbox.com/u/80771782/Qiita/qiita_f946a2744fec5b994945.png)


## (追記)Intronの長さを実際に調べてみた
[酵母で最大の遺伝子長を調べてみた](http://qiita.com/items/e9197f8a7b6743107866)けれど、
よく考えたら同じ要領で直接イントロンの長さを調べられるのでやってみた。
(2013/01/15)

```r:code
library(TxDb.Scerevisiae.UCSC.sacCer3.sgdGene)
sacCer3.intron.GRangesList <- intronsByTranscript(TxDb.Scerevisiae.UCSC.sacCer3.sgdGene)
sacCer3.intron <- as.data.frame(sacCer3.intron.GRangesList)
```


```r:head()でデータフレームの中身を確認
> head(sacCer3.intron)
  element seqnames  start    end width strand
1      26     chrI  87388  87500   113      +
2      39     chrI 142254 142619   366      +
3     104     chrI 151007 151096    90      -
4     127    chrII  31228  31228     1      +
5     148    chrII 110880 110948    69      +
6     153    chrII 125155 125270   116      +
```

よって

```r:code
maxRow <- which.max(sacCer3.intron$width)
sacCer3.intron[maxRow,]
```

```r:result
> sacCer3.intron[maxRow,]
    element seqnames start   end width strand
330    6670     chrM 16471 18953  2483      +
```

一番長いイントロンのサイズは2483 bpなので、max-intron-lengthは2.5kbくらいにしてみるとよい？


## (さらに追記)くらべてみた
--max-intron-lengthを、(1) 500,000 bp (2) 50,000 bp (3) 5,000 bp の 3通り設定してそれぞれ実行して、マッピング結果を上から並べてIGVでくらべてみた。
（なお、鋳型長300ntでpaired-endのリード長33&34なので --mate-inner-distを220にっ設定し、--segment-lengthを15に設定してある。）


左側に見えるのは正しいjunctionで、右側に見えるのは誤ってjunctionと認識されたもの。
ちょっと見にくいので右クリックから画像を拡大してみてくだされ。
 (2), (3)で誤ったjunctionが除かれている。
![YDR025W](https://dl.dropbox.com/u/80771782/Qiita/YDR025W.png)

だけど(2)でもまだやっぱり長すぎて、下の図のようなjunctionがうっすら生じてしまうことがあります。でも(3)の設定なら消えてました。
![YBR078W](https://dl.dropbox.com/u/80771782/Qiita/YBR078W.png)

やっぱり見にくいのでこっちも右クリックから拡大してみてくだされ。それでは。
DataGridViewのRowsとCellsのforeach

以下のようにforeachすると、それぞれのrow/cellがobject型になってしまいます。

```
foreach(var row in dataGridView1.Rows){} //rowはobject型
foreach(var cell in this.dataGridView1.Rows[1].Cells) {} //cellはobject型
```

そこで、Cast<>()メソッドを使用して以下のようにすれば、うまくいく。

```
foreach(var row in dataGridView1.Rows.Cast<DataGridViewRow>()) {
	foreach(var cell in row.Cells.Cast<DataGridViewCell>()) {
	}
}
```
R起動時に特定の処理を毎回実行する

起動時に`getwd()`して出てきたディレクトリ配下に.Rprofileという名前のファイルを置けばよい。
ドットで始まる名前のファイルは作るのが面倒な場合があるので、例えば以下のようにRの関数を使ってファイルを作成する。

```r:.Rprofileの作成
my.Rprofile <- "
 #ここに任意のコードを書いておく
 #文字列を囲むのにダブルクオーテーションが使えないことに注意
" 
cat(my.Rprofile, file=".Rprofile")
```

`Sys.getenv("USERPROFILE")`して出てきたディレクトリに置くと、すべてのディレクトリでこのファイルに書いた処理が実行される。
（`R.home()`以下に置いても全ディレクトリで実行されるようにはならない）

.RprofileはR起動時に読み込まれるので、ここに実行したい処理を書く。
例：

+ 特定のライブラリを読み込む
+ 特定の自作関数を読み込む（ここで、ライブラリなどを読み込む関数を書いてもよい？）
+ CRANミラーの設定や[日本語をグラフで利用するための設定](http://qiita.com/items/2602c82aae0c34ee3900)などをする 

などなど
詳細は`help(Startup)`実行のこと
Redisメモ


## サーバの手動起動

```bash:
redis-server /user/local/etc/redis.conf
```

## ログイン時に自動起動する

```
to have launchd start redis at login:
    ln -sfv /usr/local/opt/redis/*.plist ~/Library/LaunchAgents
Then to load redis now:
    launchctl load ~/Library/LaunchAgents/homebrew.mxcl.redis.plist
```


## ワイルドカードにマッチするKeyを一括削除する

シェルプロンプトで

```
redis-cli keys 'sessions:*' | xargs redis-cli del
```
予約語でメソッド呼び出し

[PHP 5.5.0 Alpha3](https://github.com/php/php-src/blob/php-5.5.0alpha3/NEWS) でジェネレータに `Generator::throw()` というメソッドが出来たのを見て、「キーワード（予約語）のメソッド！？」と思ったのですが、php は予約語でもメソッド呼び出しは可能でした。

ただし php のコードで定義することは出来ないので、マジックメソッドを使う必要があります。

```php
<?php
class Hoge
{
    // Parse error: syntax error, unexpected 'throw' (T_THROW), expecting identifier (T_STRING)
    // private function throw($message)
    // {
    //     throw new RuntimeException($message);
    // }

    private function _throw($message)
    {
        throw new RuntimeException($message);
    }

    private function _if($condition, callable $true, callable $false)
    {
        if ($condition)
        {
            return $true();
        }
        else
        {
            return $false();
        }
    }

    public function __call($name, $args)
    {
        $method = '_' . $name;

        if (method_exists($this, $method))
        {
            return call_user_func_array([$this, $method], $args);
        }
        else
        {
            $klass = get_class($this);
            throw new BadMethodCallException("undefined method \"$klass::$name\""); //"
        }
    }
}

try
{
    $o = new Hoge();

    $o->if(1==1, function () {
        var_dump("true");
    }, function () {
        var_dump("false");
    });

    $o->if(1==2, function () {
        var_dump("true");
    }, function () {
        var_dump("false");
    });

    $o->throw("hello");
}
catch (Exception $ex)
{
    var_dump($ex->getMessage());
}
```

**実行結果**

```
string(4) "true"
string(5) "false"
string(5) "hello"
```
UIButton.imageView の ContentMode

UIView には内容をどのようにスケーリングするかを指定するための contentMode プロパティがある。UIImageView ではよく使うと思う。
UIButton のアイコン部分にあたる UIImageView にも当然適用されるものだと思っていたが、どうやらうまく働いてくれないらしい。

これだめっぽい

```objectivec
UIButton *btn;
btn.imageView.contentMode = UIViewContentModeScaleAspectFill;
```

こっちではできる

```objectivec
UIButton *btn;
// 個別に指定する
btn.contentVerticalAlignment = UIControlContentVerticalAlignmentFill;
btn.contentHorizontalAlignment = UIControlContentHorizontalAlignmentFill;
```

Aspect Fill はどうやるんだろう。
HerokuでとりあえずDBのバックアップをとっておく方法


## バックアップを取るまで

バックアップを取れるAdd Onを入れる

```
heroku addons:add pgbackups
```

バックアップを取得

```
heroku pgbackups:capture
```

## ローカルにdumpファイルを保存するまで

バックアップ一覧を見る

```
heroku pgbackups
```

バックアップ先のURLを取得

```
heroku pgbackups:url
```

リビジョン(`heroku pgbackups`で出てくるID)を引数に取ることも可能

```
heroku pgbackups:url b001
```

これはdumpファイルのURLなので`wget`,`curl`などで取得して、`pg_restore`で復元できる

一例としては、以下のようにする

```
curl heroku pgbackups:url | pg_restore --verbose --clean --no-acl -O -h ${host} -U ${user} -d ${database}
```

## 参考
https://devcenter.heroku.com/articles/pgbackups
Ubuntu Linux で Raspberry pi に Raspbian をインストールする

http://elinux.org/RPi_Easy_SD_Card_Setup#Copying_an_image_to_the_SD_card_in_Linux_.28command_line.29

ココにだいたい書いてあるんだけどUbuntuでの最短の手順をメモっておく


## 起動と初期設定に必要なもの
- 2GB以上のSDカード
- HDMIケーブル　またはHDMI-DVI変換アダプタとDVIケーブル
- LANケーブル
- スマホの充電に使う、MicroUSBケーブルとUSB-ACアダプタ。5V 700mA以上必要
- キーボード
- マウス

-----

# Ubuntuでの作業

## イメージをダウンロードする
http://www.raspberrypi.org/downloads


## ddの代替コマンドであるdcflddを入れておく
ddコマンドだと書き込みがうまくいってるのか、終わったかどうかわからないため
`sudo aptitude install dcfldd`


## df -hでSDカードを探す
## SDカードのパーティションをすべてumountする
## dcflddでイメージを書き込む
## sudo syncする

## SDカードを抜いて、Raspberry piに挿して、いろいろ繋げて起動する
MicroUSBケーブルで給電を開始するといきなり起動する。

以降は、初回起動時の設定をRaspberry piにつなげたキーボードで行う

-----

# Raspberry piでの作業

## expand_rootfs設定する
初期設定では2GBのパーティションしか使わないようになっているので。


## change_pass設定する
piユーザーのパスワードを設定する


## change_timezone設定する
Asia→Tokyoを選択


## ssh設定する
Enableにする


## boot_behaviour設定する
実行時にNoClassDefFoundErrorやCould not find or load main classがでる場合の対処法

# すべてpackage宣言をした場合のみ
## 1. javaのクラスファイルはpackageの階層と同じディレクトリ構成にしなければならない。
```java:Test.class
package testpackage;

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}
```
上記の場合は
`/testpackage/HelloWorld.class`
というディレクトリ構成にしなければならない。
## 2. packageの場合はpackage名を先頭に付けなければならない。
`java testpackage.Helloworld`
## 3. javaを実行する際のクラスパスにpackageを含めてはならない。
例えば`/home/testpackage/HelloWorld.class`を実行したい場合、
`java -classpath /home/testpackage testpackage.Helloworld`
ではエラーになる。
以下のようにする。
`java -classpath /home testpackage.Helloworld`
kobitoの編集欄のEOFが明示的にわかるようにして欲しい。

長めの記事を書いたときに実感しやすいのですが、入力した領域の下端までしかスクロールできないので、編集欄の下端が、表示領域における下端なのか、入力内容の下端なのか区別しにくいです。つまり、EOFの場所がわかりにくいということです。
このあたりのモヤモヤは、長めの記事をkobitoで書いたことある人に共通のものではないかと思っているのですが、他ユーザーの意見などを聞いて、同じような人が多いようであれば、改修をお願いします。
zsh導入した

ubuntu12.04にzsh入れたので備忘録として書く

### zshインストール＆デフォルトシェル変更
```sh
$ sudo apt-get install zsh
$ chsh
```

tmuxのデフォルトシェルも忘れずに変更

```text:.tmux.conf
set -g default-shell /bin/zsh
```

再起動したらそこはzshの世界だった。

### oh-my-zshとzのインストール
[oh-my-zsh](https://github.com/robbyrussell/oh-my-zsh)

```sh
$ git clone git://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh
$ cp ~/.zshrc ~/.zshrc.orig
$ cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc
```

[z](https://github.com/rupa/z)
移動が便利になるらしいので。
というか、これを入れたいがためにzshにした

```sh
$ mkdir ~/.zsh
$ cd ~/.zsh
$ git clone git://github.com/rupa/z.git
```

```text:.zshrc
_Z_CMD=j
source $HOME/.zsh/z/z.sh
precmd() {
    _z --add "$(pwd -P)"
}
```
ios: NSUserDefaultsのいろいろ

NSUserDefaultsをデータを取得する

```TestController.m

   NSUserDefaults *uds = [NSUserDefaults standardUserDefaults]; 
   NSMutableArray *arr =[uds mutableArrayValueForKey:@"save_songs"];

```

NSUserDefaultsにデータを保存

```TestController.m

    NSUserDefaults *uds = [NSUserDefaults standardUserDefaults];  
    [uds setObject:_arr forKey:@"save_songs"];

```

NSUserDefaultsをデータの中身を削除する

```TestController.m

   NSString *appDomain = [[NSBundle mainBundle] bundleIdentifier];
    [[NSUserDefaults standardUserDefaults] removePersistentDomainForName:appDomain];

```
Haxe/C++は、Visual Studio 2011, 2012が入ってるとエラーになる

Windowsを使っている場合、Haxe/C++のコンパイルにはVisual C++が使用されますが、必要になるVisual Studioは2010以前のもので、使っているPCに2011以降のVisual Studioが入っていると以下のようなコンパイルエラーを起こします。

```
String.obj : error LNK2011: precompiled object not linked in; image may not run
```

この現象は下記のURLの方法で解決することができます。
http://www.nme.io/community/forums/general-discussion/need-help-with-building-for-windows-c-having-some-linking-error/

C:\Motion-Twin\haxe\lib\hxcpp\2,10\build-tool\msvc-toolchain.xml
(C:\Motion-TwinはHaxeをインストールしたフォルダ、2,10はhxcppのバージョン)
のファイルの冒頭(\<xml\>の直後)に以下の一行を挿入する。

```xml:
<setenv name="VS110COMNTOOLS" value="disable" />
```
空のjQueryオブジェクトを作って要素を追加する方法


空のjQueryオブジェクトは`$()`で作ることができる

要素の追加は[.add()](http://api.jquery.com/add/ ".add() | jQuery API Documentation")だが、その語感から破壊的メソッドと勘違いしこんなことをしがち。

```js
var $list = $();
var i = 3;
while (i--) {
  $list.add($('<div>'));
}
console.log($list.length);    // 0
```

実は[.add()](http://api.jquery.com/add/ ".add() | jQuery API Documentation")は破壊的ではなく、新しいjQueryオブジェクトが戻ってくるのでこちらが正解。

```js
var $list = $();
var i = 3;
while (i--) {
  $list = $list.add($('<div>'));
}
console.log($list.length);    // 3
```
HTML Formのラジオボタンをでかいラベルで押しやすくする

![スクショ](https://dl.dropbox.com/u/240444/qiita/flat-radiobutton.png)
↑こんな見た目だけどラジオボタンとして動作します。


input要素のradioは、なんかすごく小さい丸いポッチを押すことで排他的に選択肢が切り替わるForm要素のコンポーネントである。
対応するlabel要素をつかうことで、そのlabel要素が押された時にも選択肢が切り替わるようになっている。

スマホだとちょっと使いにくい。
いっそ小さいポッチなど消してしまって、でかく表示したlabelを押すことで選んでいる選択肢が切り替わるようなUIが作りたい。

（div要素や複数のトグルボタンの組み合わせで実現するよりも、ふつうのForm要素のinputとして、jsでそのまま選択値をgetしたりsetしたりできると楽そうなので）


ラジオボタンは小さいポッチの見た目でどれが選ばれているのかわかるようになっているが、それを消してしまうので、
選択されているlabelだけ見た目が切り替わってもらう必要がある。

それをCSSで実現するには以下のようにする。


```css
input[type="radio"] {
    /* ラベルでのみ選択させる場合はnoneにする */
    display:none;
    /* firefoxなど一部ブラウザではサイズ指定が効かない仕様 */
    width:23px;
    height:23px;
}
/* ラジオボタンに対応するラベル */
input[type="radio"]+label {
    display:inline;
    font-size:22px;
    border:1px solid black;
    border-radius:10px;
    padding:5px;
    background:white;
    color:black;
}
/* 選ばれているラジオボタンに対応するラベル */
input[type="radio"]:checked+label {
    background:black;
    color:white;
}
```

HTMLはこんなかんじ

```html
<form id="big-radio">
    <input id="radio-sushi" type="radio" name="meshi" value="寿司">
    <label for="radio-sushi">寿司</label>

    <input id="radio-pizza" type="radio" name="meshi" value="ピザ">
    <label for="radio-pizza">ピザ</label>

    <input id="radio-sake" type="radio" name="meshi" value="酒">
    <label for="radio-sake">酒</label>
</form>
```

もうちょっとマトモにCSS書いたら複数選択肢から一つ選ぶUIが作りやすくなりそう。





オマケ
jQueryでどの選択肢が切り替わったらイベントをうけとるのは

```js
$('input[name="meshi"]').change(function(){
   var val = $(this).val();
   alert(val);
})
```

でできる
Android の jUnit テストで Context が欲しい時


Activity のテストなら ``ActivityInstrumentationTestCase2`` 、 Service なら ```ServiceTestCase``` を使うべきなんでしょうけど、Android って事あるごとに Context が必要なので、ただのクラスライブラリのテストでも必要なことがシバシバ。

``` java:HogeTest.java
public class HogeTest extends InstrumentationTestCase {
	/** ApplicationContext を取得します */
	private Context getApplicationContext() {
		return this.getInstrumentation().getTargetContext().getApplicationContext();
	}
}
```

## 参考
* [androidの単体テスト(AndroidTestCase) - Androidのド肝] (http://blog.haw.co.jp/android/?p=471) - クラス図がとても役に立ちました
* [android - Accessing application context from TestSuite in Setup() before calling getActivity() - Stack Overflow](http://stackoverflow.com/questions/5544205/accessing-application-context-from-testsuite-in-setup-before-calling-getactivi)
Xcodeプロジェクト内のクラスの依存関係を図示する

他人から引き継いだプロジェクトの大まかな全体設計を把握したい場合、規模の大きいライブラリの一部だけ取り出して使用したい場合、複雑になってしまったコードをリファクタリングしたい場合等、プロジェクト内のクラスの依存関係が一望できると有益な場面は多いのではないでしょうか。

objc_depというスクリプトを用いると、下記のように、Xcodeプロジェクト内のクラスの依存関係を示す図をコマンド一発で生成することができます。

![依存関係図のサンプル](http://f.cl.ly/items/3a402w2n2n3D1q1S1V2b/DepSample.png)

このスクリプトの使い方、生成される図の見方等を紹介します。



##スクリプトの実行方法
次のURLからダウンロードしてきて解凍すると、objc_dep.py というファイルが入っています。

[https://github.com/nst/objc_dep](https://github.com/nst/objc_dep) 


そのスクリプトを適当な場所に置き、ターミナルから次のように実行します。

    $ python objc_dep.py {プロジェクトのパス} > {出力ファイル名}.dot



たとえばホーム直下にDemoというプロジェクトフォルダがあり、demo.dotというファイル名で出力したい場合は、

    $ python objc_dep.py ~/Demo > demo.dot

というコマンドになります。



##依存関係図を表示
出力される.dotという形式のファイルは、[Graphviz](http://www.graphviz.org/) または [Omnigraffle](http://www.omnigroup.com/) というアプリケーションで表示できます。（Omnigraffle は定評のあるダイアグラム作成ソフトですが、なにぶん有料なので、とりあえず objc_dep を試してみたいという方は、オープンソースの Graphviz をオススメします。）


##依存関係図の見方
ここでは試しに、 "Facebook iOS SDK" に付属している "Hackbook" というサンプルアプリの依存関係を出力してみました。

![Hackbook の依存関係図](http://f.cl.ly/items/091k1A410I2B0K1G0p3k/Dep1.png)


出力された図を見ると、青い矢印で結ばれているところがあります。

![相互import](http://f.cl.ly/items/3G312o3R3V1n132g2D22/Dep2.png)

ソースコード内のコメントによると、「相互にimportしている」場合に青い矢印で結ばれるようです。

コードの保守性の観点から、クラスの相互依存はなるべく避けたいところかと思います。もし青い矢印が存在した場合、プロトコルを使用して直接参照を片方向からのみにできないか検討する、といったようにリファクタリングの指針とすることができます。


またこの例には出てきませんでしたが、赤い矢印が出てくることがあります。

![pchからのimport](http://f.cl.ly/items/3s2N1P1U0z1j122z0U2E/Dep3.png)

赤い矢印は、.pchファイルからのimportを意味します。

.pch ファイルから import されたヘッダは全クラスから参照される（この参照の矢印は描画されない）ため、このような使用になっているものと思われます。

こちらも、.pch で import しているのにさらに個別のクラスでも import している、.pch で import すべきではないクラスを import している、といったように不要な依存性がないかのチェックの指針となります。


同じくこの例には出ていませんが、カテゴリは（他のクラスに依存していない場合は）依存関係図から切り出して右上の方に列挙してくれます。カテゴリはその性質上多くのファイルから参照されていても設計上の問題とはならないため、図がゴチャゴチャしないようにこういう仕様になっているようです。
LESS + CSS Lint の設定

less を使いつつ、CSS Lint も同時に使う設定。

コマンドを使い『less から css にコンパイル、出力した css に Lint を実行』まで一回で行う。

#### 必要環境 )

* [Node.js](http://nodejs.org/)
    * [npm-csslint](https://github.com/stubbornella/csslint/wiki/Command-line-interface)
    * [npm-less](http://lesscss.org/)

#### 設定)

連続して実行する関数を zsh に登録 (.zshrc に追記)
プロセス置換を使い、一時ファイルを生成しないで実行。

bash でもプロセス置換はあるので zsh 必須では無い。

```.zshrc
function lesslint {
  csslint <(lessc $@) 
}
```

そして実行

```sh
$ lesslint my.less
```

とりあえずこんな感じで。
誰か、もっと優雅なやり方を教えて下さい。。。
アプリ内のデータをCSV形式でメール添付する



## 手順
- MessageUI.frameworkを追加
- 書き出すデータをカンマと改行区切りのNSStringに整形
- MFMailComposeViewControllerにデータをセット、表示


## コード

例として、ObjというNSManagedObjectクラスのid, ユーザ名, 日付, コメントを取得したいとします。

``` objc:
// メールを利用できるかチェック
if (![MFMailComposeViewController canSendMail]) {
    return;
}
MFMailComposeViewController* controller = [[MFMailComposeViewController alloc] init];
[controller setMailComposeDelegate:self];

// 取得したNSStringをNSdataに変換
NSData* data = [[Obj exportCSVString:objects] dataUsingEncoding:NSUTF8StringEncoding];

// mimeTypeはtext/csv
[controller addAttachmentData:data mimeType:@"text/csv" fileName:@"export.csv"];

// 表示
[self.navigationController presentViewController:controller animated:YES completion:nil];
```

``` objc:
- (NSString*)exportCSVString:(NSArray*)sources
{
    NSDateFormatter* f = [[NSDateFormatter alloc] init];
    [f setDateFormat:@"yyyy-MM-dd"];
    
    // 1行目だけ先に追加
    NSMutableArray* all = [@[@"id,user_name,date,comment"] mutableCopy];
    
    // データを降順にソート
    NSSortDescriptor* desc = [[NSSortDescriptor alloc] initWithKey:@"date" ascending:NO];
    sources = [sources sortedArrayUsingDescriptors:@[desc]];
    
    // カンマ区切りで追加
    for (NSInteger i=0; i<sources.count; i++) {
        Obj* obj = [sources objectAtIndex:i];
        NSArray* adding = @[[obj.identifier stringValue], obj.user.name, [f stringFromDate:obj.date], obj.comment];
        NSString* str = [adding componentsJoinedByString:@","];
        [all addObject:str];
    }
    // CRLFで区切ったNSStringを返す
    return [all componentsJoinedByString:@"\r\n"];
}
```
Notificationを使ってテキストの変更に対応させる


###(ほぼ自分用のメモ)一連の手順

####１．通知を受け取るための登録をする

``` Objectivec
    NSNotificationCenter* nc = [NSNotificationCenter defaultCenter];
    [nc addObserver:self selector:@selector(textDidChanged:) name:UITextViewTextDidChangeNotification object:nil];
    [nc addObserver:self selector:@selector(textDidEndEditing:) name:UITextViewTextDidEndEditingNotification object:nil];
    [nc addObserver:self selector:@selector(textDidBiginEditing:) name:UITextViewTextDidBeginEditingNotification object:nil];
```

####２．selectorで指定したメソッドを追加し必要な処理を実装

``` Objectivec
// テキスト変更時の通知を受け取る
-(void) textDidChanged:(NSNotification *) notification{
}
```

``` Objectivec
// テキスト変更開始時の通知を受け取る
-(void) textDidBiginEditing:(NSNotification *) notification{
}
```

``` Objectivec
// テキスト変更終了時の通知を受け取る
-(void) textDidEndEditing:(NSNotification *) notification{
}
```

####３．登録した通知を削除する

``` Objectivec
    [[NSNotificationCenter defaultCenter] removeObserver:self];
```

####参考にした情報
[NSNotificationCenter](http://iphone-tora.sakura.ne.jp/nsnotificationcenter.html "NSNotificationCenter")

[NSNotificationCenter : iOS Develper Library](http://developer.apple.com/library/ios/#documentation/uikit/reference/uitextview_class/Reference/UITextView.html "NSNotificationCenter : iOS Develper Library")
自分のWallに投稿するロジック


※Facebook SDK Ver3.1になって、参照・書込の権限が分離されているので、書き込む場合は別途権限を取得する必要がある。

``` objective-c
    if(FBSession.activeSession.isOpen){
        
        if([FBSession.activeSession.permissions indexOfObject:@"publish_stream"] == NSNotFound){
            [FBSession.activeSession reauthorizeWithPublishPermissions:[NSArray arrayWithObjects:@"publish_stream", nil] defaultAudience:FBSessionDefaultAudienceFriends completionHandler:^(FBSession* session, NSError* error){
            }];
        }

        NSMutableDictionary* paramDict = [[NSMutableDictionary alloc] initWithObjectsAndKeys:
                                          @"This is test column", @"message", nil];
        [FBRequestConnection startWithGraphPath:@"me/feed" parameters:paramDict HTTPMethod:@"POST"
                              completionHandler:^(FBRequestConnection* connection, id result, NSError* error){
            DLog(@"error : %@", error);
            DLog(@"result : %@", result);
        }];
    }
```
[Chef]recipe中でchef-clientの実行を中止する

raiseが使えそうです。

```ruby:sample.rb
Chef::Log::info( node.chef_environment + " is environment." )
if node.chef_environment != "production"
  raise "Environment does not match!"
end
```

```bash:結果
[root@chef ~]# chef-client

[2013-01-10T14:44:11+09:00] INFO: *** Chef 10.14.4 ***
...
[2013-01-10T14:47:10+09:00] INFO: _default is environment.
...
RuntimeError
------------
Environment does not match!
...
Cookbook Trace:
...
 14>>   raise "Environment does not match!"
```

※単にEnvironment別の処理をするだけならEnvironmentの機能を使ってもできます。
SECURITY WARNING: No secret option provided to Rack::Session::Cookie.

```
SECURITY WARNING: No secret option provided to Rack::Session::Cookie.
```
Gemfileでバージョンを指定
gem 'rack', '1.4.1'

##参考
[SECURITY WARNING: No secret option provided to Rack::Session::Cookie](http://stackoverflow.com/questions/14191053/security-warning-no-secret-option-provided-to-racksessioncookie)
Redmineでトップページの帯の色を変える

Redmineのトップ帯を変更して、他とちょっと雰囲気を変えたいとき。

※下記のスタイルシート「background-color」を変更する。
※Redmine 2.2.0、line. 28

```` stylesheets/application.css
#header {height:5.3em;margin:0;background-color:#628DB6;color:#f8f8f8; padding: 4px 8px 0px 6px; position:relative        ;}
````

Remarks:
画面の色を取得するカラーピッカー「FE – Color Palette」 | USB Tools
http://usbtools.jp/graphics/fe_colorpalette/
Titanium Alloy で Android アプリで Alloy is not defined が出る場合の対処

参照：http://developer.appcelerator.com/question/144351/alloy-is-undefined-in-android-lib-file


require で読み込んでいるモジュールは別のコンテキストになるので、Alloy オブジェクトを require('alloy') で読み込まないといけないとか。
ssh-agentでsshのパスワード入力をサボる

一応zsh。.zshrcに以下を追記

```sh:.zshrc.linux
# -*- mode: shell-script -*-                                                                                            

echo -n "ssh-agent: "
if [ -e ~/.ssh-agent-info ]; then
    source ~/.ssh-agent-info
fi

ssh-add -l >&/dev/null
if [ $? = 2 ] ; then
    echo -n "ssh-agent: restart...."
    ssh-agent >~/.ssh-agent-info
    source ~/.ssh-agent-info
fi
if ssh-add -l >&/dev/null ; then
    echo "ssh-agent: Identity is already stored."
else
    ssh-add
fi

```
【改訂】TypeScriptのtsc -wでコンパイルされない件。

# 2019/02/01 改訂: コンパイルされるようになっていました
tscのVersion 3.3.1で、ファイルの変更を検知して自動的にコンパイルされるようになっていました :tada: 


↓以下の内容は古いままです。
----

# 問題

TypeScriptのtscコマンドにおける-w（--watch：ソースファイルの変更を検知して自動的にコンパイルしてくれるオプション）が、どうも効いていない。

変更を検知するが、jsファイルを出力してくれない。

### 環境

    OS：Ubuntu 12.10 64bit
    npm：1.1.69
    TypeScript：0.8.1？

### 実行すると

    $ tsc form.ts -w

    Recompiling(Thu Jan 10 2013 00:46:49 GMT+0900 (JST)): /usr/lib/node_modules/typescript/bin/lib.d.ts,/path/form.ts

のような表示はされるが、form.jsファイルが出力されず。

ソースを変更すると上記の"Recompiling xxx"というのは表示されるものの、やっぱりjsファイルは出力されず。

## 回避方法

どうもバグのようですが、2013/1現在、修正されていない模様。

てことで

[Typescript watch compiler](https://npmjs.org/package/tscw)

を使います。

これは、tscコマンドのwatchを常に行うようにしたものです。

インストールは以下の通り。

    sudo npm install -g tscw

 
### 実行すると

    $ tscw form.ts

    TSCW is watching for changes, initializing first recompile.

      -&gt; recompiling... done.

となり、ディレクトリを確認すると無事form.jsファイルが作成されていました。

※tscw **-w** form.ts ではない点に注意。

また、ソースを修正すると

    $ tscw form.ts

    TSCW is watching for changes, initializing first recompile.

      -&gt; recompiling... done.

    [1:10:11]: change detected in file form.ts

      -&gt; recompiling... done.

 となり、変更を検知してコンパイルされていました。

tscwコマンドは、tscコマンドのオプションすべてが使えるようです。
Fedoraのlibjpeg-turboパッケージが2つに分かれていた。

[libjpeg-turbo](http://pkgs.fedoraproject.org/cgit/libjpeg-turbo.git) と [libjpeg-turbo-compat](http://pkgs.fedoraproject.org/cgit/libjpeg-turbo-compat.git) の2つになっていた。

libjpeg-turbo-compatのspecファイルのChangeLogを見ると、
http://pkgs.fedoraproject.org/cgit/libjpeg-turbo-compat.git/tree/libjpeg-turbo-compat.spec#n107
1.2.1-4からjpeg6b系のものは-compatになり、libjpeg-turboではそれ以外のjpeg8系のみを受け持つようになった模様。
nvd3.jsが使っているライブラリ集


[nvd3.js](http://nvd3.org/)のソースコードのlib
https://github.com/novus/nvd3/tree/master/lib
より。

基本的にソースコードではなく、デモへのリンク

## cie.js

色空間の変換
http://bl.ocks.org/3014589


## clossfilter.js

データセットに対し、slice,sum,top-k等の処理を高速に適用
http://square.github.com/crossfilter/


## d3.js

d3本体
http://d3js.org/

## fisheye.js

2種類の拡大鏡
http://bost.ocks.org/mike/fisheye/


## hive.js

リンク構造の可視化
http://bost.ocks.org/mike/hive/


## horizon.js

高さが違いすぎる累積グラフを重ることで省スペース可視化
http://bl.ocks.org/1483226


## spankey.js

流入と流出の可視化
http://bost.ocks.org/mike/sankey/
Compass: config.rb image-urlにクエリを付けない


Compassの`image-url()`で吐き出している画像のURLにクエリがつく。
複数人で作業＋gitでバージョン管理をしている時にすっごく邪魔だったので、config.rbに下記を追記。

```rb:config.rb
asset_cache_buster :none
```

config.rbに何か書きだしたら、`campass watch`を抜けて再度`watch`しなおさないと反映されないから注意。
Facebook: 非同期通信で読み込み


FacebookのSocialプラグインを非同期で読み込む場合js.async = true; を追記する。

```html:
<div id="fb-root"></div>
<script>
(function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s); js.id = id;
js.async = true;
js.src = //connect.facebook.net/ja_JP/all.js#xfbml=1&appId=xxxxxxxxxxxxx";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
</script>```
Sublime Text 2: 日本語変換確定後に文字が消えるのを防ぐ for Emmet

User-Preferences.sublime-settingsに書く。

```json:User-Preferences.sublime-settings
"disable_formatted_linebreak": true
```

↑もう必要ないかも？

↑でダメなら↓

```json:User-Preferences.sublime-settings
"disable_tab_abbreviations": true
```

※Emmet だけのせいではないかも
node.jsのjsonコマンドを使って、bash(shell)からでも簡単JSONパース

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

`Infrastructure as code`の実践では意外とJSONの敷居が高いが、インフラ屋がもっとJSONと仲良くなるためのツールがある。
Shellから使いやすければ、他のツールとも連携がしやすくなる…はず。

ちなみに[JoyentのSmartOS(SmartMachine)](http://joyent.com/technology/smartos)では仮想サーバ作成直後から`json`コマンドが使えてラク。


## jsontoolのインストール

`node.js`は好きなようにに導入して、npm。

```bash:ShellOut
$ npm install -g jsontool
$ json --version
json 5.1.1
```

ソースのリポジトリはこちら[https://github.com/trentm/json](https://github.com/trentm/json)。

## サンプルJsonファイルを作る



```json:metadata.json
{
    "metadata": {
        "user-script": "",
        "credentials": {
            "root": "root_password",
            "admin": "admin_password",
            "mysql": "mysql_password",
            "pgsql": "pgsql_password"
        }
    }
}
```

## パースして出力する

`json`コマンドのオプションにキーを指定するとValueが取得できる、階層をつけるなら.(ピリオド)で区切る。

```bash:ShellOut
$ cat metadata.json | json metadata.credentials      
{
  "root": "root_password",
  "admin": "admin_password",
  "mysql": "mysql_password",
  "pgsql": "pgsql_password"
}

$ cat metadata.json | json metadata.credentials.mysql
mysql_password
```

テキスト処理を使って自力でパースするのとは雲泥の差！

## スクリプトファイル内で扱う

```bash:sample.sh
MYSQL_PASS=`cat metadata.json | json metadata.credentials.mysql`  
echo ${MYSQL_PASS}
mysql_password
```
`cat`でやっているが、王道は`curl`で他所のAPIからの取得でしょう。
Fatal error: Call to undefined function php_timer_autoload()

PHPUnit等で、上記エラーが発生した場合、
phpunit/PHP_Timer-1.0.4をphpunit/PHP_Timer-1.0.3にダウングレードすることで解消されます。

参考
http://1000g.5qk.jp/2012/10/19/phpunit%E3%82%92%E3%82%A2%E3%83%83%E3%83%97%E3%82%B0%E3%83%AC%E3%83%BC%E3%83%89%E3%81%97%E3%81%9F%E3%82%89%E5%8B%95%E4%BD%9C%E3%81%97%E3%81%AA%E3%81%8F%E3%81%AA%E3%81%A3%E3%81%9F/