OmniAICreator/Qiita-1.07M huggingface dataset:
DotNetOpenAuth で Streaming

以外と情報の少ない DotNetOpenAuth で Streaming してみました。

```cs
//  http://wiki.dobon.net/index.php?.NET%A5%D7%A5%ED%A5%B0%A5%E9%A5%DF%A5%F3%A5%B0%B8%A6%B5%E6%2F96#x1d31ba1
//  がオリジナル。

using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Xml.Linq;
using DotNetOpenAuth.Messaging;
using DotNetOpenAuth.OAuth;
using DotNetOpenAuth.OAuth.ChannelElements;

partial class TwitterConsumer {
public static void streaming(ConsumerBase consumer, string accessToken) {
    HttpWebRequest req;

    #region DotNetOpenAuth っぽいところ
    MessageReceivingEndpoint endpoint = new MessageReceivingEndpoint(
        "https://userstream.twitter.com/2/user.json",
        HttpDeliveryMethods.PostRequest | HttpDeliveryMethods.AuthorizationHeaderRequest);

    var extraData = new Dictionary<string, string>();
    //if (option != null) {
    //    option.FillExtraData(ref extraData);
    //}
    req = consumer.PrepareAuthorizedRequest(endpoint, accessToken, extraData);
    #endregion

    //サーバーからの応答を受信するためのHttpWebResponseを取得する
    HttpWebResponse res = (HttpWebResponse)req.GetResponse();   //  throws WebException.

    //応答データを受信するためのStreamを取得する
    Stream st = res.GetResponseStream();
    StreamReader sr = new StreamReader(st);

    //10秒間だけデータを取得する
    DateTime startTime = DateTime.Now;
    while ((DateTime.Now - startTime).TotalSeconds < 30) {
        Debug.WriteLine(sr.ReadLine());
    }

    //こちらから接続を閉じる
    req.Abort();
    res.Close();
    sr.Close();

    Debug.WriteLine("----- 終了しました! -----");
}
}
```
隣の席の人に再帰キモイというだけだとアレなので、Blocksでfizzbuzz

    __block int num = 0;
    __block void(^fizzbuzz)() = ^{
        if (num >= 100)return;
        NSLog(@"%@", !(++num % 3) ? !(num % 5) ? @"fizzbuzz" : @"fizz" : !(num % 5) ? @"buzz" : [NSString stringWithFormat:@"%li", num]);
        fizzbuzz();
    };
    fizzbuzz();
ネストしたJSONデータのプロパティアクセスにはvalueForKeyPath:が便利

` [jsonDict valueForKeyPath:@"piyo.poyo"];`などで直感敵にアクセスできる

```
NSString *json = @"{ \"hoge\" : \"fuga\", \"piyo\" : { \"poyo\" : \"fuga\" } }";
NSError *error;
NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:[json dataUsingEncoding:NSUTF8StringEncoding] options:0 error:&error];
NSString *value = [jsonDict valueForKeyPath:@"piyo.poyo"];
NSLog(@"val: %@", value); // val: fuga
値の大きさをサーモグラフィのような色に変換する

値の大きさをサーモグラフィのような色（値が低い順に 青→水色→緑→黄色→赤 となるような色）に変換するには、色相環（Hue）を使います。

![色見本1](https://lh6.googleusercontent.com/-B-t-qcEVttw/T2kUV7_tpyI/AAAAAAAAAek/q0N5DAUARac/s480/color1.png "色見本1")

```c:colorscale.c
#include <stdio.h>
#include <math.h>

int ColorScaleBCGYR( double in_value )
{
    // 0.0～1.0 の範囲の値をサーモグラフィみたいな色にする
    // 0.0                    1.0
    // 青    水    緑    黄    赤
    // 最小値以下 = 青
    // 最大値以上 = 赤
    int ret;
    int a = 255;    // alpha値
    int r, g, b;    // RGB値
    double  value = in_value;
    double  tmp_val = cos( 4 * M_PI * value );
    int     col_val = (int)( ( -tmp_val / 2 + 0.5 ) * 255 );
         if ( value >= ( 4.0 / 4.0 ) ) { r = 255;     g = 0;       b = 0;       }   // 赤
    else if ( value >= ( 3.0 / 4.0 ) ) { r = 255;     g = col_val; b = 0;       }   // 黄～赤
    else if ( value >= ( 2.0 / 4.0 ) ) { r = col_val; g = 255;     b = 0;       }   // 緑～黄
    else if ( value >= ( 1.0 / 4.0 ) ) { r = 0;       g = 255;     b = col_val; }   // 水～緑
    else if ( value >= ( 0.0 / 4.0 ) ) { r = 0;       g = col_val; b = 255;     }   // 青～水
    else {                               r = 0;       g = 0;       b = 255;     }   // 青
    ret = (a&0x000000FF) << 24
        | (r&0x000000FF) << 16
        | (g&0x000000FF) <<  8
        | (b&0x000000FF);
    return ret;
}

int main()
{
    double value;
    double min, max;

    value = 0.00;   printf( "value=%e(0x%x)\n", value, ColorScaleBCGYR(value) );
    value = 0.25;   printf( "value=%e(0x%x)\n", value, ColorScaleBCGYR(value) );
    value = 0.50;   printf( "value=%e(0x%x)\n", value, ColorScaleBCGYR(value) );
    value = 0.75;   printf( "value=%e(0x%x)\n", value, ColorScaleBCGYR(value) );
    value = 1.00;   printf( "value=%e(0x%x)\n", value, ColorScaleBCGYR(value) );

    printf( "\n" );

    // 値の範囲を変える場合（例: 25.0～40.0）
    min = 25.0;
    max = 40.0;
    printf( "min=%e, max=%e\n", min, max );
    value = 27.0;   printf( "value=%e(0x%x)\n", value, ColorScaleBCGYR((value-min)/(max-min)) );
    value = 28.0;   printf( "value=%e(0x%x)\n", value, ColorScaleBCGYR((value-min)/(max-min)) );
    value = 30.0;   printf( "value=%e(0x%x)\n", value, ColorScaleBCGYR((value-min)/(max-min)) );
    // わざわざ書かなくても分かるだろうけど、min=maxのときゼロ除算になるので注意

    return 0;
}
```

なお、このソースでは各RGB値の変化で三角関数を使っています。
各RGB値の変化を線形にした場合、次のように水色と黄色の領域が狭くなり、またグラデーションもあまり綺麗に見えません。

![色見本2](https://lh5.googleusercontent.com/-w2cYDUmcPE8/T2kUVxk59TI/AAAAAAAAAeg/lQw3vA7XL2g/s480/color2.png "色見本2")
Object.each

[Object.keys(), Object.values() - Qiita](http://qiita.com/items/5eb5d0f1aff22fe9a0ec) の続き。key-valueをペアでイテレートするものが欲しく、しかしこれだけのためにUndersocre.jsを（ｒｙ

使い方

```javascript
var result = obj.each(function (key, value, i) {
    return [key, value, i];
});
console.log(result);
// => [
//      [ 'key1', 'foo', 0 ],
//      [ 'key2', 'bar', 1 ]
//    ]
```

ソースコード

```javascript
Object.prototype.each = function(c){var o=this;var r=[];var i=0;for(var k in o) if(o.hasOwnProperty(k)){r.push(c.apply(o,[k,o[k],i++]))}return r}; 
```

昨日の [taka84u9さんからいただいたコメント](http://qiita.com/items/5eb5d0f1aff22fe9a0ec#comments) でも言及されてましたが、prototype汚染は [速度的にも副作用的にもお行儀が悪い](http://b.hatena.ne.jp/search?q=prototype%E6%B1%9A%E6%9F%93) ようなので、チーム開発ではやるべきじゃないすね。今回は僕しかメンテしないコードで、かつカリカリにチューンする必要が無いので、使ってしまいますが。
Object.keys(), Object.values()

これだけのために UnderScore.js をincludeするのもなぁと思って自作。

```javascript
Object.prototype.values = function(){var o=this;var r=[];for(var k in o) if(o.hasOwnProperty(k)){r.push(o[k])}return r};
Object.prototype.keys   = function(){var o=this;var r=[];for(var k in o) if(o.hasOwnProperty(k)){r.push(  k )}return r};
```

Usage

```
var obj = {key1: 'foo', key2: 'bar'};
obj.keys();   //=> ["key1", "key2"]
obj.values(); //=> ["foo", "bar"]
```
ハッピーになれるpry拡張詰め合わせGemfile

この[記事](http://blog.kiftwi.net/2012/03/20/summary-of-pry-plugins/)に感動したので、gemfileにまとめてみました。各gemの使い方はこの記事を参照してください。

```ruby:Gemfile
source 'http://rubygems.org'

group :development do
  gem 'pry-rails'
  gem 'pry-debugger'
  gem 'pry-exception_explorer'
  gem 'hirb-unicode'
end
```

```ruby:.pryrc
# https://github.com/pry/pry/wiki/FAQ#wiki-hirb
require 'hirb'

Hirb.enable

old_print = Pry.config.print
Pry.config.print = proc do |output, value|
  Hirb::View.view_or_page_output(value) || old_print.call(output, value)
end
```

---
### 追記：2012/3/20

- `pry-coolline`は日本語を入力すると表示が崩れてしまうのでいったん外しました
Eclipse使いがVimで使いたいAlt + j or k で行移動を設定する方法

Eclipseのヘビーユーザーがスクリプト言語のためにVimを使うパターンはよくあると思いますが、
その際に、Atl+上矢印 or 下矢印で行移動ができないのが、残念だった方いませんか。そんな方への設定です。

Linuxなら.vimrc、Windowsなら_vimrcに以下を記述。
これで、ノーマルモード、挿入モード、ビジュアルモードでAlt+j or kを押すことで
現在いるカーソル行または選択行を移動させることができます。

```vim:.vimrc
" Alt + j or k で行を移動する
nnoremap <A-j> :m+<CR>==
nnoremap <A-k> :m-2<CR>==
inoremap <A-j> <Esc>:m+<CR>==gi
inoremap <A-k> <Esc>:m-2<CR>==gi
vnoremap <A-j> :m'>+<CR>gv=gv
vnoremap <A-k> :m-2<CR>gv=gv
```

MacではAltでは文字を打つために使われるので、代わりにコマンドキーを使います。

```vim:.vimrc
" Command + j or k で行を移動する
nnoremap <D-j> :m+<CR>==
nnoremap <D-k> :m-2<CR>==
inoremap <D-j> <Esc>:m+<CR>==gi
inoremap <D-k> <Esc>:m-2<CR>==gi
vnoremap <D-j> :m'>+<CR>gv=gv
vnoremap <D-k> :m-2<CR>gv=gv
```

ちなみに元記事は、
[Moving lines up or down](http://vim.wikia.com/wiki/Moving_lines_up_or_down)

ぜひお試しあれ。
Homebrewでfontforgeをインストール

20120320時点の最新fontforge formulaを使うと `/usr/local/share/fontforge` ディレクトリの所有者が root になって、最後の最後でインストールがこける。所有者を戻してから `brew link fontforge` を実行すればインストールが完了する。

```
% brew update
% brew install fontforge
==> Downloading http://downloads.sourceforge.net/project/fontforge/fontforge-sou
######################################################################## 100.0%
tar: Failed to set default locale
==> ./configure --prefix=/usr/local/Cellar/fontforge/20110222 --enable-double --
==> make
==> make install
==> Caveats
fontforge is an X11 application.

To install the Mac OS X wrapper application run:
    brew linkapps
or:
    ln -s /usr/local/Cellar/fontforge/20110222/FontForge.app /Applications
Error: The linking step did not complete successfully
The formula built, but is not symlinked into /usr/local
You can try again using `brew link fontforge'
==> Summary
/usr/local/Cellar/fontforge/20110222: 270 files, 14M, built in 102 seconds
% brew link fontforge
Linking /usr/local/Cellar/fontforge/20110222... 
Error: Could not symlink file: /usr/local/Cellar/fontforge/20110222/share/fontforge/python
Check /usr/local/share/fontforge/python does not already exist.
Check /usr/local/share/fontforge is writable.
% ls -l /usr/local/share | grep fontforge
drwxr-xr-x   2 root  admin    68B Nov  3 15:31 fontforge/
% sudo chown WHOAMI /usr/local/share/fontforge
% brew link fontforge
Linking /usr/local/Cellar/fontforge/20110222... 18 symlinks created
```
friendly_idを使ってFriendlyでRESTfulなURI設計

Rails 3から `resources` というルーティング・ヘルパが用意されてRESTfulなURI設計に非常に役立ちます。

しかしながらサロゲートキーをプライマリキーに据える設計が主流のRails界隈において、データベースのプライマリキーをメンバURIのキーに採用するという戦略は `/users/4` といった無味乾燥で、またわかりやすさに欠けるURIを生んでしまう弊害もあります。

たとえばユーザを表すリソースがあったとして、それらを一意に定めるのは名前が考えられます。
つまり `/users/aereal` や `/users/aereal/edit` といったURIで表現したいです。

RailsのRESTfulなパス・ヘルパ (`user_path` など) のうちメンバ・リソースに関するヘルパについてはオブジェクトを渡すと暗黙のうちに `Object#to_param` が呼ばれます。
これをオーバーライドすることでヘルパから統合されたURI設計が可能になりますが、すべてまとめて面倒を見てくれるのが[FriendlyId](https://github.com/norman/friendly_id)です。

使い方はREADMEが詳しいです。

`#slug` カラムを生やし、URI用に体裁を整えたキーを保存することもできるようになっています。

URI設計はWebアプリケーションにおける根幹ですから、美しく簡潔でいて機能的な設計が望まれます。
文字から Unicode を算出する

'あ' の Unicode code (なんかややこしいですね) はなーに？といった場合に、
Python ならきっと `'あ'.code() -> '\u3042'` みたいのがあるんじゃないかなーと
漠然と思ってたのですが、探せど探せど見つかりません。(もしあったら教えて下さい)

一応組み込み関数として、[`ord()`](http://docs.python.org/py3k/library/functions.html#ord) という関数があります。

```PyCon
>>> ord('あ')
12354
```

なんのこっちゃという感じですが、同じく組み込み関数の [`hex()`](http://docs.python.org/py3k/library/functions.html#hex) と組み合わせて
16進に変換すると見慣れた形になります。

```PyCon
>>> hex(ord('あ'))
'0x3402'
```

The Unicode Consortium の [3040 系文字一覧 (PDF)](http://www.unicode.org/charts/PDF/U3040.pdf) を見る限り正しそうです。

でももっと簡単な方法というかズバリな方法がありそうな気がします。
(もっともあったところで使い道が思いつかないので、やっぱりないのかもしれません)
Mac上のVirtualBoxのネットワーク設定メモ


仮想マシンのネットワーク設定(DHCP使用)

1.割り当て:ブリッジアダプタ
2.名前:ホスト側で使用している接続(AirPortなど)
3.アダプタ タイプ:Intel PRO / 1000 MT Desktop(82540EM)

```sh:/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
HWADDR="08:00:27:58:A5:A2"
NM_CONTROLLED="yes"
ONBOOT="yes"
BOOTPROTO="dhcp"
```
Rails3で複数のモデルを扱うフォーム

```ruby
= form_for @post do |f|
  =f.label :body
  =f.text_field :body

  =fields_for @category do |c| %>
     =c.label :name
     =c.text_field :name 
```

fields_forを使えばいい。`@category`を`@post.category`とかにすれば保存も`@post`をするだけでよい
Mac に Security Tool を Install してみる

#Install するもの

```
Network Scanner,Packet Capture,Exploit Search...etc
```


では、以下具体的なインストール手順を見ていきます。


#必要なものなどの Install
まず、必要なもの、あると便利なものをインストールしていきます。これらは、Tool の Download や Install を簡単にしてくれます。

##1. Xcode の Install
`AppStore` にて `Xcode` と `Search` し Download and Install する

##2. Homebrew の Install

```
/usr/bin/ruby -e "$(/usr/bin/curl -fksSL https://raw.github.com/mxcl/homebrew/master/Library/Contributions/install_homebrew.rb)"
```

##3. Git の Install

```
brew install git
```


#Security Tool の Install
次に、各種 Security Tool を Install していきます。

```
brew install nmap
brew install metasploit
brew install aircrack-ng
brew install wireshark
```

各種 Security Tool の使い方、その他の情報は [こちら](http://mba-hack.blogspot.jp/2012/08/network-tool.html) よりお願いします。


以上は test のため `@PSP_T` が書きました。
powを使ってdevelopment以外のRAILS_ENVでRailsを起動する

ここでは書かないけれど Mac で Rails の開発をするなら [pow](http://pow.cx/) が便利。

閑話休題

プロジェクトのルートに `.powenv` というファイルを作る

```.powenv
export RAILS_ENV=local
```

もしくは `$HOME/.powrc` に書いてもいいけれど、こちらに書くと全ての Rails が local で起動されるようになるので注意。

これで pow が local として起動してくれる。開発サーバの development とローカル Mac で設定を変えたい場合に使える。
Capistranoのデプロイで必要ない時はasset precompileをしない

以下の変更でQiitaのデプロイが2分46秒から25秒程度にまで早くなった．
デプロイ時間が7分の1に．超快適．

http://stackoverflow.com/questions/9016002/speed-up-assetsprecompile-with-rails-3-1-3-2-capistrano-deployment の通り，以下をdeploy.rbの`namespace :deploy`ブロックに追加する．

```ruby:deploy.rb
  namespace :assets do
    task :precompile, :roles => :web, :except => { :no_release => true } do
      from = source.next_revision(current_revision)
      if capture("cd #{latest_release} && #{source.local.log(from)} app/assets/ | wc -l").to_i > 0
        run %Q{cd #{latest_release} && #{rake} RAILS_ENV=#{rails_env} #{asset_env} assets:precompile}
      else
        logger.info "Skipping asset pre-compilation because there were no asset changes"
      end
    end
  end
```

`Capfile`で自分のdeploy.rbをcapistranoのdeploy/assets.rbよりも後でロードするように変更する．
こうしないと自分のタスクがデフォルトで上書きされてしまう．

```diff
--- a/Capfile
+++ b/Capfile
@@ -2,5 +2,5 @@
 load 'deploy' if respond_to?(:namespace) # cap2 differentiator
 Dir['vendor/gems/*/recipes/*.rb','vendor/plugins/*/recipes/*.rb'].each { |plugin| load(plugin) }
 
-load 'config/deploy' # remove this line to skip loading any of the default tasks
 load 'deploy/assets'            # for 'rake assets:precompile'
+load 'config/deploy' # remove this line to skip loading any of the default tasks
```

これはgitでしか使えないけど，他のCVSにも対応したパッチ送ると幸せになる人多そう
tmuxでscreen風キーバインドを使う

http://tmux.svn.sourceforge.net/viewvc/tmux/trunk/examples/screen-keys.conf にscreen風キーバインドの設定ファイルがあるのでそれをそのまま使うだけ．

```sh
$ mkdir ~/.tmux
$ curl http://tmux.svn.sourceforge.net/viewvc/tmux/trunk/examples/screen-keys.conf -o ~/.tmux/screen-keys.conf
$ echo "source-file $HOME/.tmux/screen-keys.conf" >> ~/.tmux.conf
```

デフォルトだとprefixがC-aになってて使えないので変える．なぜC-aがデフォルトなんだろう…

```config:.tmux.conf
set -g prefix C-o
```
マクロで見通しのよいイテレーションを

次のような for ループがあったとする。

```c
    for (elem = next(set); next(set) != NULL; elem = next(set)) {
        // do something ...
    }
```

こういうときは次のようなマクロを定義しておくと見通しがよくなる。

```c

#define foreach(elem, set) \
    for ((elem) = next(set); next(set) != NULL); (elem) = next(set))

    foreach (elem, set) {
        // do something ...
    }
```

個人的には定石かなと思っていて、Cであってもちょっとモダンな感じになるので気に入っている。
この書き方は色々応用が効いて、次のようなマクロを定義してみても面白いかもしれない。

```c

#define foreach_except0(elem, set) \
    for ((elem) = next(set); next(set) != NULL); (elem) = next(set)) \
    if ((elem) != 0)

    foreach_except0 (elem, set) {
        // do something ...
    }
```

ただしやっぱりマクロに過ぎないので濫用はしないこと。
NSURLに日本語を含める

NSURLに日本語を含めるには

```objectivec
NSURL* url = [NSURL URLWithString:
                     [@"日本語含む" stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
```

stringByAddingPercentEscapesUsingEncodingは、エスケープをあまりしてくれないようで、
URIEncodeを確実に行う場合は、CFURLCreateStringByAddingPercentEscapesを使うのが定石になっているようです。

```objectivec
NSString* escapedUrl
= (NSString*) CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
                                                      (CFStringRef)str,
                                                      NULL,
                                                      (CFStringRef)@"!*'();:@&=+$,/?%#[]",
                                                      kCFStringEncodingUTF8);

```
Facebookユーザ情報をRedisに保存してAPIリクエスト回数を減らす

Facebook Graph APIにはFacebook側で更新があるとこちらのサーバにPOSTで更新情報を通知してくれるrealtime-updateという仕組みが用意されている。RedisにFacebook uidをkeyとして情報を保存し、使い回す処理を書いた。

~~~~ruby:app/helpers/application_helper.rb
  def fb_user
    begin
      cached_data = $redis.get(current_user.uid)
      return Hashie::Mash.new(JSON.parse(cached_data))
    rescue
      me              = FbGraph::User.me(decrypted_token)
      fb_user         = me.fetch
      $redis.set fb_uid, fb_user.to_json  rescue logger.error "[Redis] set #{fb_uid} failed"
      return fb_user
    end
  rescue => e
    nil
  end
~~~~~
Rails: routes.rbのmatch+viaで任意のHTTPメソッドを受け取る

RailsはRESTの理想を追求してDELETE, PUTなどのメソッドを選択できる。path生成時に

    <%= link_to "ログアウト", destroy_user_session_path, :method => :delete %>

などとできる。ところがこのとき

~~~~ruby:config/routes.rb
devise_scope :user do
  get 'sign_out', :to => 'users/sessions#destroy', :as => :destroy_user_session
end
~~~~

としていると、 `No route matches [DELETE] "/sign_out"` と言われてしまう。これは"get"と、HTTPメソッドを最初に指定してしまっているためだ。
そこでメソッドにかかわらずマッチする"match"を使う。

~~~~ruby:config/routes.rb
devise_scope :user do
  match 'sign_out', :to => 'users/sessions#destroy', :as => :destroy_user_session, :via => [:get, :delete]
end
~~~~

viaでメソッドを指定してやる。この使い方は、こういった具合に

    match "/subscription" => 'subscribe#verify', :via => [:get,:post]

同じパスでGET/POST両方受け付ける時にも利用できる。上記はFacebook real-time update APIのendpointをこちらのRailsアプリに用意する時の例である。
zshでcakeのタスクを補完する

.zshrcに以下を追加する。

```.zshrc
autoload -U compinit
compinit

_cake () {
    if [ -f Cakefile ]; then
        compadd `cake | grep '^cake ' | sed -e "s/cake \([^ ]*\) .*/\1/" | grep -v '^$'`
    fi
}

compdef _cake cake
```

`Cakefile`があるディレクトリで` cake [tab]`とすると候補を表示してくれる。便利

![zshでcakeのタスクを補完する](https://img.skitch.com/20120318-88kpyw4dx92fr4naj26ic54hah.jpg)
box.netにPHPから自動ログインさせるサンプル

HttpRequestクラスは↓
http://ideone.com/AlybO

```
	public function login()
	{
		$request = new HttpRequest();

		$url = "https://www.box.net/api/1.0/auth/{$this->ticket}";
		$result = $request->get($url, null, null, true);
		$page = $result["body"];

		$request_token = $this->find_request_token($page);
		
		if(empty($request_token))
		{
			return null;
		}
		
		$params = array(
			"login" => $this->mailaddr, 
			"password" => $this->password,
			"remember_login" => "on",
			"__login" => "1",
			"dologin" => "1",
			"reg_step" => "",
			"submit1" => "1",
			"folder" => "",
			"skip_framework_login" => "1",
			"login_or_register_mode" => "login",
			"new_login_or_register_mode" => "",
			"request_token" => $request_token
			);
		
		$header = array(
			"Referer" => $url,
		);
		
		$result = $request->post($url, $params, $header, true);

		if($result["status"] == "HTTP/1.1 302 Found")
		{
			if(array_key_exists("Location", $result["header"]) &&
				preg_match(
					'/' . preg_quote($this->callback_url, "/") . '\?ticket=(.+)&auth_token=(.+)$/',
					$result["header"]["Location"], $match) )
			{
				return $match[2];
			}
		}
		
		return null;
	}

	public function find_request_token($body)
	{
		$stringreg_dquoets = '(?:"(?:\x5c\x5c|\x5c[\x00-\xFF]|[^"])*")';
		$stringreg_squoets = "(?:'(?:\\x5c\\x5c|\\x5c[\\x00-\\xFF]|[^'])*')";
		
		$script_reg = '#\<script type="text/javascript"\>';
		$script_reg .= '((?:{$stringreg_dquoets}|{stringreg_squoets}|[^\\<])*)';
		$script_reg .= '\</script\>#s';
		
		if(preg_match($script_reg, $body, $match))
		{
			$script_body = $match[1];
			
			$request_token_reg = '/var\s*request_token\s*=\s*';
			$request_token_reg .= '($stringreg_dquoets|$stringreg_squoets';
			$request_token_reg .= '|(?:[^\s]+))/m';
			
			if(preg_match($request_token_reg, $script_body, $match))
			{
				$request_token = $match[1];
				
				if(preg_match("/$stringreg_dquoets/", $request_token, $match))
				{
					preg_match(
						'/(?:"((?:\x5c\x5c|\x5c[\x00-\xFF]|[^"])*)")/',
						$request_token, $match);
				}
				else if(preg_match("/$stringreg_squoets/", $request_token, $match))
				{
					preg_match(
						"/(?:'((?:\\x5c\\x5c|\\x5c[\\x00-\\xFF]|[^'])*)')/",
						$request_token, $match);
				}
				
				return $match[1];
			}
		}
		
		return null;
	}
```
mbstringを使わず正規表現を使ってUTF-8文字列を処理するサンプル

```utf8_truncate.php
<?php
	function truncate($string, $len)
	{
		if(utf8strlen($string) <= $len)
		{
			return $string;
		}
		
		$string = utf8substr($string, 0, $len);
		
		return "{$string}...";
	}
	
	function toUtf8CharArray($string)
	{
		preg_match_all(
			'/([\x00-\x7F]|([\xC0-\xDF][\x80-\xBF])|([\xE0-\xEF][\x80-\xBF]{2})|([\xF0-\xF7][\x80-\xBF]{3}))/', 
			$string, $match);
			
		return ($match[0]);
	}
	
	function utf8strlen($string)
	{
		return count(toUtf8CharArray($string)); 
	}

	function utf8substr($string, $start, $len)
	{
		$p = $start;
		$chararray = toUtf8CharArray($string);
		
		$size = count($chararray);
		$data = array();
		
		for($i = 0; $i < $len; $i++, $p++)
		{
			if($p >= $size)
			{
				break;
			}
			$data[$i] = $chararray[$p];
		}
		
		return implode($data); 
	}
?>
```
画像サムネイル生成

```ThumnailUtil.php
<?php
	class ThumnailUtil
	{
		public function __construct()
		{
			
		}

		public static function genthumnail($imagepath, &$outimgpath, $newWidth, $newHeight)
		{
			if(!extension_loaded('gd'))
			{
				return "このサーバはGD拡張に対応していないようです。";
			}
			$size = @getimagesize($imagepath);
			
			switch($size[2])
			{
				case 2:
					$image = imagecreatefromjpeg($imagepath);
					break;

				case 1:
					$image = imagecreatefromgif($imagepath);
					break;
					
				case 3:
					$image = imagecreatefrompng($imagepath);
					break;

				default :
					return "ファイルが対応している画像形式ではありませんでした。";
			}
			
			$width = $size[0];
			$height = $size[1];
						
			if(($height / $width) > ($newHeight / $newWidth))
			{
				$tmbheight = $newHeight;
				$tmbwidth = $newHeight / ($height / $width);	
			}
			else
			{
				$tmbwidth = $newWidth;
				$tmbheight = $newWidth / ($width / $height);	
			}
			
			$tmb = imagecreatetruecolor($tmbwidth, $tmbheight);
			imagecopyresampled($tmb, $image, 0, 0, 0, 0, $tmbwidth, $tmbheight, $width, $height);
			
			switch($size[2])
			{
				case 2:
					$outimgpath .= '.jpg';
					imagejpeg($tmb, $outimgpath);
					break;

				case 1:
					$outimgpath .= '.gif';
					imagegif($tmb, $outimgpath);
					break;
					
				case 3:
					$outimgpath .= '.png';
					imagepng($tmb, $outimgpath);
					break;
			}
			
			imagedestroy($image);
			imagedestroy($tmb);
			
			return true;
		}
	}
?>
```
apacheのmagicファイルを利用してファイル内容からmimetype判別

こちらも長すぎて途中で切れるためideon.comを併用
http://ideone.com/IVppt

```mimetest.php
<?php
    require_once('mime_checker.php');
    $checker = new MimeChecker();
    $checker->parse('magic');
    echo $checker->getMime($path);
?>
```
テキストハイライトしてくれるPHPクラス

長すぎるためか本体が途中で切れるためideon.comを併用
本体
http://ideone.com/s335u
ランゲージファイル
http://ideone.com/zaexS

```thitest.php
使い方
// インスタンスの作成
$hi = new ThiEngine($text, "php");	
//パース
$blocks = $hi->parse($text);
//レンダリング
$code = $hi->_renderer->rend($blocks, $text);
//表示
echo $code;
```
bootstrap2.0.0からはless1.3.0

less-1.2.2を使っていたら

```
Syntax Error on line 522
in mixins.less on line 522, column 7:

521 .spanX (@index) when (@index > 0) {
522 (~".span@{index}") { .span(@index) }
523 .spanX(@index - 1);
```

と言われる。lessを最新版に上げたら消えた。
Unity3Dを拡張してIDを自動生成する

一度拾ったアイテムは、シーンが推移してまた元の場所に戻ってきても復活しない、というルールを作りたかった。そのためには、ゲーム内のアイテム一つ一つにユニークなIDを割り当てて、アイテムを拾うたびに、そのIDを配列に記録しなければならない。アイテムは大量にあるので、IDをいちいち個別に設定するのは面倒くさい。

というわけで、UnityEditorを拡張して、ユニークIDの自動生成機能を作ってみた。

```c#:GenerateUniqueID.cs
using UnityEditor;
using UnityEngine;
using System.Collections;

public class GenerateUniqueID {
	[MenuItem("Tools/Generate Unique IDs")]
	public static void Generate() {
		foreach (var gameobj in Selection.gameObjects) {
			var script = gameobj.GetComponent<CollectionItemScript>();
			if (script) {
				script.UniqueID = script.GetInstanceID();
			}
		}
	}
}
```

こんな感じのスクリプトをAssets/Editorフォルダに入れてやると、UnityのメニューバーにTools/Generate Unique IDsという項目ができる。それをクリックすると、現在選択中のGameObjectのCollectionItemScriptコンポーネントにユニークなID(int型)が付与される。

#今日覚えたこと

- UnityはAssets/Editorに置いてあるスクリプトを勝手にコンパイルする。しかもそれがEditorの拡張なら、その場でリンクして機能を組み込んでくれる。
- メニューアイテム以外にも、Inspectorやシーンビューも自分で作り替えることができる。
- Unityの拡張性ぱねー
- [MenuItem(...)]はAttributeというもので、クラスやメンバ、メソッドに関する付帯情報を示している。この情報は、共通中間言語(CIL)にコンパイルされてもそのまま残る。おそらくUnityは、リンクする際にこれらの付帯情報を解釈して、コードの役割を決めている。

#参考にしたもの
- [ExtendingtheUnityEditor](http://www.slideshare.net/lucifuges/extending-the-unity-editor) 日本語の大変親切丁寧な資料
- [Unity - Extending the Editor](http://unity3d.com/support/documentation/Components/gui-ExtendingEditor.html) 公式はUnityScriptだけど、ほとんど全機能について解説されている
ログ出力マクロの書き方


素敵な書き方があったのでメモ
http://stackoverflow.com/questions/969130/nslog-tips-and-tricks

```objectivec
#ifdef DEBUG
#   define DLog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);
#else
#   define DLog(...)
#endif
```
UITableViewのセクションヘッダー、タイトルフォントのデフォルトカラー


```objectivec
UILabel *lbHeaderTitle = [[UILabel alloc] init];
[lbHeaderTitle setTextColor:[UIColor colorWithRed:0.29f green:0.34f blue:0.43f alpha:1.00f]];
[lbHeaderTitle setShadowColor:[UIColor whiteColor]];
[lbHeaderTitle setShadowOffset:CGSizeMake(0, 1)];
ミリ秒を時分秒へ変換

```javascript:computeDuration

/**
 * ミリ秒を時分秒へ変換
 * ms ミリ秒
 */
function computeDuration(ms){
    var h = String(Math.floor(ms / 3600000) + 100).substring(1);
    var m = String(Math.floor((ms - h * 3600000)/60000)+ 100).substring(1);
    var s = String(Math.round((ms - h * 3600000 - m * 60000)/1000)+ 100).substring(1);
    return h+':'+m+':'+s;
}
```
will_paginate に対応させたコレクションを作る

取得処理等を書けば他の Web API のページングと同期したり出来る。

``` ruby:app/controllers/books_controller.rb
class BooksController < ApplicationController
	def index
		require 'will_paginate/collection'
		# API から検索結果と一緒に最大件数がパースされ results.total として取得し設定されていると仮定
		results = parse(get('ItemSearch', params[:q], params[:page]))
		@books = WillPaginate::Collection.create(params[:page], params[:per_page],
												results.total) do |pager|
			array = results.map do |result| 
				{ author: result[:author], title: result[:title] }
			end
			pager.replace array
		end
	end
end
```

配列は ``require 'will_paginate/array'`` で `` paginate `` メソッドが追加されるパッチが当たる。
iPhoneぽいwheelを使う

画像を利用する場合、wrap_contentじゃないとレイアウトが崩れるとか有りますが、比較的自由度が高くてかつソースも読みやすい。(もしかしたら縮小だけダメなのかも。)

android-wheel
http://code.google.com/p/android-wheel/
（Rの）環境問題について　その５。


http://qiita.com/items/325bdf48f4f4885a86f1 と
http://qiita.com/items/35184390984975ec7c6d と
http://qiita.com/items/7fdb523a05a2e0b12f35 と
http://qiita.com/items/1cb4a7a05b026a0cf2bb の続き。

promiseにいこうと思ったんですが、その前に環境の参照渡しについて説明する必要があることに気づいてしまったので説明します。ちなみにおばちゃんの例えはもうやめますが、環境が出てきたらおばちゃんだと思ってください。

## 環境は参照渡し

Rのほぼすべてのオブジェクトは値渡しです。ただし環境だけは違って、参照渡しです。
値渡しと参照渡しの違いは以下の通りです。

普通の変数だと

```R
> a <- 1 # 普通のオブジェクト
> f <- function(x) x <- 2
> f(a) # aを渡す
> a
[1] 1 # aに変化なし。
```

これが環境だと

```R
> e <- new.env() # 適当に環境作成
> assign("a", 1, e) # 環境eにaを代入
> get("a", e) # 環境から変数を得る。
[1] 1
> f <- function(x) assign("a", 2, x)
> f(e) # 参照渡しきます
> get("a", e)
[1] 2 # 変化してる
```

ちなみに、これは環境がリストだからではなく、環境だからです。

```R
> l <- list(a = 1) # 適当にリスト作成
> l
$a
[1] 1

> f <- function(x) x$a <- 2
> f(l) # 値渡しきます
> l
$a
[1] 1 # 変化なし
```

というわけで、Rの中で環境だけは参照渡しです。
署名付き cookie を使用する

Rails 3.2.2 で確認

## 署名付き cookie の概要（ざっくり）

署名付き cookie は RAILS_ROOT/config/initializers/secret_token.rb 内の
secret_token を基に cookie 内部の値を暗号化したものを保存させる。

また、署名付きで保存した内容が改ざんされた場合には
InvalidSignature がスルーさせることで、検知が可能となっている。

参考
http://apidock.com/rails/ActionDispatch/Cookies/CookieJar/signed

## 設定する

```ruby:hoge_controller.rb
cookies.signed[:hoge] = {
  :value => @user.id,
  :expires => 1.day.from_now,
}
```

## 読みだす

```ruby:hoge_controller.rb
cookies.signed[:hoge] = {
  hoge = cookies.signed[:hoge]
}
```

## 削除する

```ruby:hoge_controller.rb
cookies.delete :hoge
```
javascriptでGETパラメータを取得

```javascript:retrieveGETqs

// JavaScript Document
var qsParm = new Array();
function retrieveGETqs() {
	var query = window.location.search.substring(1);
	var parms = query.split('&');
	
	for (var i=0; i<parms.length; i++) {
		var pos = parms[i].indexOf('=');
		if (pos > 0) {
			var key = parms[i].substring(0,pos);
			var val = parms[i].substring(pos+1);
			qsParm[key] = val;
		}
	}
}
```
Claerfix


```css
/* Pattern 1 */
.clearfix{zoom:1;}
.clearfix:after{
	content:"";
	display:block;
	clear:both;
}

/* Pattern 2 */
.element{
	_zoom:1;
	overflow:hidden;
}
```

```html
<div class="hoge clearfix">
	<p>float element1</p>
	<p>float element2</p>
</div>

<div class="element">
	<p>float element1</p>
	<p>float element2</p>
</div>
```

Pattern2は一部ブラウザや印刷時に問題アリ。Pattern1を使ったほうが安全か
Table Border Style

1px罫線のテーブル

```html
<table>
	<tr>
		<th>Title</th>
		<td>Content</td>
	</tr>
</table>
```

```css
table{
	border-collapse:collapse;
	border-spacing:0;
}
table,
table th,
table td{
	border-style:solid;
	border-color:#000;
}
table{
	width:100%;
	border-width:1px 0 0 1px;
}
table th,
table td{
	border-width:0 1px 1px 0;
}
```
Rails3.2.2でRSpecを使えるようにする

##プロジェクト作成

```sh
rails new rspec_sample
```

##RSpecインストール

```sh
gem install rspec
gem install rspec-rails
```

```ruby:GemFile
gem 'rspec-rails'
```

```sh
bundle install
```

```sh
rails g rspec:install
```

RSpec用のディレクトリなどが作成される。

```
create .rspec
create spec
create spac/spec_helper.rb
```

##scaffold

```sh
rails g scaffold team
```

```sh
rake db:migrate
```

##モデル用のspecを作成

```sh
rails g spec:model team
```

モデル用だけのつもりだったけどコントローラなど一通りできていた。

##実行

```sh
rake spec
```
Rakeタスクを書いたコードのハイライトが変になる


Rakefileをkobito経由で投稿したら、kobitoではRubyのコードとしてハイライトしてくれるのにQiitaのほうではおかしくなる。

http://qiita.com/items/7e32ea8928c5f85fec87
TeXコンパイル用のRakefile


platex が使える事が前提。
日本語に対応しています。

```Rakefile
namespace :c do

  task :default => "all"

  task :setup do
    @name = "plan_booklog"
  end

  task :tex1 =>[:setup] do
    mkdir "output" unless File.exists? "output"
    sh "platex -kanji=utf8 -output-directory=output #{@name}.tex"
  end

  task :bibtex do
    if File.exists? File.join(File.dirname(__FILE__), %w{ reference.bib }) then
      if(RUBY_PLATFORM.downcase =~ /mswin(?!ce)|mingw|cygwin|bccwin/) then
	sh "pbibtex -kanji=utf8 output/#{@name}"
      else
	sh "jbibtex -kanji=utf8 output/#{@name}"
      end
      sh "platex -kanji=utf8 -output-directory=output #{@name}.tex"
      sh "platex -kanji=utf8 -output-directory=output #{@name}.tex"
    end
  end

  task :tex =>[:tex1,:bibtex]

  desc "compile tex files as pdf"
  task :pdf =>[:tex] do
    sh "dvipdfmx -o output/#{@name}.pdf output/#{@name}.dvi"
  end

  task :open =>[:setup] do
    if(RUBY_PLATFORM.downcase =~ /mswin(?!ce)|mingw|cygwin|bccwin/) then
      sh "output/#{@name}.pdf"
    else
      sh "open output/#{@name}.pdf"
    end
  end

  desc "do all compiling task"
  task :all =>[:setup,:tex1,:bibtex,:pdf,:open]

  desc "cleanup output directory"
  task :cleanup do
    sh "rm -r output/*"
  end
end
```
Perlイディオム


## ファイルハンドル一気読み

```perl
my $str = do { local $/; <FILEHANDLE> };
```

## ディレクトリ内の読み込み
```perl
opendir my $dir, $dirname or die "can't opendir $dirname: $!";
my @files = grep !/(^\.\.?\z|^\.\w+\z)/, readdir $dir;
closedir $dir;
```
ICSだと何故かメモリを保持し続ける処理の話（Adapter編）

とりあえず覚え書き＋情報共有＋誰か助けて的な話

要はGoogleI/O2009でも紹介された（？）、Viewの再利用とThread処理を利用した、画像のサムネイルギャラリー画面を作ってみたわけですが。

※ ソースは下の内容とほぼ同じ、唯一違うところは、画像の読み込みをAsyncTaskじゃなくてThreadで実行
http://labs.techfirm.co.jp/android/cho/2161

OS2.3までは何の問題もなく動作するのに対し、何故かICS4.0以降になると、初回のheapの使用量が数十倍レベルで変わる上に、GridViewをスクロールすればするほどheapの使用量が増大し続けて、みんな大好きMemoryOfErrorが発生。ちなみにGalaxyNexusでこの現象を確認。
おそらく読み込んだBitmapを保持し続けてしまっているのが原因ではないかと踏むも、解決策までは見つからず。ちなみにAsyncTaskで読み込む形にしても同様のエラーが発生。

ちなみにICSだと、これまででは見られなかったdalvikvmからのログも吐かれるようになった。


```Log:気になるログ

04-06 14:35:37.567: I/dalvikvm-heap(3798): Grow heap (frag case) to 14.344MB for 352656-byte allocation
04-06 14:35:13.012: I/dalvikvm-heap(3338): Clamp target GC heap from 64.503MB to 64.000MB
04-06 14:35:14.708: I/dalvikvm-heap(3338): Clamp target GC heap from 64.686MB to 64.000MB
04-06 14:35:14.708: I/dalvikvm-heap(3338): Forcing collection of SoftReferences for 1555216-byte allocation
04-06 14:35:14.747: I/dalvikvm-heap(3338): Clamp target GC heap from 64.684MB to 64.000MB
04-06 14:35:14.747: E/dalvikvm-heap(3338): Out of memory on a 1555216-byte allocation.
04-06 14:35:14.747: I/dalvikvm(3338): "main" prio=5 tid=1 RUNNABLE
04-06 14:35:14.747: I/dalvikvm(3338):   | group="main" sCount=0 dsCount=0 obj=0x40a66460 self=0x12828
04-06 14:35:14.747: I/dalvikvm(3338):   | sysTid=3338 nice=0 sched=0/0 cgrp=default handle=1074893960
04-06 14:35:14.747: I/dalvikvm(3338):   | schedstat=( 0 0 0 ) utm=975 stm=120 core=1

```

原因と解決策はいまだ模索中。
PHPで配列そのものを引数にしたい場合


引数に配列を指定するのではなく、配列をのものを引数として利用する場合です。

```php:sample.php
$args = array();
foo($args[0], $args[1], $args[2], ……);
```

このようなイメージです。

[call_user_func_array()](http://www.php.net/manual/ja/function.call-user-func-array.php)という関数で実現できるそうです。


##使い方

###関数を呼ぶ場合
```php:call_function.php
$args = array(1, 2);
call_user_func_array('foo', $args); // 3

function foo($a, $b)
{
	echo $a + $b;
}
```

###メソッドを呼ぶ場合
```php:call_method.php
$args = array(1, 2);

$foo = new Foo();
call_user_func_array(array($foo, 'bar'), $args); // 3

class Foo{
	function bar($a, $b)
	{
		echo $a + $b;
	}
}
```

$thisとか使えば、同じクラス内のメソッドも呼べるよ！
都道府県の配列データソース

```
{"北海道","青森県","岩手県","宮城県","秋田県","山形県","福島県",
"茨城県","栃木県","群馬県","埼玉県","千葉県","東京都","神奈川県",
"新潟県","富山県","石川県","福井県","山梨県","長野県","岐阜県",
"静岡県","愛知県","三重県","滋賀県","京都府","大阪府","兵庫県",
"奈良県","和歌山県","鳥取県","島根県","岡山県","広島県","山口県",
"徳島県","香川県","愛媛県","高知県","福岡県","佐賀県","長崎県",
"熊本県","大分県","宮崎県","鹿児島県","沖縄県"
};
```


## contentfulにて

contentfulのバリデーションに都道府県をセットしたい事がありました。
その時のdev-toolに流したjsも貼っておきます。


```js

const add = document.querySelector("#addPredefinedValue")
const ev = document.createEvent('Events');
ev.initEvent('keydown', true, true);
ev.keyCode = 13;
ev.which = 13;
ev.charCode = 13;
ev.key = 'Enter';
ev.code = 'Enter';

["北海道","青森県","岩手県","宮城県","秋田県","山形県","福島県",
"茨城県","栃木県","群馬県","埼玉県","千葉県","東京都","神奈川県",
"新潟県","富山県","石川県","福井県","山梨県","長野県","岐阜県",
"静岡県","愛知県","三重県","滋賀県","京都府","大阪府","兵庫県",
"奈良県","和歌山県","鳥取県","島根県","岡山県","広島県","山口県",
"徳島県","香川県","愛媛県","高知県","福岡県","佐賀県","長崎県",
"熊本県","大分県","宮崎県","鹿児島県","沖縄県"].map(pre => {
  add.value=pre;
  add.dispatchEvent(ev);
});


```

![seller-loc_—_Content_Model_—_Development_—_gift-map-develop_—_Contentful.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3844/60211009-0931-b89d-9496-8d8475126e40.png)
TwoLengthString

```scala
object HList {
  sealed trait HList

  final class HNil extends HList {
    def ::[T](v : T) = HCons(v, this)
  }

  val HNil = new HNil()

  final case class HCons[H, T <: HList](head : H, tail : T) extends HList {
    def ::[T](v : T) = HCons(v, this)
  }

  type ::[H, T <: HList] = HCons[H, T]

  type TwoLengthString = Char :: Char :: HNil

  implicit def stringToTwoLengthString(s:String) = { 
    s.head :: s.last :: HNil
  }
}
```
RAILS_ENV=production で ActionMailer の BCC 送信が機能してない


Development では送信できているのに。なんででしょうか？

わかりました。Production のメール送信は Amazon SES を使ってたのが原因ぽい。

## Amazon SES は BCC が苦手らしい

エンタープライズ用途に SES は使えない、とまで書いてある。

- [AWS Developer Forums: Only bcc addresses ...](https://forums.aws.amazon.com/thread.jspa?messageID=277021&#277021 "AWS Developer Forums: Only bcc addresses ...") 

aws-ses.gem の GitHub Issue にも書いてあった。

- [Issue #16: Bcc doesn't work through rails 3 · drewblas/aws-ses](https://github.com/drewblas/aws-ses/issues/16 "Issue #16: Bcc doesn't work through rails 3 · drewblas/aws-ses")

- コードを無理矢理オーバーライドすれば送れることは送れるようです。

```ruby
AWS::SES::SendEmail.class_eval do
  #TN: made bbc work with ses
  def send_raw_email(mail, args = {})
    message = mail.is_a?(Hash) ? Mail.new(mail).to_s : mail.to_s
    package = { 'RawMessage.Data' => Base64::encode64(message) }
    package['Source'] = args[:from] if args[:from]
    package['Source'] = args[:source] if args[:source]
    
    # Extract the list of recipients based on arguments or mail headers
    destinations = []
    if args[:destinations]
      destinations.concat args[:destinations].to_a
    elsif args[:to]
      destinations.concat args[:to].to_a
    else
      destinations.concat mail.to.to_a
      destinations.concat mail.cc.to_a
      destinations.concat mail.bcc.to_a
    end
    add_array_to_hash!(package, 'Destinations', destinations) if destinations.length > 0
    
    request('SendRawEmail', package)
  end
  
  alias :deliver! :send_raw_email
  alias :deliver  :send_raw_email
    
end
```
Tora でクラスを定義する


```pl
class Foo {
  sub new() {
    self.bless({})
  }
  sub bar() {
     say("Hello!");
  }
}
```
このようにして Foo.tra を定義したら

```pl
use Foo *;

my $foo = Foo.new();
$foo.bar();
```
のようにして利用します。
Core plotで-[UIView setHostedLayer:]: unrecognized selector sent to instanceエラー


どこでエラーになってるのかはデバッガーを見ればスグにわかるが

```objectivec
    CPTGraphHostingView *hostingView = (CPTGraphHostingView *)self.view;
	hostingView.collapsesLayers = NO; // Setting to YES reduces GPU memory usage, but can slow drawing/scrolling
	hostingView.hostedGraph = graph;
```

という感じで、hostingViewをいじってる所で落ちているのがわかる。

> hostingView.collapsesLayers = NO;

そもそも、下のようにCastするにはself.viewのClassが`CPTGraphHostingView`であることが前提のコードなってる。

![Xibのview](https://img.skitch.com/20120406-kftk7s7bmpmpera21e87c94uwe.png)

> CPTGraphHostingView *hostingView = (CPTGraphHostingView *)self.view;

なので、XibでViewを作ってるなら、`CPTGraphHostingView`をClassに適応するか普通にCPTGraphHostingViewのインスタンスをViewとして使うように変更すればよい。

```objectivec
    CPTGraphHostingView *hostingView = [[[CPTGraphHostingView alloc] init] autorelease];
	hostingView.collapsesLayers = NO; // Setting to YES reduces GPU memory usage, but can slow drawing/scrolling
	hostingView.hostedGraph = graph;
    [self setView:hostingView];// self.viewをhostingViewにする
```

これでタイトルのエラーは出なくなる。
vmc rails-consoleを使うまで

vmc rails-consoleを使うとクラウド側にあるrailsアプリのconsoleが使える。

vmc rails-consoleを使うためにはcaldecottが必要だが現在のgemでインストールされるcaldecott(0.0.4)だと、addressableをアンインストールしないとうまく動かない。
しかし、rake assets:precompileにはaddressableが必要でありハマる。

解決策としてはgithubにあるバージョンのcaldecottを使うこと。
例えば下記のようなGemfileを用意する

```ruby:Gemfile
source :gemcutter
gem 'vmc',:git => "git://github.com/cloudfoundry/vmc.git"
gem 'caldecott',:git => "git://github.com/cloudfoundry/caldecott.git"
```
どこかのpathにインストールした後

```
$ bundle exec vmc rails-console app_name
```

コンソールが立ち上がり本番データをいじることができる。
jQueryライトボックスで、リンク先が画像の時だけ発動させる。

```javascript
<script type="text/javascript" src="jquery.lightbox.js"></script>
<script>
$(function() {
	$('a[href$=".jpeg"], a[href$=".jpg"], a[href$=".gif"], a[href$=".png"], a[href$=".JPEG"], a[href$=".JPG"], a[href$=".GIF"], a[href$=".PNG"]').lightBox();
});
</script>
```
RGBカラーコードからUIColorを生成する方法


```objectivec
- (UIColor *)UIColorFromRgbCode:(NSString *)colorCode {
    int COLOR_RED   = 0;
    int COLOR_GREEN = 1;
    int COLOR_BLUE  = 2;
 
    if ( [[colorCode substringWithRange:NSMakeRange(0, 1)] isEqualToString:@"#"] ) {
        colorCode = [colorCode substringWithRange:NSMakeRange(1, colorCode.length - 1)];
    }
    if ( 3 == [colorCode length] ) {
        NSMutableString *_colorCode = [[[NSMutableString alloc] init] autorelease];
 
        for (int i = 0; i < colorCode.length; i++) {
            [_colorCode appendString:[colorCode substringWithRange:NSMakeRange(i, 1)]];
            [_colorCode appendString:[colorCode substringWithRange:NSMakeRange(i, 1)]];
        }
        colorCode = [_colorCode copy];
    }
    char *hexCode;
    char *endptr;
    float red,green,blue;
    for (int i = 0; i < 3; i++) {
        hexCode = [[NSString stringWithFormat:@"+0x%@", [colorCode substringWithRange:NSMakeRange(i * 2, 2)]] cStringUsingEncoding:NSASCIIStringEncoding];
 
        if (COLOR_RED == i) {
            red = strtol(hexCode, &endptr, 16);
        } else if ( COLOR_GREEN == i ) {
            green = strtol(hexCode, &endptr, 16);
        } else if ( COLOR_BLUE == i ) {
            blue = strtol(hexCode, &endptr, 16);
        }
    }
 
    return [UIColor colorWithRed:red / 255 green:green / 255 blue:blue / 255 alpha:1.0f];
}
Generics と Class#forName

Foo クラスを継承している FooSubclass クラスの Class オブジェクトを取得するときに
どうすれば警告でなくなるのかと悩んでいた。
http://www.velocityreviews.com/forums/t149816-generics-and-forname.html に書いてあった。
回答みたら API 見ればわかることだったorz

```java:ClassForNameSample.java
Class<? extends Foo> clazz = Class.forName("FooSubclass").asSubclass(Foo.class);
```
シングルウィンドウ ライブラリスタイル アプリで左側表示領域サイズを固定する


MacアプリでiPhotoやiTunesのような１ウィンドウ・ソースリスト(左側)・メイン表示(右側)という形式のアプリをAppleは**Single-window library-style app**と呼んでいます。

そのようなウィンドウをデザインする場合、Vertical Split Viewというレイアウトビューを用いてレイアウトしますが、そのままではウィンドウリサイズ時に左側のビューサイズがウィンドウサイズに応じて変更されてしまいます。

左側のビューを固定サイズにしたい場合はNSSplitViewのデリゲート(ここではSplitViewDelegate.mとします)にて**splitView:shouldAdjustSizeOfSubview**を定義する必要があります。

```SplitViewDelegate.m
/**
    Split View delegate method
    This keeps the source list on the left from resizing when the window is resized
 */
- (BOOL)splitView:(NSSplitView *)splitView shouldAdjustSizeOfSubview:(NSView *)subview {
    if (subview == [[splitView subviews] objectAtIndex:0]) return NO;
    else return YES;
}
```

参考URL:
[Mac App Programming Guide: The Core App Design](http://developer.apple.com/library/mac/#documentation/General/Conceptual/MOSXAppProgrammingGuide/CoreAppDesign/CoreAppDesign.html)
[NSSplitViewDelegate Protocol Reference](http://developer.apple.com/library/mac/#documentation/cocoa/Reference/NSSplitViewDelegate_Protocol/Reference/Reference.html)
apacheでRailsを動かすpassenger

忘れないようにメモ。

RailsはデフォルトだとWeBrickを使ってサービス起動するのだけど、個人的にあまりWeBrickは信頼していない。デーモン化も面倒くさそうだったので、俺の作った「[ショハリ](http://www.shohari.com/)」というサービスでは、apache上でRailsを動かせるpassengerを利用している。もっと良いツールがでない限り多分今後もこれを使おうと思っている。

基本的な内容は[ここ](http://redmine.jp/tech_note/apache-passenger/)にある通り

 - gem install passenger
 - passenger-install-apache2-module
 - httpd.confの変更

でいける。
httpd.confの設定は最新版では若干違ったので下記にメモしとく。gemのバージョンは各環境で変える必要あり。

```httpd.conf
LoadModule passenger_module /usr/lib/ruby/gems/1.9.1/gems/passenger-3.0.11/ext/apache2/mod_passenger.so
PassengerRoot /usr/lib/ruby/gems/1.9.1/gems/passenger-3.0.11
PassengerRuby /usr/bin/ruby
```
Twitter、フォロイー・フォロワーのアイコンを保存

###　問題点 ###
+ OAuth認証していないせいかすぐにAPI制限にかかる。
+ API制限にかかるので全てのフォロイー・フォロワーのアイコンを保存できない。
+ 保存ができているのは150枚前後。 

``` scheme:img-twitter.scm
#!/usr/local/bin/gosh
(use srfi-1)
(use rfc.http)
(use sxml.ssax)
(use sxml.sxpath)
(use file.util)
(use rfc.uri)
(use file.util)
(define (img uri)
  (receive 
	(uri-scheme user-info hostname port path query fragment) 
	(uri-parse uri)
	(receive (dir file ext) (decompose-path path)
	  (receive (status head body) (http-get hostname path)
			   (if (boolean? ext)
				 (with-output-to-file file (pa$ print body))
				 (with-output-to-file (string-append file "." ext) (pa$ print body)))))))
(define (follow-get user)
  (receive (status head body)
		   (http-get "api.twitter.com"
					 (string-append "/1/friends/ids/" user ".xml"))
		   (ssax:xml->sxml (open-input-string body) '())))
(define (follower-get user)
  (receive (status head body)
		   (http-get "api.twitter.com"
					 (string-append "/1/followers/ids/" user ".xml"))
		   (ssax:xml->sxml (open-input-string body) '())))
(define (user-get id)
  (receive (status head body)
		   (http-get "api.twitter.com"
					 (string-append "/1/users/show.xml?id=" id))
		   (ssax:xml->sxml (open-input-string body) '())))
(define (main args)
  (display ">> ")
  (flush)
  (let1 user (read)
		(display "cmd> ")
		(flush)
		(let1 cmd (read)
			  (make-directory* (string-append (x->string user) "-" (x->string cmd)))
			  (print "Maked...")(flush)
			  (current-directory (string-append (x->string user) "-" (x->string cmd)))
			  (print "In " (string-append (x->string user) "-" (x->string cmd))"...")(flush)
			  (cond ((eq? cmd ':q)(exit))
					((eq? cmd ':follow)
					 (begin (print "Follow get")(flush)(solve (map (lambda(x)(cadr x)) ((sxpath "/id_list/ids/id")(follow-get (x->string user)))))))
					((eq? cmd ':follower)
					 (begin (print "Follower get")(flush)(solve (map (lambda(x)(cadr x)) ((sxpath "/id_list/ids/id")(follower-get (x->string user)))))))
					(else (print "ERROR"))))))
(define (solve lst)
  (print "フォロ*ー数: "(length lst))
  (let loop ((lst lst)(n 1))
	(if (null? lst)
	  (print "Empty")
	  (let1 result ((sxpath "/user/profile_image_url/text()") (user-get (car lst)))
			(if (null? result)
			  (print "Done")
			  (begin (print "GET")
					 (print "["n"]Downloads..."(car result))
					 (img (car result))
					 (loop (cdr lst) (+ n 1))))))))
```
libxml-ruby メモ

libxml メモ

**※Ruby始めて2週間目の初心者の書いたメモです。**

libxml-ruby の libxml を使う上でのメモ。基本的なところだけ。
参考...はなんかまともなのが見つからなかった。みんなどうしているんだろう？
とりあえず、

```Bash
$ yard server --gems&;open 'http://localhost:8808/docs/libxml-ruby/frames'
```

README には http://xml4r.github.com/libxml-ruby/rdoc/index.html を見るように書いてあるけど、ver 2.0.1。

## require libxml と require  xml

通常は下記でおｋ。

```Ruby
require 'xml'
document = XML::Document.new
```

XML::* に展開されたくない場合や、ライブラリへ組み込むときは下記のようにする。

```Ruby
require 'libxml'
document = LibXML::XML::Document.new

module MyApplication
  include LibXML

  class MyClass
    def some_method
      document = XML::Document.new
    end
  end
end
```

…と書いてみるが、あまり意味がハッキリわかってないので、違うかも。
README参照。


## XML読み込み

```Ruby
# String
doc = XML::Document.string String #=> LibXML::XML::Document

# file
doc = XML::Document.file 'filepath.xml' #=> LibXML::XML::Document

# io
doc = XML::Document.io open('http://www.ruby-lang.org/ja/feeds/news.rss')

```

## 値の参照

値は、通常 LibXML::XML::Documentの`find`メソッドなどを使用し -> LibXML::XML::XPath::Objectを得て -> `first`メソッドなどを使用 -> LibXML::XML::Nodeを得て -> `content`などで値を得る。

### XPath

LibXML::XML::Document から XPath を使用して、LibXML::XML::XPath::Object または、LibXML::XML::Node を得る。

```Ruby
doc.find('//xpath') #=> LibXML::XML::XPath::Object

doc.find_first('//xpath') #=> LibXML::XML::Node
```


### LibXML::XML::XPath::Object から LibXML::XML::Node を得る

```Ruby
doc.find('//xpath').each do |obj|
	obj #=> LibXML::XML::XPath::Object
	obj.first #=> LibXML::XML::Node
end

doc.find('//xpath').first #=> LibXML::XML::Node

doc.find('//xpath').last #=> LibXML::XML::Node

# 値が１つでも XPath::Object
doc.find('//xpath[1]') #=> LibXML::XML::XPath::Object

# 値がテキストでも XPath::Object
doc.find('//xpath[1]/text()') #=> LibXML::XML::XPath::Object
```

### LibXML::Document から　LibXML::XML::Node を得る 

LibXML::Documentからいきなり、LibXML::XML::Nodeを得ることも出来る。
eachなど、ツリーをたどる必要がない場合はこっち。

```Ruby
doc.last #=> LibXML::XML::Node

doc.root #=> LibXML::XML::Node
```

### LibXML::XML::Node から値をえる

```Ruby
doc.find_first('//xpath').content #=> String
doc.find_first('//xpath').name #=> String
```

### LibXML::XML::Node から属性を得る

```Ruby
doc.root.attributes #=> LibXML::XML::Attributes
```


## オフィシャルドキュメント

- [LibXml Ruby Project](http://xml4r.github.com/libxml-ruby/)

探したけど最新版のAPIDocはないみたい？

- [LibXml Ruby Project - APIDoc](http://xml4r.github.com/libxml-ruby/rdoc/index.html)

オフィシャルの APIDoc と同じだが、RubyForge の方が新しい？

- [RubyForge - LibXML](http://libxml.rubyforge.org/rdoc/)
（Rの）環境問題について　その４。 


http://qiita.com/items/325bdf48f4f4885a86f1 と
http://qiita.com/items/35184390984975ec7c6d と
http://qiita.com/items/7fdb523a05a2e0b12f35 の続き。

##1-9 大事な事なので繰り返します。

関数にまつわる３つの環境とは、

1. 呼び出し時に作られる環境
2. 呼び出し時に作られる環境の親となる環境
3. 関数がある環境

です。

普通に使う分には、3は無視していいと思います。1も恒常的なものではないので無視していいと思います。大事なのは関数呼び出しの時の2が何か、を意識しておくことだと思います。

とりあえず関数にまつわる環境の話はこれでいいんだろうか？
なんかよくわかんなかったら教えて下さい。

#2 promise

さて、`promise`です。これを説明するためには、**遅延評価**というものを説明する必要があって面倒なんですが、最近見かける話に、

```R
> f <- function(i) function() i
> r <- lapply(1:3, f)
> r[[1]]()
[1] 3
> r[[3]]()
[1] 3
```

なんでよー、ちらほらってのがあったので、結構ここで引っかかる人は多いみたいです。
上の`r[[1]]()`がなんで`3`になるのか即答できる方は読み飛ばしてもらっていいと思います。

#2-1 substituteにまつわる誤解

`promise`といえば`substitute`です。が、これやるには`call`とかまで行く必要があるので、またこれは別の機会にします。

その代わりにおまけで。

##1-10 環境はリスト
環境はリストです。これほんとです。

```R
> environment()
<environment: R_GlobalEnv> # 隣のおばちゃん
> ls()
character(0) # なんも持ってない
> as.list(.GlobalEnv)
named list() # 空リスト
> a <- 1 # a持っといてー
> ls()
[1] "a" # aある。
> as.list(.GlobalEnv) # aのあるリスト
$a
[1] 1
```

**直感的に**リストなら要素の追加できるんじゃね？って思います。

```R
> environment()
<environment: R_GlobalEnv>
> ls()
character(0) # なんも持ってない
> .GlobalEnv$b <- 2 # リストの要素bを追加
> ls() 
[1] "b" # あるよ。
> b
[1] 2 # ちゃんとあるよ。
```

個人的には、関数の中から`.GlobalEnv`に値を入れる最もいい方法だと思ってるんですが、この方法がいつまでサポートされるかはわからないので、使わないほうがいいと思います。正しくは、

```R
> ls()
character(0)
> assign("b", 2, .GlobalEnv)
> ls()
[1] "b"
```

という風に、`assign`で環境を指定して値を束縛するのがR風です。

##1-11 `<<-`は`.GlobalEnv`への代入ではない、という話

グローバル環境の変数に値を束縛するには`<<-`を使うというのは巷では有名ですが、これは避けたほうが良いです。`X<<-`は、隣のおばちゃんにXがあったらそこに、なかったらそのおばちゃんの相談相手に、そこにもなかったらそのおばちゃんの相談相手に、さいごまでなかったら`.GlobalEnv`に、値を代入する、というものです。

```R
> a <- 1 # グローバル環境のaに1
> a
[1] 1

> e <- new.env() # 環境を作成
> e$a <- 1 # その環境にも変数aをおいとく
> e$a
[1] 1

> f <- function() {
+ 	a <<- 2 # グローバル環境に2を代入する？
+ }

> environment(f) <- e # fの環境をeにしてから
> f() # fを呼び出し

> a
[1] 1 # グローバルのaは変わってなくて、
> e$a
[1] 2 # eのaが変わってる
```

という感じになるので、絶対にグローバル環境に入れたければ、`assign()`を使いましょう。
amazon linux上で、python2.7用にMySQL-pythonをコンパイル・インストール

sudo yum install python27-devel mysql-devel
wget http://download.sourceforge.net/sourceforge/mysql-python/MySQL-python-1.2.3.tar.gz
cd MySQL-python-1.2.3
python2.7 setup.py build
sudo python2.7 setup.py install