OmniAICreator/Qiita-1.07M huggingface dataset:
JavaScript and locale

Object.prototype.toLocaleString() や String.prototype.localeCompare() あたりが一応ECMA-262にあるけど、あまり実装状況は芳しくないな。

http://d.hatena.ne.jp/shrkw/20081007/localeCompare

http://blog.livedoor.jp/add20/archives/1528426.html (toLocaleString())

仕様はあっても使いものにならないとは困ったものだ。
SGR(1006)形式の拡張マウストラッキングについて

端末や端末エミュレータから、コンソールアプリケーションに対してマウス位置を報告することを、マウストラッキングとよびます。
このエントリでは、このマウストラッキングの形式のひとつであるSGR(1006)形式の概要と、それを普及させる意義について述べたいと思います。

224桁問題と拡張マウストラッキングについて
=========================================

拡張マウストラッキングは、xtermとそれを模倣するいくつかの端末において、224以上の座標をアプリケーションが取得できない仕様上の問題を回避するために考案されたものです。

現在広く普及しているxtermのノーマルトラッキングモード(vimのttymouse=xterm/xterm2)では、マウスレポーティングは7bit形式で以下のように表現されます。

>  ESC [ M Cb Cx Cy

マウス位置座標はCx、Cyで表現され、それぞれ１バイト固定となります。
さらに印字文字で表現するため+32のオフセットが加算され、224以上(0オリジンで223以上)の座標が表現できません。

これを回避するために、UTF8(1005)形式(座標値をUTF-8の要領でエンコードする)が考案されました。tmux、Poderosaなどの端末が対応しましたが、のちにこの仕様は端末のエンコーディングによっては認識できなくなるなどいくつかの問題があることが判明し、現在では壊れた仕様とみなされています。

これを解決するためにrxvt-unicodeから整数リテラル表現Db, Dx, Dyを使用して

>  ESC [ Db ; Dx ; Dy M

とする方法が提案され、多くの端末がこれに追従し、アプリケーション側でもMidnight CommanderやVimがこれに対応しました。
しかし現実には、このマウスレポートが誤ってエコーバックされたときに問題が発生すること、いくつかの既存アプリケーション(emacs等)での対応が困難であることなど、またしても不備があることが判明しました。

そこで現在新しく提案されている方法が、xtermによるSGR(1006)形式

>  ESC [ < Db ; Dx ; Dy M/m

という経緯になります。

さらに詳しいことは、下記をご覧ください。
https://groups.google.com/forum/#!topic/vim_use/lo6PLRUu2Gg
http://invisible-island.net/xterm/ctlseqs/ctlseqs.html#Mouse%20Tracking
http://togetter.com/li/290073

なぜ、SGR(1006)形式がよいのか
===============================

- UTF-8形式は、端末のエンコーディング設定によって問題が出るのみならず、そのノーマルトラッキング形式との中途半端な互換性から、tmuxなどのターミナルマルチプレクサに対して、複数の端末がアタッチしたときに問題が発生することが判明しています( http://togetter.com/li/290073 )。
- urxvt(1015)形式は、端末側の対応は楽なのですが、アプリケーション側の対応がものによっては非常に困難であることが報告されています( https://groups.google.com/forum/#!topic/vim_use/lo6PLRUu2Gg )。たとえば、xtermのterminfoにおいて、シフト + 左カーソルキーのインプットシーケンスは
> ESC [ 1 ; 2 D
となりますが、これを左から1文字づつパースしていくとurxvt(1015)形式と途中まで('D'があらわれるまで)区別がつきません。つくりによっては余計なバックトラックが増えるため、効率上の問題もあります。
- アプリケーションのバグなどで万一、マウスレポーティングが誤ってエコーバックされた場合、ECMA-48に準拠した端末ではSGR(1006)形式のレポートは端末によって読み飛ばされ、無害なはずです。ノーマルトラッキングのようにゴミとして表示されたり、urxvt形式のように既存の制御シーケンスとバッティングして誤動作することはないはずです。

現在のSGR(1006)形式のサポート状況
=================================
拡張マウスレポーティングが正しく機能するためには、端末側とアプリケーション側、両方のサポートが必要となります。
うち端末側では、比較的普及がすすんでいます。
- xterm (Patch #277以降)
- RLogin
- TeraTerm
- pangoterm
- tty.js (多少のバグあり)
- tanasinn
- mlterm (3.1.2以降)
- mintty
- iTerm2
- mouseterm
- Poderosa (sourceforgeレポジトリの最新版)
- Konsole
- PuTTY
- tmux
- st
- gnome-terminal

その他、GNU Screen、cygwin ck terminal emuratorにもパッチが書かれています。
一方アプリケーション側では近年になって普及の兆しがあり
- Midnight Commander
- Vim
- Emacs
などで実装されました。w3mへもパッチが投稿されています。
今後ncursesなどのライブラリでも対応が予定されています。

自分のつかっている端末の拡張マウストラッキング実装状況を知りたい
================================================================
自分のつかっている端末が、SGR 1006をサポートしているか知りたいと思っても、アプリケーション側の対応が少ない現状では、なかなか調べられません。
また、パッチを書いてSGR 1006に対応してみた、という場合にも、それを適切にテストできる環境が必要でしょう。
そういうときは、vttest( http://invisible-island.net/vttest/ )を使用しましょう。Unix/Linuxではパッケージマネージャ経由でもインストールすることができるはずですが、バージョン2.7/20111210より前のものでは、SGR 1006には対応していません。なるべく新しいものをつかいましょう。
vttestを立ち上げたら、11 -> 8 -> 5 とメニューをたどることで、マウスのテストメニューに移行することができます。1でノーマルモード、urxvt、SGR形式を切り替え、4/6/7でマウス座標の報告状況テストをすることができます。
Mac OS X Lionにsgeを入れる

Ruby/SDLはわりと簡単に入った。

```sh
 $ brew install sdl sdl_image (必要ならsdl_ttf, sdl_mixer)
 $ gem i rubysdl rsdl
```

が、sgeがhomebrewにない。

gistに定義ファイルがあるのを発見。https://gist.github.com/1394414/ 試してみるが：

```sh
$ brew install https://raw.github.com/gist/1394414/4a6bfa4a8bab179ebe263b1d044a4322c7628f60/sge.rb 
==> make install
g++ -Os -w -pipe -march=native -Qunused-arguments -mmacosx-version-min=10.7 -Wall -I/usr/local/include/SDL -D_GNU_SOURCE=1 -D_THREAD_SAFE -fPIC -I/usr/X11/include/freetype2 -I/usr/X11/include -c sge_surface.cpp
g++ -Os -w -pipe -march=native -Qunused-arguments -mmacosx-version-min=10.7 -Wall -I/usr/local/include/SDL -D_GNU_SOURCE=1 -D_THREAD_SAFE -fPIC -I/usr/X11/include/freetype2 -I/usr/X11/include -c sge_primitives.cpp
sge_surface.cpp:1: error: bad value (native) for -march= switch
sge_surface.cpp:1: error: bad value (native) for -mtune= switch
sge_primitives.cpp:1: error: bad value (native) for -march= switch
sge_primitives.cpp:1: error: bad value (native) for -mtune= switch
make: *** [sge_primitives.o] Error 1
make: *** Waiting for unfinished jobs....
make: *** [sge_surface.o] Error 1 
(略)
```

調べてみると、なんか--use-gccというのがあるらしい？試してみるか。

* http://blog.livedoor.jp/noanoa07/archives/1730395.html
* https://github.com/mxcl/homebrew/issues/7363

でもno GCCって言われるな。

### マニュアルコンパイルを試す

tarballをダウンロードし、とりあえずmakeしてみる。失敗。
パッチを4つすべて当ててみる。make通った。

うーん、無理やりだけど、これをzipしてhomebrewでインストールさせるか。

https://gist.github.com/3115276

```sh
$ homebrew install https://raw.github.com/gist/3115276/719f284d6e340487dba6ef3e5beb7b7a4098414f/sge-manualcompile.rb
$ gem i rubysdl
```
オブジェクト指向のプログラミングと関数型プログラミングに対するイメージ


アリの巣を水で満たす問題を考えるとき、オブジェクト指向で考える場合は、屈強な小人と氷を用意し、小人が適当な大きさの氷をいくつか切りだして巣に敷き詰めていくイメージで、関数型言語っぽい感じで考える場合は、水と重力の法則を再帰的に表現するイメージがある。
この手の説明で賛同を得られた試しがないんだけど、世界を捉えるときに、前者は「自分がつくりたい」人工物で表現して、後者は「既にある」自然法則をプログラムに起こすイメージ。両者は別に排反な概念でもないというかあまりちゃんと整理できていないんだけど、haskellを知ってから関数の書き方とか考え方がかなり変わった。関数の概念が、便利な処理のまとまり、サブルーチン的なものから、数学の関数のようなものとして考える傾向が強くなった。
JavaScript開発のお供

他にあれば教えてほしいです。（[他のまとめ](http://efcl.info/2010/0914/res1947/)を見つけたがまだよく読んでない）

## 一般

* [JSRef](http://jsref.64p.org/)
 * JSのリファレンスを高速に引く
* [JSDeferred](http://cho45.stfuawsc.com/jsdeferred/)
 * 非同期処理を同期処理のような感覚で記述できる
* [CocProxy](http://coderepos.org/share/wiki/CocProxy)
 * ブラウザからのリクエスト先をローカルファイルに置き換えてくれる
* [QUnit](http://api.qunitjs.com/)
 * ユニットテストフレームワーク
 * 今はRSpec風に記述できるJasmineのほうが使われてる印象ですが、自分はこちらのほうがしっくりくる（PerlのTest::Moreとほぼ同じなので）

## jQuery
* [jsshell](https://chrome.google.com/webstore/detail/kmgmkbicahmbceidoidjbkbpkfogaldh)
 * jQueryを読み込んでないサイトでもjQueryを使ったコードを簡単に試せる
* [jQuery API Search](https://chrome.google.com/webstore/detail/abefhanahjellfbchdmkjdcchkogijhk)
 * ChromeのポップアップからjQueryのAPIリファレンスをさくっと引ける
 * できればVimから引きたい…。

## Vim
* [vimparse.js](http://subtech.g.hatena.ne.jp/cho45/20110708/1310121676)
 * ファイル保存時にJSHintでコーディングバリデーション
 * Syntasticという有名なプラグインがありますが、JSLintがscrictすぎるので無理でした
http/httpsプロトコルの使えないgitでVundleを使う


[Vundle](https://github.com/gmarik/vundle/)はpluginをinstallする時に使うgit protocolがデフォルトでhttpsになっているため、http/httpsプロトコルの使えないgit (libcurlのないままcompileしてしまったなど) 、`:BundleInstall` しようとすると以下のようにコケる。

![BundleInstallerror](https://img.skitch.com/20120714-qfsm6rkd7arrcnt6c7nbjq4k43.jpg)

今回限られた用途のサーバーだったので、gitをcompileし直すよりもVundleで利用するgit protocolを'git'に指定することで回避した。

~~~~~~~~~diff:.vimrc
set rtp+=~/.vim/bundle/vundle/
+ let g:vundle_default_git_proto='git'
call vundle#rc()
~~~~~~~~
AIR for iOSでスクリーンショットをカメラロールに保存するANEを作ってみたけど真っ白な画面しか取れない

```objc
//
//  ScreenShotANE.m
//  ScreenShotANE
//
//  Created by sakurai hiroyuki on 12/07/14.
//  Copyright (c) 2012 __MyCompanyName__. All rights reserved.
//

#import "ScreenShotANE.h"
#import <QuartzCore/QuartzCore.h>
#import <UIKit/UIKit.h>

#define DEFINE_ANE_FUNCTION(fn) FREObject (fn)(FREContext context, void* functionData, uint32_t argc, FREObject argv[])

#define MAP_FUNCTION(fn, data) { (const uint8_t*)(#fn), (data), &(fn) }


//APIとなるメソッド
//FREObject TweetPost(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[]) {
DEFINE_ANE_FUNCTION(SaveScreenShot)
{
    id delegate     = [[UIApplication sharedApplication] delegate];
    UIWindow* stage = [delegate window];    
    
    UIGraphicsBeginImageContextWithOptions(stage.frame.size, NO, 0);


    //UIView.layerが真っ白。Flashの表示領域はどうしていしたらいいの？？？
    [stage.layer renderInContext:UIGraphicsGetCurrentContext()];


    NSData *pngData = UIImagePNGRepresentation(UIGraphicsGetImageFromCurrentImageContext());
    UIImage *screenImage = [[UIImage imageWithData:pngData] retain];
    
    UIImageWriteToSavedPhotosAlbum(screenImage, nil, nil, nil);
    UIGraphicsEndImageContext();
    
    NSLog(@"++++++save++++++");
    
    return NULL;   

}

//初期化関数
void SaveScreenShotContextInitializer(void* extData, const uint8_t* ctxType, FREContext ctx,
                                 uint32_t* numFunctionsToTest, const FRENamedFunction** functionsToSet) {
    *numFunctionsToTest = 1;
    FRENamedFunction* func = (FRENamedFunction*)malloc(sizeof(FRENamedFunction)*1);
    func[0].name = (const uint8_t*)"SaveScreenShot"; //ネイティブ拡張関数名
    func[0].functionData = NULL;
    func[0].function = &SaveScreenShot; //ネイティブコード関数のポインタ
    
    *functionsToSet = func;
}
void SaveScreenShotContextFinalizer(FREContext ctx) {
    return;
}
void SaveScreenShotExtInitializer(void** extDataToSet, FREContextInitializer* ctxInitializerToSet,
                             FREContextFinalizer* ctxFinalizerToSet) {
    *extDataToSet = NULL;
    *ctxInitializerToSet = &SaveScreenShotContextInitializer;
    *ctxFinalizerToSet = &SaveScreenShotContextFinalizer;
}
void SaveScreenShotExtFinalizer(void* extData) {
    return;
}
```
Groovyでクラスのフィールドアクセスいろいろ

```groovy:field_access.groovy
class A {
  def foo
}
def a = new A(foo: 'Foo')

assert a.foo          == 'Foo' // プロパティアクセス(暗黙的)
assert a.getFoo()     == 'Foo' // プロパティアクセス(明示的)
assert a.foo          == 'Foo' // フィールドアクセス
assert a['foo']       == 'Foo' // マップアクセス
assert a.getAt('foo') == 'Foo' // マップアクセス(メソッド)
assert a.'foo'        == 'Foo' // プロパティアクセス(文字列)
assert a."f${'o'*2}"  == 'Foo' // プロパティアクセス(GString)
```

a['foo'] とかのマップアクセスも出来るのは知らなかったのでメモがてら。
なんだかJavaScriptっぽいですね。
tappでプリントデバッグを便利に行う

# こんな経験はありませんか？

アプリケーションの開発中は少なからずプリントデバッグを行うことがあると思います。そのなかで、以下のような経験はありませんか？

- ArrayやHashのメソッドチェーンの間のオブジェクトの状態を確認するために、一時変数を用紙したことがある
- ppやpを消し忘れてリポジトリにコミットしてしまったことがある

以上の経験を一度でもしたことのある方は、いますぐ[tapp](http://github.com/esminc/tapp)を導入すべきです。

# tappとは

tappは、プリントデバッグを簡単に行うためのライブラリです。tappをrequireすると以下のメソッドが使えるようになります。

- Object#tapp
- Object#taputs

動作はいたって単純で、**レシーバをpp(puts)して返す**というだけです。

```
>> require 'tapp'
=> true
>> "hoge".tapp
hoge
=> "hoge"
```

# なぜこれが便利なのか

## プリントデバッグするのにソースコードの変更が最小で済む

前述のような単純な文字列を出力する場合には、`p`や`pp`と大差ありませんが、すこし複雑になるとその差は歴然です。

例えば、「1から10までの数字で奇数だけを合計する」ような処理では、tappを使って次のようにメソッドチェーンの途中の状態を見ることができます。

```
>> (1..10).tapp.select(&:odd?).tapp.inject(&:+)
1..10
[1, 3, 5, 7, 9]
=> 25
```

これと同じことを`p`や`pp`でやろうとすると、出力したい箇所を一時変数に入れなければならず、非常に面倒です。

また、`Symbol#to_proc`と組み合わせることで、属性やメソッドの返り値を確認するのにも使えます。

```
> array = [1, 2, 3, 4, 5].tapp(&:size)
5
 => [1, 2, 3, 4, 5] 
```

## プリントデバッグを仕込んだままコミットするのを防ぐ & 発見しやすくする

`p`や`pp`を使わないようにし、ソースコード管理をgitで行っている場合は`tapp grep`コマンドが便利です。

`tapp grep`コマンドは、tappで提供しているメソッドを全て検索してくれるので、消し忘れやの防止や、発見に非常に役立ちます。

```
$ bundle exec tapp grep
app/controllers/application_controller.rb:    @current_user ||= User.find_by_id(session[:user_id].taputs) if session[:user_id].present?
app/controllers/application_controller.rb:    !!current_user.tapp
```

# Railsで使うときは注意も必要

Rails(ActiveModel)でtappを使う際には、AssociationProxyやScopeに注意しなければいけません。

普通に使っている分にはArrayのように見える彼等ですが、チェーンの間にtappを差しこんでしまうとそこでチェーンが切れてしまうため、その先がエラーになってしまう場合があります。

どこまでがScopeやAssociationProxyのチェーンになっているか見極めてtappを差し込みましょう。

# おわりに

もし、現在`p`や`pp`を使ってプリントデバッグをしているようでしたら、今すぐにでもtappを使うべきです。まずはGemfileに`gem 'tapp'`を加えてみましょう。(Railsでしたら、developmenとtestグループに足しておくのがおすすめです)

また、Version 1.4.0からデフォルトprinterの変更や、callerを出力するかどうかを設定できるようにもなっていますので、興味のある方はぜひ[README](https://github.com/esminc/tapp/blob/master/README.md)や[tappのacceptance test](https://github.com/esminc/tapp/tree/master/spec/acceptance)をご覧ください。

## tappはオープンソースプロダクトです

tappはオープンソースプロダクトです。みなさんからのpull requestをお待ちしています!

[esminc / tapp](http://github.com/esminc/tapp)
popした値を直接代入しようとしたときに、コンストラクタが例外を投げると、popした要素は失われる

自分の理解が曖昧だったので確かめました。

```java:LostElement.java
package com.example.javamisc.exceptionsafe;

import static org.hamcrest.core.Is.is;
import static org.junit.Assert.assertThat;

import java.util.Stack;

import org.junit.Test;

public class LostElement {
    @Test
    public void popした値を直接代入しようとしたときに_コンストラクタが例外を投げると_popした要素は失われる() throws Exception {
        Stack<Hoge> s = new Stack<Hoge>();
        s.push(new Hoge(1));
        s.push(new Hoge(2));
        assertThat(s.size(), is(2));
        try {
            Hoge h = s.pop();
        } catch (RuntimeException e) {
        }
        assertThat(s.size(), is(1));
        assertThat(s.pop().fuga, is(1));
    }
}

class Hoge {
    public Hoge() {
        throw new RuntimeException();
    }

    public Hoge(int fuga) {
        this.fuga = fuga;
    }

    public int fuga;

}
```
Dozens APIを利用してDNSレコードを更新する


[Dozens](http://dozens.jp/)にはRESTなAPIがあり、ドメインのDNSレコードをHTTP経由で参照/更新することができる（[マニュアル](http://sites.google.com/a/dozens.jp/docs/)）。

このスクリプトを自鯖に置いてcronで回すことで、固定IPがないサーバーに動的にIPを割り振るDDNS的なことが出来る。なおglobal ipの取得にはifconfig.meを利用している。

~~~~~~~~
# -*- coding: utf-8 -*-
require 'bundler/setup'
Bundler.require

USER   = "Username"
KEY    = YAML.load_file('./secret.yml')["API_KEY"]

DOMAIN = "mydomain.com"
FQDN   = "saba.mydomain.com"
TYPE   = "A"

token  = `curl -s http://dozens.jp/api/authorize.json -H X-Auth-User:#{USER} -H X-Auth-Key:#{KEY} | sed 's/.*:"//' | sed 's/"}//'`.chomp
res    = `curl -s http://dozens.jp/api/record/#{DOMAIN}.json -H X-Auth-Token:#{token}`
json   = JSON.parse(res)
target = json["record"].select{|r| r["name"] == FQDN && r["type"] == TYPE }.first
exit if target == nil

gip    = `curl -s ifconfig.me/ip`.chomp
print "target: "; puts target

#    resp = `curl -X POST -d #{data} #{header} -s http://dozens.jp/api/record/update/33375.json`
resp = `curl -d '{"prio":"","content":"#{gip}","ttl":"7200"}' -H "X-Auth-Token:#{token}" -H "Host: dozens.jp" -H "Content-Type:application/json" -s http://dozens.jp/api/record/update/#{target["id"]}.json`

print "response: "; puts resp
print "check: "; puts `curl -s http://dozens.jp/api/record/#{DOMAIN}.json -H X-Auth-Token:#{token}`
~~~~~~~

~~~~~~~ruby:Gemfile
source :rubygems
gem 'json'
~~~~~~~

~~~~~~yaml:secret.yml
API_KEY: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
~~~~~~

危険性を深く理解していないため趣味用途に留めた方がいいと考えているけど、とりあえず便利。
Capistrano利用時に複数プロジェクトでカスタムnamespaceファイルを共通化する

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

Capistranoでプロジェクトが複数になってくるとNamespaceの使い回しが多くなる。
loadメソッドで外部からレシピを取り込める。

<pre><code>.
├── proj_a
│   └── config
│       ├── deploy
│       │   ├── production.rb
│       │   └── staging.rb
│       └── deploy.rb
├── proj_b
│   └── config
│       └── deploy
├── lib
    └── echo.rb
</code></pre>

libあたりに共通化したいレシピのecho.rbを置いてみる。


```ruby:echo.rb
namespace :hello do
  task :world do
    puts "good night."
  end
end
```

そしたら`deploy.rb`内でloadする。

    load '../lib/echo'
cleanは副作用を扱うのにIOモナドを使っていない

[さっきのコード](http://qiita.com/items/23dc0decf818db8c0f07)見ると分かるけど、Clean は純粋関数型言語なんだけど、IOモナドは使っていない。 *World -> *World の「*」がミソで、一意型というのを使って副作用を安全に扱えるようにしている。http://d.hatena.ne.jp/quox/20080809/p4 の2chからのコピペの説明が一番簡潔な気がする。

そもそもIOを扱うって目的だけならIOモナドは要らなくて、World型を何らかの形で可視化して矛盾なく扱えれば十分なはず。Haskellでモナドを使ってあり難いのは、IO型のコンビネータとしてモナドが優れているってだけの話じゃないかな。確かAllowでもIO型は表現できた記憶があるし。ってのが素人目で見た(かなりいい加減な)感想。

##参考
ググってもいい資料見つけにくかったのでメモ。いずれも書かれた時期が古いかも。

- [lethevertの純粋関数型言語Concurrent Clean覚え書き](http://www.geocities.jp/lethevert/clean/)
- [純粋遅延関数型言語Concurrent Clean](http://sky.zero.ad.jp/~zaa54437/programming/clean/)
Hello clean world!

OS XでCleanを動かしたときのログ。Qiitaに[Clean](http://wiki.clean.cs.ru.nl/Clean)タグがなかったようなので。

```
% wget http://clean.cs.ru.nl/download/Clean24/macosx/clean2.4.zip
% unzip clean2.4.zip
% cd clean
% make
% cat hello.icl
module hello
import StdEnv
Start :: *World -> *World
Start world # (file, world) = stdio world
              file = fwrites "Hello World!" file
              (ok, world) = fclose file world
            = world

% bin/clm hello -o hello
Compiling hello
Warning [StdFile.abc,3,stdio;33]: no inline code for this rule
Warning [StdFile.abc,3,fclose;30]: no inline code for this rule
Generating code for hello
Assembling hello
Linking hello
ld: warning: option -s is obsolete and being ignored
% ./hello
Hello World!65536
Execution: 0.00  Garbage collection: 0.00  Total: 0.00
```

ググラビリティ低過ぎて泣きそうになったというか泣いてる。

##参考

- [この夏、Cleanを始めよう！](http://d.hatena.ne.jp/eldesh/20110707/1310047869)
【質問】google ajax feed api+jquery mobile

最近、暇だったのでgoogle ajax feed apiを触ってみた見ましたが、jQuery mobileのlistviewを動的作成するところで困っています。
"html +="の部分で ul data-role="listview" data-inset="true"とliを使って、取得したRSSをjQuery mobileでリスト化したいんですが、途中で投げ出してしまいました。かなりいじったんですが、さっぱりわかりません。ヒントでも、直接コードを書いても構いませんので助けて頂けると嬉しいです。


```js:
var echo = function () {
entriesArray.sort (function (b1, b2) { return b1.sortDate < b2.sortDate ? 1 : -1; } );//降順ソート
//this.entriesArray.sort (function (b1, b2) { return b1.sortDate > b2.sortDate ? 1 : -1; } );//昇順ソート
var feedLength = (_maxLength)? _maxLength : entriesArray.length;
var container = document.getElementById(_id);
var html='<dl>';
for (var i = 0; i < feedLength; i++) {
var entry = entriesArray[i];
var pdate = new Date(entry.publishedDate);
var Y = pdate.getFullYear();
var m = pdate.getMonth() + 1;
m = (m < 10)? "0" + m:m;//月数字を2桁に
var d = pdate.getDate();
d = (d < 10)? "0" + d:d;//日数字を2桁に
var date = Y + "年" + m + "月" + d + "日";

html += '<li>';
html += '<img src="http://favicon.st-hatena.com/?url=' +entry.siteUrl + '" />';
html += ' <a href="' + entry.link + '" target="_blank">' + entry.title + '</a>（' + date + '）';
html += '<img src="http://b.hatena.ne.jp/entry/image/large/' + entry.link + '" />';
}
html += '</dl>';
container.innerHTML += html;
};

google.setOnLoadCallback(init);
};


getRssFeeds("feeds", [

"http://feeds.feedburner.com/hatena/b/hotentry"
]);

//]]>``
PHPUnitのDBUnit拡張

弊社ブログからの転載(http://tech.aainc.co.jp/archives/1314)

通常のテストクラスは「PHPUnit_Framework_TestCase」を継承して作りますが、DBUnitを使う場合は「PHPUnit_Extensions_Database_TestCase」を継承して、さらにabstract functionの「getConnection」と「getDataSet」を実装します。

↓こんな感じで↓

```
class SampleDBTest extends PHPUnit_Extensions_Database_TestCase {
	
	public function getConnection() {
		$pdo = new PDO('mysql:host=192.168.***.***; dbname=test', 'user', 'password');
        	return $this->createDefaultDBConnection($pdo);
	}
	
	public function getDataSet() {
		return $this->createXMLDataSet(dirname(__FILE__) . '/../data/sample.xml');
	}
}
```

getConnectionで使用するデータベース情報、getDataSetで初期データをぶち込んでいます。sample.xmlは次のようなXMLファイルです。

```
<?xml version="1.0" encoding="UTF-8"?>
<dataset>
    <table name="sample">
        <column>id</column>
        <column>name</column>
        <column>telephone</column>
        <row>
            <value>1</value>
            <value>itoh</value>
            <value>03-****-****</value>
        </row>
        <row>
            <value>2</value>
            <value>katoh</value>
            <value>04-****-****</value>
        </row>
    </table>
</dataset>
```

このように記述すると、テストメソッドが実行される前にsampleテーブルにレコードが2行追加されます。
試しに、ちゃんと初期データが追加されているかどうかを確認する為、次のようなテストを書いてみます。

```
/** @test */
public function 初期データがちゃんとロードされているかテスト() {
	
	// 事前データが作成されて、実際のDBのテーブルの件数が2件であること
	$this->assertEquals(2, $this->getConnection()->getRowCount('sample')); 

	// 事前データが作成されて、実際のDBからSQLで取得したテーブルの内容と事前データのテーブルの内容が同一であること		
	$sql = 'SELECT id, name, telephone FROM sample';
	$this->assertTablesEqual($this->getDataSet('sample')->getTable('sample'), $this->getConnection()->createQueryTable('sample', $sql));

	// 事前データが作成されて、実際のDBからSQLで取得したテーブルの内容と予め用意した期待値用xmlで生成したテーブルの内容が同一であること
	$sql = 'SELECT name, telephone FROM sample';
	$this->assertTablesEqual($this->createXMLDataSet(dirname(__FILE__) . '/../data/sample_expected.xml')->getTable('sample'), $this->getConnection()->createQueryTable('sample', $sql));

	// 事前データが作成されて、実際のDBからSQLで取得したデータセットの内容と事前データのデータセットの内容が同一であること
	$this->assertDataSetsEqual($this->getDataSet('sample'), $this->getConnection()->createDataSet(array('sample')));
}
```

テストはちゃんと全て通ります。ちなみに3番目のassertは予め用意した期待値用XMLを利用しています。sample_expected.xmlの内容はこんな感じです。

```
<?xml version="1.0" encoding="UTF-8"?>
<dataset>
    <table name="sample">
        <column>name</column>
        <column>telephone</column>
        <row>
            <value>itoh</value>
            <value>03-****-****</value>
        </row>
        <row>
             <value>katoh</value>
            <value>04-****-****</value>
        </row>
    </table>
</dataset>
```
Jetty が HTTP Error 413 を返してきた場合の対応方法


## 問題
solr に POST される query が設定の上限を超えていると

`HTTPError: HTTP Error 413: FULL head`

となってしまう。

## 対応方法
etc/jetty.xml の headerBufferSize を変更する。
※ headerBufferSize が無い場合は項目を追加する

```etc/jetty.xml
<Call name="addConnector">
  <Arg>
      <New class="org.mortbay.jetty.bio.SocketConnector">
        <Set name="host"><SystemProperty name="jetty.host" /></Set>
        <Set name="port"><SystemProperty name="jetty.port" default="28983"/></Set>
        <Set name="maxIdleTime">50000</Set>
        <Set name="lowResourceMaxIdleTime">1500</Set>
        <Set name="statsOn">false</Set>
        <Set name="headerBufferSize">16384</Set>
      </New>
  </Arg>
</Call>
Emacsで現在のキーバインドを確認する

Emacsで現在のキーバインドを確認するにはキーバインドの一覧を表示するか知りたいキーをタイプして確認します。

キーバインド一覧を表示するには、

```
M-x describe-bindings
```

また、特定のキーのバインドを知りたいときは、

```
M-x describe-key
```

と打った後に知りたいキーをタイプします。
redo+: undoしすぎたのを元に戻す

undoしすぎたのを元に戻すようにredo+をいれます。

インストールは`M-x packege-list-packages`の一覧から`redo+`を選択してインストールします。

設定ファイルに下記を追加します。

```common-lisp:.emacs.d/init.el
;;; redo+
(require 'redo+)
(global-set-key (kbd "C-M-/") 'redo)
(setq undo-no-redo t) ; 過去のundoがredoされないようにする
(setq undo-limit 600000)
(setq undo-strong-limit 900000)
```

`C-/`でundoをして、undoしすぎた場合は`C-M-/`で元に戻します。
Coffeescriptのデバッグと自動コンパイル



##CoffeeScriptのデバッグについて
ChromeプラグインのCoffeeConsoleを使う。
下記からインストールすると、ChromeのデバッガにCoffeeConsoleというタブが追加され、そのConsoleからCoffeescriptを実行できるようになる。Javascriptを書かなくて済む。
https://chrome.google.com/webstore/detail/ladbkfdlnaibelfidknofapbbdlhadfp



##自動コンパイルについて
自動コンパイルは、フレームワークが吸収してくれる場合は特に問題ないが、野良で書くときはけっこう悩む
色々ためしたけど、結局coffeeコマンドの自動監視オプションに落ち着いた。

```sh:自動コンパイル
%coffee -w -c *.coffee
12:58:34 - compiled coffee.coffee
12:58:34 - compiled test.coffee```

###他に検討したもの
####1.vimで保存時に自動コンパイル
長い間これを使っていたが、保存のたびにチカチカ画面をロードするのがうっとうしい
http://d.hatena.ne.jp/yogit/20110710/1310269515

####2.ブラウザで直接Coffeescriptを読み込む
Chromeだと、起動オプションをつけないとうまく動かないらしい。起動オプションをつけたら重たくなって使い物にならなかったので、断念した。

```html:coffeescript
<script type="text/coffeescript">
	console.log "hello coffee"
</script>
Ruby で中置関数

Haskell では，関数を中置する文法が用意されています．

```haskell
5 `mod` 2 -- 1
[1,2,3] `isPrefixOf` [1,2,3,4] -- True
```

Ruby でも関数をうまく中置できないか考えました．
かなりネタですが，次のようにするとそれっぽくなります．`` 不要です．

```ruby
# 右辺の値を受け取って，左辺の値を受け取り結果を返すメソッドを定義
def is_prefix_of(rhs)
    lambda do |lhs|
        lhs.zip(rhs).reject{|a,b| a.nil?}.all?{|a,b| a==b}
    end
end

def elem(rhs)
    lambda{|lhs| rhs.include? lhs}
end

a1 = 1,2,3
a2 = 1,2,3,4,5,6
n = 10

# a1 を知るためにブロックで外の変数を取り込む
self.define_singleton_method(:method_missing) do |name,*args|
    args.first.call eval name.to_s
end

# is_prefix_of を中置！
a1 is_prefix_of a2 #=> true

# 左辺が右辺に含まれているかを示す elem も中置！
n elem [2,4,6,8] #=> false
```

これはまず `is_prefix_of a2` で `a2` だけを部分適用した `Proc` オブジェクトが返され，`a1` が呼ばれて，`a1` は実際には存在しないメソッドなので `method_missing` に呼び出しが渡され，そこで実際の処理が行われるという流れです．
`method_missing` の定義内で `a1` を知っていないといけないのと，そもそもリテラルが左辺に来てはいけないので実用性は無いですが，中置格好良いです．
Gitコマンドメモ

*更新：2012/07/13 09:57*

##ブランチの作成
ブランチを作って、そのブランチへ切替ます。

```zsh
% git checkout -b [作成ブランチ名] [作成元ブランチ名]
```

##ブランチの切替

```zsh
% git checkout [切替先ブランチ名]
```

##リモートブランチ作成
ローカルに新しいブランチを切って、それをリモートへpushする。

```zsh
% git checkout -b [作成ブランチ名] [作成元ブランチ名]
% git push origin [作成ブランチ名]
```

##リモートのブランチ情報を取得
他の人が作成したリモートのブランチ情報が欲しいとき。

```zsh
% git fetch origin
```

##リモートから更新情報の取得
svn updateみたいなもん。

```zsh
% git pull origin [ブランチ名]
```
配列でもオブジェクトでも繰り返ししてくれるforEach

```forEach.js
var forEach = function(list, callback) { 
  if ( list instanceof Array ) { 
    var len = list.length; 
    for (var i=0; i<len; i++) { 
      callback.call(list[i], i, list[i]); 
    }   
  } else {
    for (var key in list ) if ( list.hasOwnProperty(key) ) { 
      callback.call(list[key], key, list[key]); 
    }   
  }   
}; 
```
 
```sample.js
// 配列  
var arr = ["hoo","bar","baz"]; 
forEach(arr, function(i, val) { 
  console.log(i + ":" + val); 
}); 
// オブジェクト  
var obj = { jp: "japan", us: "united states" };  
forEach(obj, function(key, val) { 
  console.log(key + ":" + val + "=" + this); 
}); 
```
Groovyで整数範囲(IntRange)を拡張してその範囲でランダムな値を返せるようにする


```groovy:intRangeRandom.groovy
IntRange.metaClass.define {
  random {
    [delegate.from, delegate.to].min() + new Random().nextInt(delegate.size())
  }
}

assert (1..10).random() in 1..10 // => 1〜10
assert (5..<1).random() in 2..5  // => 2〜5
```
OCamlでprintfを少し改造する

```ocaml
# error "`%s' is defined as function\n" "foo"
error: `foo' is defined as function
- : unit = ()
```

みたいなerror関数は次のように定義できる：

```ocaml
let error fmt = Printf.printf ("error: " ^^ fmt) ;;
```

結構悩んでしまったが、簡単なことだった。

## 補足

^^はPervasivesモジュールの関数でformat6を連結する働きをする。

```ocaml
# "%d" ^^ "%s" ;;
- : (int -> string -> '_a, '_b, '_c, 'd, '_d, '_a) format6 = <abstr>
```

format6というのが出てきたが、もともとformatはformat4のエイリアスで、さらにformat4はformat6のエイリアスになっている。

```ocaml
type ('a, 'b, 'c, 'd) format4 = ('a, 'b, 'c, 'c, 'c, 'd) format6
type ('a, 'b, 'c) format = ('a, 'b, 'c, 'c) format4
```

特に何も考えずformatを繋げてるという理解でいいんではないだろうか……

## 参考

[OCaml 標準ライブラリ探訪 #3.0: Printf: 便利だけどいろいろ謎のある奴](http://d.hatena.ne.jp/camlspotter/20091102/1257099984)
[Module Pervasives](http://caml.inria.fr/pub/docs/manual-ocaml/libref/Pervasives.html)
LaTeXのマクロの中でtabularxを使う

以下のようなマクロを使うとエラーになる：

```LaTeX:test.tex
\documentclass{jarticle}

\usepackage{tabularx}

\newenvironment{conversation}
  {\begin{tabularx}{14cm}{rX}}
  {\end{tabularx}}

\begin{document}

\begin{conversation}
 太郎 & 「あげぽよ」 \\
 次郎 & 「さげぽよ」
\end{conversation}

\end{document}
```

```text
$ platex test.tex
This is e-pTeX, Version 3.1415926-p3.2-110415-2.3 (utf8.euc) (TeX Live 2011)
 restricted \write18 enabled.
entering extended mode
(./test.tex
pLaTeX2e <2006/11/10> (based on LaTeX2e <2009/09/24> patch level 0)
Babel <v3.8l> and hyphenation patterns for english, dumylang, nohyphenation, af
rikaans, arabic, basque, bulgarian, catalan, pinyin, croatian, czech, danish, d
utch, ukenglish, usenglishmax, esperanto, estonian, farsi, finnish, french, gal
ician, german, ngerman, swissgerman, hungarian, icelandic, indonesian, interlin
gua, irish, italian, kurmanji, latin, latvian, lithuanian, mongolian, mongolian
lmc, bokmal, nynorsk, polish, portuguese, romanian, russian, serbian, serbianc,
 slovak, slovenian, spanish, swedish, turkish, turkmen, ukrainian, uppersorbian
, welsh, ancientgreek, ibycus, monogreek, greek, coptic, loaded.
(/usr/local/texlive/2011/texmf-dist/tex/platex/base/jarticle.cls
Document Class: jarticle 2006/06/27 v1.6 Standard pLaTeX class
(/usr/local/texlive/2011/texmf-dist/tex/platex/base/jsize10.clo))
(/usr/local/texlive/2011/texmf-dist/tex/latex/tools/tabularx.sty
(/usr/local/texlive/2011/texmf-dist/tex/latex/tools/array.sty)) (./test.aux))
Runaway argument?
 
! File ended while scanning use of \TX@get@body.
<inserted text> 
                \par 
<*> test.tex
            
? 
```

[これ](http://webdocs.cs.ualberta.ca/~c603/latex/tabularx.pdf)の５章に書いてあるが、次のようにすればいいらしい。

```latex
\newenvironment{conversation}
  {\tabularx{14cm}{rX}}
  {\endtabularx}
```
LaTeXでページの中央に出力する

```latex
\vspace*{\stretch{1}}
文章
\vspace{\stretch{2}}
\pagebreak
```
- `\vspace`で垂直方向にスペースを空ける。引数でどれくらい空けるかを指定するが、`\stretch`を使うと適当に空白を埋めてくれる

- ページ内で前に文章があるときは`\vspace`、初めて使うときは`\vspace*`にする。`\stretch`の引数は「伸びやすさ」を意味するらしいが、多分上のようにしたら1:2で空白が出力されるということだと思う

- `\pagebreak`で改ページする
composer の autoload.php を Sabel で使う


[composer](https://github.com/composer/composer) で `install` したライブラリを Sabel で使う方法です。

Facebook API を使うために [facebook-php-sdk](https://github.com/facebook/php-sdk/) を使う場合を例にします。

まず、vendor と同じ階層に composer.json を作ります。

```json:composer.json
{
	"require": {
		"php":              ">=5.3.0",
		"facebook/php-sdk": "dev-master"
	}
}
```

composerでインストールします

```shell
$ composer.phar install
```

結果:

```
Installing dependencies
  - Installing facebook/php-sdk (dev-master)
    Cloning 62ca8e9e6663863f69283b46a6df1f64cb84c4e2

Writing lock file
Generating autoload files
```

composer でインストールしたライブラリを Sabel で使えるようにするには、config/INIT.php で vendor/autoload.php を `require_once` します。

```php:/config/INIT.php
<?php

// (略)

############### INCLUDE CONFIGURATION FILES ################

// (略)

require_once(RUN_BASE . DS . VENDOR_DIR_NAME . DS . 'autoload.php');
```

これで Controller などで composer のライブラリがクラスオートロードで利用できるようになります。
hello


```objectivec:Objective-C
UIAlertView *alert = [[UIAlertView alloc]
	initWithTitle:@"hello"
	message:@"hello, world!"
	delegate:nil
	cancelButtonTitle:nil
	otherButtonTitles:@"OK", nil];
[alert show];
[alert release];
```

```javascript:JavaScript
var strs = ['hello', 'world'];
for (var i = 0; i < strs.length; i++) {
	alert(strs[i]);
}
```

```ruby:Ruby
['hello', 'world'].each do |str|
	puts str
end
```
第一回 オフラインリアルタイムどう書くの解答例。Lua で。

Lua 5.2でビット演算ライブラリが追加されているのを思い出したので http://qiita.com/items/5dfd820a4047376c3bf3 をLuaで書いてみました。Lua 5.2用です。Lua 5.1では動作しませんのでご注意を。

C++版と違い、「o」「x」のそれぞれに16ビットを割り当てて32ビットで演算してます。反則の判定は32ビットの値を16ビット回転させ上位16ビットと下位16ビットを入れ替えて排他的論理和をとることでおこなっています。

`a and b or c` は `a ? b : c` と、だいたい同じ意味です。

要素のインデクスが1から始まるとわかっていても一時はまりました。この仕様はもう変えようがないのかなぁ…。

```Lua:Lua

zero = string.byte("0", 1)
side = { [0] = "x", [1] = "o" }

function ticktacktoe(s)
  local b   = { 0x00b600b6, 0x00ee00ee, 0x005e005e,
                0x00f500f5, 0x002d002d, 0x00dd00dd,
                0x00730073, 0x00eb00eb, 0x009b009b }
  for i = 1, 9 do
    n = s:byte(i) - zero
    if bit32.bxor(b[n], bit32.rrotate(b[n], 16)) ~= 0 then
      return "Faul: " .. side[(i + 1) % 2] .. " won."
    end
    b[n] = bit32.bor(b[n], ((i % 2) == 1) and 0x000000ff or 0x00ff0000)
    if bit32.band(table.unpack(b)) ~= 0 then
      return side[i % 2] .. " won."
    end
  end
  return "Draw game."
end

for s in io.lines() do
  print(ticktacktoe(s))
end
```
Bashで作ったランダムな時刻でcronにタスクを登録する

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

複数のサーバでDailyなタスクを登録する際、時刻をランダムにしておきたいことがあるので適当に生成する。

```shell:bash
$ MIN=`bash -c 'echo $(($$ % 60))'`
$ HOUR=`bash -c 'echo $(($$ % 24))'`
$ TASK="$MIN $HOUR * * * /bin/true"
$ sudo echo "$TASK"
39 16 * * * /bin/true
```

新規Bashに振られるプロセスIDを元にMIN,HOURの行は毎回違う値になる。

bash的ノウハウを使っているのはこの辺。

* プロセスID $$が毎回違う値になるように別シェルを起動する
  * シングルクォートの遅延展開にしないと$$は親のPIDになる
* 二重括弧$(())で演算、商の余りで無効な時刻生成を回避
* TASKのところはダブルクォートで$MIN.$HOURを展開しないと最後のEchoでそのまま出現する
  * クォート無しでは$HOURがコマンドとして解釈されて代入できない
* $TASKはクォートなしだと"*"がカレントディレクトリのファイル一覧に展開されて大変危険

sudoはroot以外からcronの設定ファイルに直接突っ込むためにつけてみた。rootなら不要だがcron関連のパーッミッションには注意。
Railsで読み込むスタイルシートを指定する方法 

application.cssに

>
 *= require_tree .

のかわりに

>
 *= require_directory .

とする。これでassets内全てでなくassets内一番上のディレクトリだけを参照するようになる。
それから、assetsディレクトリにinsideとか適当な名前をつけたサブディレクトリを作って、読み込ませたくないCSSをそこに移動させる。たとえばstories.css.scssをここに移動させる。

これで、まずinsideに入れたCSSを読み込まなくなる。

読み込ませたいページのViewにだけ、

>
<%= stylesheet_link_tag "inside/stories", :media => "all" %>

という読み込みタグを書き込む。これでstories.css.scssは、そのページでのみ読み込まれる。
MacPorts から Homebrew に移行後、Ruby の Native Extension のコンパイルに失敗する


ひとことで言うと、MacPorts から Homebrew へ移行したときは Ruby 再インストールしましょう、ということです。

1. MacPorts から Homebrew に移行後、json gem をインストールしようとしたら `No such file or directory: /opt/local/bin/gmkdir` などと言われて失敗。
2. `/opt/local` は MacPorts がいろいろインストールするとこなので、いまの環境には存在してない。なんでそんなとこ見てるの?
3. json gem の `json-1.7.3/ext/json/ext/parser/Makefile` をみると `MAKEDIRS = /opt/local/bin/gmkdir -p` と記述されてる。
4. この Makefile は同じディレクトリの extconf.rb で生成されたもの。生成には mkmf ライブラリによって追加される `Kernel#create_makefile` を使用している。
5. mkmf のソースをみてみると `create_makefile -> configuration -> config_string` と呼ばれ、結局 `RbConfig::CONFIG["MAKEDIRS"]` をみていることがわかる。
6. RbConfig は rbconfig ライブラリで追加される。このソースを見てみると `CONFIG["MAKEDIRS"] = "/opt/local/gmkdir -p"` とハードコードされてる!
7. これはたぶん Ruby のインストール時に環境に応じて生成するんだろうと思って Ruby 再インストール。
8. 再度 rbconfig.rb 見てみると `CONFIG["MAKEDIRS"] = "mkdir -p"` になってる!
9. gem install json 再実行したら成功!
cobblerでのVM作成時に複数diskをアタッチする方法

VMの作成をcobbler/koan経由で行う場合に、diskを複数アタッチして利用したい場合があって、やり方を調べたのでメモ。

簡単に言うとカンマで区切ればOK

```
% sudo cobbler system edit --name=vmname --virt-path='/path/to/disk1,/path/to/disk2' --virt-file-size='30'
```

こんな感じにすれば、作成時に最初からvda,vdbにそれぞれアタッチされる。
virt-file-size='30,50' とか書けば、個別にサイズを指定することも可能。
Dialogを表示しようとしてWindowManager$BadTokenExceptionが出る場合の対処

AlertDialogとかProgressDialogとかをshowしようとして以下の様な例外で落ちることがある。

```
WindowManager$BadTokenException Unable to add window -- token android.app.LocalActivityManager$LocalActivityRecord@xxxxxxxx is not valid; is your activity running?
```

原因1. ContextにActivity由来でないContextを渡している。

Activityを渡してやってください。

× getApplicationContext()
× getBaseContext()
○ MyActivity.this

原因2. ActivityGroupの子から表示しようとしている。

親のActtivityを渡してやってください。

× this
○ getParent()
HAProxyのtcplogをsyslog-ngでファイルに出力してfluentdで拾う

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


HAProxyの出力はsyslogなので、syslog-ngで単一のファイルにまとめる。
ついでにfluentdにも送るのでばらしてRubyのMatchDataにしよう。


## syslog-ngの設定
設定を作ってインポートしよう、fluentdとかへの使い回しを考えなければファイル名に日付マクロを使ってもいい。

```syslog-ng_haproxy.conf
template t_haproxy {
  template("$MSGHDR$PRIORITY $MSG\n");
  template_escape(no);
};

destination d_haproxy {
  file("/var/log/haproxy/haproxy.log",
  create_dirs(yes),
  template(t_haproxy));
};

filter f_haproxy {
  program(haproxy);
};

log {
  source(s_src);
  filter(f_haproxy);
  destination(d_haproxy);
};
```

haproxy側ではsyslog-ngのs_srcにログが届くようにしておく、ローカルなら/dev/log宛など。

## ログの出力例

HAProxyのドキュメントにはPriorityが無いが、わかりやすいので出しておく。

    haproxy[27508]: info 127.0.0.1:45111 [12/Jul/2012:15:19:03.258] wss-relay wss-relay/local02_9876 0/0/50015 1277 cD 1/0/0/0/0 0/0


### fluentdのためにMatchDataへ

fluentdに送るだけなら実はテンプレート変更をせずにsyslog形式で送ればよいのだが、HAProxyのtcplogフォーマットが$MSGで一緒くたにされる。
公式ドキュメントを参考にRubyのMatchDataにバラすテスト。

```ruby:irb(pry)
> m = "haproxy[27508]: info 127.0.0.1:45111 [12/Jul/2012:15:19:03.258] wss-relay wss-relay/local02_9876 0/0/50015 1277 cD 1/0/0/0/0 0/0"


> m = txt.match(/(?<ps>\w+)\[(?<pid>\d+)\]: (?<pri>\w+) (?<c_ip>[\w\.]+):(?<c_port>\d+) \[(?<a_date>.+)\] (?<f_end>[\w-]+) (?<b_end>[\w-]+)\/(?<b_server>[\w-]+) (?<tw>\d+)\/(?<tc>\d+)\/(?<tt>\d+) (?<bytes>\d+) (?<t_state>[\w-]+) (?<actconn>\d+)\/(?<feconn>\d+)\/(?<beconn>\d+)\/(?<srv_conn>\d+)\/(?<retries>\d+) (?<srv_queue>\d+)\/(?<backend_queue>\d+)/)
> m.names.each {|x| puts "#{x} => #{m[x]}" }
ps => haproxy
pid => 27508
pri => info
c_ip => 127.0.0.1
c_port => 45111
a_date => 12/Jul/2012:15:19:03.258
f_end => wss-relay
b_end => wss-relay
b_server => local02_9876
tw => 0
tc => 0
tt => 50015
bytes => 1277
t_state => cD
actconn => 1
feconn => 0
beconn => 0
srv_conn => 0
retries => 0
srv_queue => 0
backend_queue => 0
```

後の解析のためといえ数が多いと大変ね。

時間が変な形式なのでRubyでTimeに変換するならstrptimeで。

    puts DateTime.strptime(m["a_date"],"%d/%B/%Y:%H:%M:%S")  #=> 2012-07-12T15:19:03+00:00

よってfluentdのtime_formatはこうなる。

    time_format "%d/%B/%Y:%H:%M:%S"
javascriptのcallbackのネストの可読性を高めるイディオム


[f1,f2,f3]みたいな感じでcallbackのネストの順番を配列で表現するためのイディオム

```coffeescript:Array型拡張用メソッドの追加
Array.prototype.method = (name,func)->
  @prototype[name] = func
  @
```

```coffeescript:cb_nestの実装
Array.method 'cb_nest',()->  
  if @length
    f = @pop()
    f(@cb_nest.call @)
``````coffeescript:使い方
f1 = (data)->
  console.log 1
  data
f2 = (data)->
  console.log 2
  data
f3 = (data)->
  console.log 3
  data
finish = ()->
  console.log "finish"
f_arr = [f1,f2,f3,finish]

f_arr.cb_nest(finish)
#1
#2
#3
#"finish"
```たぶんうごきます。
RailsでAjaxリクエストが2回行ってしまうときにチェックすべき3つの事


## 1. jQueryを2回読み込んでいないか確認する

Rails3.1からAsset Pipelineが導入されたため、誤ってjQueryを2回読み込んでしまっている、なんて事故が起こりがちなようです。

+ まず、application.jsでrequire_treeしているときに、assets/javascript直下にjquery.jsを配置していないか確認する。
+ 上記を確認しても解消しない場合は、rake assets:precompileしたデータがpublic/assets以下にないか確認する。2回jQueryを読み込んでしまっていたスクリプトがそのまま残っているかも知れません。あったら削除してしまいましょう。
+ 再発防止のためにconfig/environments/development.rbに以下のコードを追加しても良いでしょう。

```ruby
# Ignore /public/assets
config.serve_static_assets = false
```

## 2. イベントのバブリングで2回コールされていないか確認する

aタグにイベントを紐付けているときにありがちです。console.logを仕込んで確認をして、これが原因だった場合は以下のコードを追加しましょう。

```javascript
$("a#hoge").live('click', function(event) {
  // …いろんな処理…
  event.stopPropagation();
});
```

## 3. dataTypeがscriptなのに、successコールバックでレスポンスをevalしていない確認する

実際には2回POSTしているわけではないのに、レスポンスのJavaScriptコードを2回評価してしまってはいないでしょうか。

```javascript
$.ajax({
  type: "POST",
  url: url,
  data: data,
  cache: false,
  dataType: "script",
  success: function(data) {
    // やらなくていい
    eval(data);
  };
});
```
レスポンスのJSは勝手に評価されるので、successコールバック内のeval(data)が余計ですね。削除しましょう。
ruby1.9.3にruby-chasen1.7をインストール

rubyの1.9.3でruby-chasen1.7を使えるようにしたくて、ソースコードを修正しました。

```diff:ruby-chasen1.7-patch_for_ruby1.9.3.patch
diff --git Makefile Makefile
index 9cd4044..e668785 100644
--- Makefile
+++ Makefile
@@ -215,5 +215,5 @@ chasen.o: chasen.c $(hdrdir)/ruby/ruby.h \
  $(arch_hdrdir)/ruby/config.h \
  $(hdrdir)/ruby/defines.h \
  $(hdrdir)/ruby/intern.h \
- $(hdrdir)/ruby/rubyio.h
+ $(hdrdir)/ruby/io.h
  
diff --git chasen.c chasen.c
index 177a52c..e41ed48 100644
--- chasen.c
+++ chasen.c
@@ -18,7 +18,7 @@
 ************************************************/
 
 #include "ruby.h"
-#include "rubyio.h"
+#include "ruby/io.h"
 
 #include <chasen.h>
 
@@ -27,10 +27,10 @@ f_chasen_getopt(int argc, VALUE *argv, VALUE class){
    int i;
    char **opt = ALLOCA_N(char*, argc + 2);
 
-   opt[0] = "chasen.so";
+   opt[0] = RSTRING_PTR("chasen.so");
    for (i = 0; i < argc; i++){
-      Check_SafeStr(argv[i]);
-      opt[i + 1] = RSTRING(argv[i])->ptr;
+      SafeStringValue(argv[i]);
+      opt[i + 1] = RSTRING_PTR(argv[i]);
    }
    opt[argc + 1] = NULL;
 
@@ -41,13 +41,13 @@ f_chasen_getopt(int argc, VALUE *argv, VALUE class){
 
 static VALUE
 f_chasen_sparse_tostr(VALUE obj, VALUE str){
-   Check_SafeStr(str);
-   return rb_str_new2(chasen_sparse_tostr(RSTRING(str)->ptr));
+   SafeStringValue(str);
+   return rb_str_new2(chasen_sparse_tostr(RSTRING_PTR(str)));
 }
 
 static VALUE
 f_chasen_fparse_tostr(VALUE obj, VALUE io){
-   OpenFile *fp;
+   rb_io_t *fp;
    char *buf;
    VALUE dst = Qnil;
   
@@ -56,7 +56,7 @@ f_chasen_fparse_tostr(VALUE obj, VALUE io){
    rb_io_check_readable(fp);
    dst = rb_str_new(NULL, 0);
   
-   while ((buf = chasen_fparse_tostr(fp->f)) != NULL) {
+   while ((buf = chasen_fparse_tostr(rb_io_stdio_file(fp))) != NULL) {
       rb_str_cat(dst, buf, strlen(buf));
    }
    return dst;
```


参考:

* http://www.metareal.org/2007/06/14/ruby-extension-struct-rstring-macros/
* http://doc.ruby-lang.org/ja/1.8.7/function/Check_SafeStr.html
* http://d.hatena.ne.jp/takihiro/20100321/1269074490
Craftbukkit サーバーに Dynmap プラグインを導入して Eldaria ワールドデータをインポートする


## 前提
[この方法](http://qiita.com/items/739cf1914acb763bc32e)で Craftbukkit を構築したという前提で話を進めます。

## Dynmap プラグインの導入
http://forums.bukkit.org/ で Dynmap プラグインを検索してダウンロードしてください。そのファイルを、
`~/craftbukkit/plugins` の中に展開します。

## Eldaria ワールドデータのインポート
http://www.planetminecraft.com/member/aurelien_sama/
から Eldaria データをダウンロードしてください。
`~/craftbukkit/eldaria` というディレクトリを作成して、その中にダウンロードしたデータを全て入れます。

その後、`server.properties` を編集して、ワールド名を今アップロードした eldaria に変更します。

```~/craftbukkit/server.properties
level-name=eldaria
```

## サーバーの再起動

```
$ sudo restart craftbukkit
```

でサーバーが再起動され、Dynmap プラグインおよび Eldaria ワールドデータが適用されるはずです。

## ワールドマップを見る
ブラウザで、`http://<サーバーのドメイン>:8123`
を開くと、Dynmap のワールドマップが見られます。
グラデーションをラップした (My Graduation Tips.)


かなり面倒くさかったので、

``` 


#import "Paint.h"

@implementation Paint
{
    CAGradientLayer *grad;
}

-(id)init
{
    self = [super init];
    grad = [CAGradientLayer layer];
    return self;
    
    
}


-(void)gradWith:(UIView *)target from:(UIColor *)c1 to:(UIColor *)c2
{
    // if grad already exist then remove this. 
    if (grad){ 
        [grad removeFromSuperlayer];
    }
    
    
    grad.frame = target.bounds;
    
    grad.colors = [NSArray arrayWithObjects:
                       (id)c1.CGColor,
                       (id)c2.CGColor,
                       nil];
    [target.layer insertSublayer:grad atIndex:0];
    
}

-(void)gradWith:(UIView *)target by:(NSMutableArray *)colors
{
    if (grad){
        [grad removeFromSuperlayer];
    }
    
    grad.frame = target.bounds;
    
    NSMutableArray *res = [NSMutableArray array];
    for (id color in (NSMutableArray *)colors){
        [res addObject:(id)[color CGColor]];
    }
    
    grad.colors = [NSArray arrayWithArray:res];
    [target.layer insertSublayer:grad atIndex:0];
    
}


```

こんなふうなクラスを書いて、

```

        [paint gradWith:_paintedLabel by:[NSArray arrayWithObjects:[UIColor redColor],[UIColor yellowColor], nil]];

```
        
```     

[paint gradWith:_paintedLabel from:[UIColor colorWithRed:0.0 green:0.3 blue:1.0 alpha:1.0] to:[UIColor colorWithRed:0.0 green:0.7 blue:0.933 alpha:1.0]];

```

こんなふうに呼び出すようにしてみた。やっつけだけど、頑張って働いてくれています。
ファイル作成時にテンプレートを挿入する

プログラムなどで新規にファイルを作成する際に、HTMLであれば`<html><head></head>...</html>`や、rubyであれば先頭に`#!/usr/bin/env ruby`など決まった内容をいれる場合が結構あるかと思います。auto-insert-modeを使うと自動でそういった内容を作成時に自動的にいれてくれます。

```common-lisp:~/.emacs.d/init.el
(auto-insert-mode)
(setq auto-insert-directory "~/.emacs.d/insert/")
(define-auto-insert "\\.rb$" "ruby-template.rb")
```

`.rb`のファイルを新しく作成した際に、`ruby-template.rb`の内容が自動的に挿入されます。
Rails3.1をHerokuにデプロイする際の変更個所

ローカルでは問題なく動いていたRailsアプリがHerokuでなぜか動かない！という時のチェックポイント等。というか作業メモです。

### 確認環境
* Rails 3.2.6
* Heroku Cedar Stack

## 変更点

````Gemfile
# Production用のgemを追加
group :production do
  gem 'pg'
  gem 'thin'
end
````

````config/environments/production.rb
# logの出力先を標準出力に変更(不要？)
config.logger = Logger.new(STDOUT)
````

````config/application.rb
#以下の行を追加
config.assets.initialize_on_precompile = false
````

このあたりはちょっと僕も何が正解なのか確信がありません。
何か問題が起きたら、Herokuのトラブルシューティングページをしっかり読むことをオススメします。

https://devcenter.heroku.com/articles/rails3x-asset-pipeline-cedar
jsの定番イディオムに触れつつHaskellの畳込み関数foldrをjsの関数prototypeに実装する

##できるようになること
```javascript:利用例
arr = [1...100]//大人の事情でここだけcoffeescript

add = function(a, b) {
  return a + b;
};
add.foldr(arr,0)
//=>4950 1+2+3+…99

mult = function(a, b) {
  return a * b;
};
mult.foldr(arr,1)
//1*2*3…99
//=>9.332621544394415e+155
```
##実装
```coffeescript:実装(coffeescript)
#関数オブジェクトにメソッドを追加するメソッドを追加
Function.prototype.method = (name,func)->
  this.prototype[name] = func
  this

#上記で追加したメソッドを利用して、foldrメソッドを追加
#これにより、すべての関数からfoldrメソッドが利用できるようになる
Function.method 'foldr',(arr,init)->
  switch arr.length
    when 0 then init
    else 
      @apply null,[arr.shift(),@foldr.apply(@,[arr,init])]
```

##課題
このあたりのイディオムを使ってcallbackのネストをエレガントに表現したい
sinatra とかの heroku run console で ActiveRecord のデバッグログ表示

```console.rb
require "./app" # require what you needed all
require "logger"
ActiveRecord::Base.logger = Logger.new(STDOUT)
```

```sh
heroku run console
> require "./console"
> User.count
D, [2012-07-12T10:25:20.311275 #2] DEBUG -- :    (8.1ms)  SELECT COUNT(*) FROM users
```

まあ、ローカルの irb とかでも同じですね。
ほかにも `heroku run console` でいつも入力するものを入れておくと便利。
bindはfmapとjoinに分解できる

数日前に頭の中で考えてた駄文。

モナドによって性質が大きく違うことからモナドは掴みにくいものだってのはよく言われることだけど、それは各モナドのbindの特色がfmapに入っているかjoinに入っているかにも関連するのかなと思った。

例えば、ListやMaybeだと、joinは皮を剥ぐだけで面白いことは何もしてなくて、fmapにその特色が入っている。

```
instance Functor [] where
    fmap = map

map :: (a -> b) -> [a] -> [b]
map _ []     = []
map f (x:xs) = f x : map f xs
```

逆にStateやIOモナドのfmapは値を普通に関数適用するだけで背後にある状態はまったく触らない。面白いことをやっているのはjoinの方で、状態の変更を外側，内側、と順番に逐次処理する役割を担っている。

```
join              :: (Monad m) => m (m a) -> m a
join x            =  x >>= id
instance (Monad m) => Monad (StateT s m) where
    m >>= k  = StateT $ \s -> do
        ~(a, s') <- runStateT m s
        runStateT (k a) s'
```
ありそうでなかった、ちょっとあったJSのIOモナドのサンプル

ググったら[弾さんの実装](http://blog.livedoor.jp/dankogai/archives/51449872.html)も出てきたけど、もうちょっと真面目なやつ。MLの議論してた中ででてきた。

https://gist.github.com/3094336

と言っても、Haskellでありがたいのは副作用のある関数はIOモナドと**してしか書けない**ことなので、JSでIOモナドが実装できても実用性は乏しい。
git aliases


gitをもっと便利に使うエイリアスの設定内容。
以下を追記。

````~/.gitconfig
[alias]
  graph = log --graph --date=short --decorate=short --pretty=format:'%Cgreen%h %Creset%cd %Cblue%cn %Cred%d %Creset%s'
  gr    = log --graph --date=short --decorate=short --pretty=format:'%Cgreen%h %Creset%cd %Cblue%cn %Cred%d %Creset%s'
  st    = status
  cm    = commit
  stt   = status -uno
  difff = diff --word-diff
  co    = checkout
  br    = branch
  ps    = push
  logg  = log -p --graph --word-diff --pretty=format:'%Cgreen%h %Creset%cd %Cblue%cn %Cred%d 
````
イベントでrotate変更時に、

以下だと動く。
var t = Ti.UI.create2DMatrix().rotate(270);
var a1 = Ti.UI.createAnimation();
a1.transform = t1;
a1.duration = 200;
tmpl.open_win_button.animate(a1);

以下は動かない。
var t = Ti.UI.create2DMatrix();
t.rotate(270);
var a1 = Ti.UI.createAnimation();
a1.transform = t1;
a1.duration = 200;
tmpl.open_win_button.animate(a1);
Oracle でシングルクォートをINSERTするには

シングルクォートを２つ並べて書くか、 chr(39) を使えばよい。

```SQL:sample_insert_single_quote.sql
UPDATE TABLENAME
SET VALUE1 = '''',
VALUE2 = char(39)
WHERE ...
```

# 参考

* [Oracle Technology Network (OTN) Japan - 掲示板 : 文字列に'（シングルクォート）を設定 ...](http://otn.oracle.co.jp/forum/message.jspa?messageID=8003768)
hostsファイルの場所

頻繁に触らないので、毎度毎度 hostsファイルはどこだっけ！ってなるのさ。
WindowsXP はココです。

```
C:\WINDOWS\system32\drivers\etc\hosts
```

hostsファイルは、ローカルマシンだけで、ドメイン → IPアドレス の解決をしてくれる、自分だけのDNSサーバーみたいなもんです。
ローカル開発環境の VirtualHostを Nameベースで接続出来たりるすので、管理が楽になります。

```hosts
# Copyright (c) 1993-1999 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
#      102.54.94.97     rhino.acme.com          # source server
#       38.25.63.10     x.acme.com              # x client host

127.0.0.1       localhost
```

一度も触ったことが無ければ上のような感じ。
ただのテキストファイルだし、書式も簡単。
1行に、一対の IPアドレス と ドメイン を書くだけ。 # 以降はコメント。

自分で設定したいものを、この後に書き足すだけ。例えばこんな感じ。

```
#
# VMware Player
#
192.168.24.51	soundws.local
192.168.24.52	sound-uz.jp.local
192.168.24.53	beatnik.jp.local

#
# Apache2.2 + PHP5.3
#
127.0.10.1	test.local
127.0.10.2	sv001.local
```

httpプロトコルに限らず、FTPでもSSHでも、ルーターよりも先に、hosts を読みに行くので、使いどころは同一ネットワーク内に留めておくのが無難。ドメイン名も実在するものとかぶらないよう工夫が必要。
ファイルを保存した時にFlymakeの結果をGrowlで通知する

flymakeでエラーが検出されると通知される奴は自分には少しアクティブすぎたので保存した段階でエラーが検出されると通知されるようにした。

```
(when (executable-find "growlnotify")
  (defun flymake-growlnotify ()
    (let ((count (length flymake-err-info)))
      (when (> count 0)
        (dolist (err-info flymake-err-info)
          (let* ((line    (car err-info))
                 (text    (flymake-ler-text (caadr err-info)))
                 (title   (concat (buffer-name (current-buffer)) ":" (int-to-string line))))
            (start-process-shell-command "emacs-flymake" nil "growlnotify"
                                         "-a" "Emacs" "-n" "'Emacs - Flymake'" "-p" "2" "-s"
                                         "-t" title "-m" (shell-quote-argument text)))))))
  (add-hook 'after-save-hook 'flymake-growlnotify))
```
後会社ではimacで開発してるのでGrowlで```Emacs - Flymake```の通知をMusic Videoにするとかなり目立つのでオススメ

flymake-after-save-hookが反応しなかったので普通にafter-save-hookで書いているけど想像したhookとは別なのだろうか。
フォームに入力されたデータに任意のデータを付け加えてjQueryでPOSTする方法


[serializeArray()](http://api.jquery.com/serializeArray/)を使います。

配列にpushする際は[{name: "キーの名前", value: "キーの値"}]となるように注意しましょう。

```coffeescript
data = $("form").serializeArray()
url  = $("form").attr('action')
data.push({name:'foo', value:'bar'})
$.post url, data
```
"$('.dropdown-toggle').dropdown()"を呼ばなくてもbootstrap-dropdownは正常に動く

僕の勘違いでした。
[Bootstrapの解説ページ](http://twitter.github.com/bootstrap/javascript.html#dropdowns)を読むと、あたかもこのJavaScript↓

    $('.dropdown-toggle').dropdown()

を呼ばないと、ドロップダウンが有効にならないような印象を受けたのですが、この呼び出しは不要です。
解説を良く読むと、

    data-toggle="dropdown"

の属性がタグについていると、自動的にドロップダウンが有効になることがわかりました。

じゃあ、`$('.dropdown-toggle').dropdown()`はどういう時に使うのかというと、

    <a class="dropdown-toggle" data-toggle="dropdown" href="#menu1">
      Dropdown
      <b class="caret"></b>
    </a>

ではなく、

    <a class="dropdown-toggle" href="#menu1">
      Dropdown
      <b class="caret"></b>
    </a>

のように、`data-toggle="dropdown"`の属性が付いていない場合に、あのJavaScriptを呼ぶことで後からドロップダウンを有効にさせたりすることができます。


まあ今のところドロップダウンは最初から有効にする画面しか作っていないので、JavaScriptの呼び出しは全く不要なわけです。


くそう、だまされた！
CapybaraでJSのconfirmダイアログのボタンを押す



CapybaraでJavascriptで表示したconfirmダイアログのボタンを押す

```ruby
# OKボタン
page.driver.browser.switch_to.alert.accept
# キャンセル
page.driver.browser.switch_to.alert.dismiss
```

カピバラ萌え
javascriptでPCとスマートフォン（iPhone / Android）を振り分ける

```javascript
if ((navigator.userAgent.indexOf('iPhone') > 0 && 
navigator.userAgent.indexOf('iPad') == -1) || 
navigator.userAgent.indexOf('iPod') > 0 || 
navigator.userAgent.indexOf('Android') > 0) 
{
	location.href = '/sp/';
}
```