OmniAICreator/Qiita-1.07M huggingface dataset:
CSSだけでマウスオーバーしたときに画像を白みがかったようにさせる

時々使うのに忘れていることが多いのでここにメモ。
(12/6/22 IE対応のためCSSの記述を追記しました)

```html
<a href="hogehoge.html"><img src="image/hoge.jpg" class="overwhite" /></a>
```

```css
a:hover img.overwhite{
	cursor:pointer;
	filter: alpha(opacity=60);        /* ie lt 8 */
	-ms-filter: "alpha(opacity=60)";  /* ie 8 */
	-moz-opacity:0.6;                 /* FF lt 1.5, Netscape */
	-khtml-opacity: 0.6;              /* Safari 1.x */
	opacity:0.6;
	zoom:1;
}
```

白みがかった…というよりは、透明度を変えているだけなので
背景色によっては薄くなるようにしか見えないと思います。
そんなときはこっち↓の記述をどうぞ。

**imgにつけていたclassを、Aタグに付け替えました。**

```html
<a href="hogehoge.html" class="overwhite"><img src="image/hoge.jpg" /></a>
```

```css
a.overwhite{
	background-color:#ffffff;
	display:block;
}

a.overwhite:hover img{
	cursor:pointer;
	filter: alpha(opacity=60);        /* ie lt 8 */
	-ms-filter: "alpha(opacity=60)";  /* ie 8 */
	-moz-opacity:0.6;                 /* FF lt 1.5, Netscape */
	-khtml-opacity: 0.6;              /* Safari 1.x */
	opacity:0.6;
	zoom:1;
}
```

Aタグに白背景を設定して、白っぽくなるように見せているだけです。
背景色をいろいろ変更してみるのもいいかもしれませんねー。
gemsetをcreateしてuseを一発でする

基本的に開発環境はrvm使って、1プロジェクト1gemsetで管理しています。

新しくプロジェクトを作るとき、

```
$ rvm use ruby-1.9.2-head
$ rvm gemset create kensa
$ rvm gemset use kensa
$ gem install kensa
```

とかしていたのですが、下記でgemset作りつつすぐにgemをインストールできるのですね。

```
$ rvm use ruby-1.9.2-head@kensa --create
$ gem install kensa
```
Hash#maxでkeyではなくvalueで比較する

```ruby
# 単にmaxとするとキーで比較される
h = {a: 29, b: 23, c: 39, d: 3}
# x[0]とするとキーを参照できる
p h.max{ |x, y| x[1] <=> y[1] } 
# => [:c, 39]
```
Mobile-JS開発環境で使うRubygemsメモ

DeployツールとテストとSASSのコンパイルツールを使うので、
現状の開発環境はこんな感じ

- Deploy/Task
	- Rake
	- Capistrano
- TDD
	- Jasmine
- SASS
	- compass


```ruby
# Gemfile
source :rubygems

group :development, :test do
  gem 'sinatra', '~> 1.3.2'
  gem 'rake', '~> 0.9.2'
  gem 'capistrano', '~> 2.11.2'
  gem 'capistrano-ext', '~> 1.2.1'
  gem 'capistrano_rsync_with_remote_cache', '~> 2.4.0'
  gem 'capistrano_colors', '~> 0.5.5'
  gem 'railsless-deploy', '~> 1.0.2'
  gem 'jasmine', '~> 1.1.2'
  gem 'jasmine-headless-webkit', '~> 0.8.4'
  gem 'compass', '~> 0.12.1'
end
```

```bash
$ bundle install --binstubs --path vendor/bundle
$ ./bin/jasmine init
```

## ディレクトリ構成
projectディレクトリにToolを置ければ一番いいけど、
できない場合はさらにその上にToolを置けばOK
アプリ本体の`project`は`git submodule`で組み込んでもいいけど、branchとかたくさん切る場合は管理がめんどくさいので、`.gitignore`に`project`を追加して別管理にする

```bash
├── Capfile
├── Gemfile
├── Gemfile.lock
├── README.md
├── Rakefile
├── bin/
│   ├── autospec
│   ├── cap
│   ├── capify
│   ├── compass
│   ├── htmldiff
│   ├── jasmine
│   ├── jasmine-headless-webkit
│   ├── ldiff
│   ├── rackup
│   ├── rake
│   ├── rspec
│   ├── sass
│   ├── sass-convert
│   ├── scss
│   ├── sprockets
│   └── tilt
├── config/
│   ├── deploy/
│   ├── deploy.rb
│   ├── env/
│   ├── tasks/
│   └── tasks.rb
├── project/
│   ├── admin/
│   └── app/
├── spec/
│   └── javascripts/
└── vendor/
    └── bundle/
```
twitter-bootstrap-rails


## twitter-bootstrap-rails

[Twitter Bootstrap](http://twitter.github.com/bootstrap/)を簡単に導入出来るプラグイン。

### 公式リポジトリ

[https://github.com/seyhunak/twitter-bootstrap-rails](https://github.com/seyhunak/twitter-bootstrap-rails)

### 公式ドキュメント

[https://github.com/seyhunak/twitter-bootstrap-rails/wiki](https://github.com/seyhunak/twitter-bootstrap-rails/wiki)

### The Ruby Toolbox

[https://www.ruby-toolbox.com/projects/twitter-bootstrap-rails](https://www.ruby-toolbox.com/projects/twitter-bootstrap-rails)

### 参考ドキュメント

[twitter bootstrap railsを使ったら職が見つかり彼女も出来て背も3センチ伸びました。 - ppworks blog](http://ppworks.hatenablog.jp/entry/2012/02/19/033644)
[Rails3.1.3 + twitter-bootstrap-rails - I can't change the world.](http://change-the-world.heroku.com/11)

## インストール

Gemfileにtwitter-bootstrap-railsを記述する。

```ruby:Gemfile
gem 'twitter-bootstrap-rails'
```

インストールする。

```bash
$ bundle install
$ rails g bootstrap:install
      insert  app/assets/javascripts/application.js
      create  app/assets/javascripts/bootstrap.js.coffee
      create  app/assets/stylesheets/bootstrap_and_overrides.css.less
        gsub  app/assets/stylesheets/application.css
        gsub  app/assets/stylesheets/application.css
```

## 利用方法

### レイアウトの雛形を自動生成

#### 固定レイアウト

```bash
$ rails g bootstrap:layout application ﬁxed
    conflict  app/views/layouts/application.html.erb
Overwrite app/views/layouts/application.html.erb? (enter "h" for help) [Ynaqdh] Y
       force  app/views/layouts/application.html.erb
```

#### 可変レイアウト

```bash
$ rails g bootstrap:layout application ﬂuid
    conflict  app/views/layouts/application.html.erb
Overwrite app/views/layouts/application.html.erb? (enter "h" for help) [Ynaqdh] Y
       force  app/views/layouts/application.html.erb
```
CSS3で作った格好いいスクロールエフェクト

※ Newsタグを作ってみました。シンプルにリンクを紹介する時等にどうぞ。

CSS3で作った格好いいスクロールエフェクトのデモ。

* [CSS Scroll Effects](http://lab.hakim.se/scroll-effects/) 

ソースコードはこちら

* [hakimel/Scroll-Effects](https://github.com/hakimel/Scroll-Effects)
  * [main.css](https://github.com/hakimel/Scroll-Effects/blob/master/css/main.css)

Flip (CSS 3D) とかお気に入り([79行目](https://github.com/hakimel/Scroll-Effects/blob/master/css/main.css#L79) 辺り？)。
ベンダープレフィックスをつらつらと並べながらcss3D関連の機能を設定している、のかな？

```main.css
/**
* Flip styles
*/
.flip {
-webkit-perspective: 400px;
-moz-perspective: 400px;
-ms-perspective: 400px;
-o-perspective: 400px;
perspective: 400px;

-webkit-perspective-origin: 50% 50%;
-moz-perspective-origin: 50% 50%;
-ms-perspective-origin: 50% 50%;
-o-perspective-origin: 50% 50%;
perspective-origin: 50% 50%;
}
.
.
```
includeとextendの違い


extendはクラスメソッド (特異クラスのインスタンスメソッド)として取り込む

```Ruby:
module A
  def echo
    puts 'def a exist'
  end
end

class IncludeA
  include A
end

class ExtendA
  extend A
  # 特異クラスのコンテキストに入ってincludeするのと等価
  #class << self
  #  include A
  #end
end

puts "IncludeA.instance_methods include ehco ?  -> " + IncludeA.instance_methods.include?("echo").to_s
puts "ExtendA.instance_methods  include echo ?  -> " + ExtendA.instance_methods.include?("echo").to_s
puts "IncludeA.singleton_methods include echo ? -> " + IncludeA.singleton_methods.include?("echo").to_s
puts "ExtendA.singleton_methods  include echo ? -> " + ExtendA.singleton_methods.include?("echo").to_s
```
rubyでアラウンドエイリアスの例



rubyでは
* 同名のメソッドが定義された場合に上書きをされるのではなく同名の新しいメソッドが追加され優先される
* そのため元メソッドにエイリアスで別名をつけておくと再定義したあとでも元メソッドを呼び出せる
といったことが出来るらしい。
呼び出し元を触ることなく挙動を変えたりとか、機能追加したりとかに便利。

```Ruby:
module A
  def echo
    puts "original echo method"
  end
end

class B
  include A

  alias :old_echo echo

  def echo
    puts "redefined echo method"
  end
end

obj = B.new
obj.old_echo # => original echo method
obj.echo     # => redefined echo method
```
DataView を子要素に配置する場合、height を入れておかないと表示されない


小一時間ほどはまってしまった。

以下のようなDataViewがあったとする

```coffeescript:view/PictureBookDetail.coffee
Ext.define "MyApp.view.PictureBookDetail",
  extend: "Ext.DataView"
  xtype: "picturebookdetail"
  config:
    baseCls: "comment-list"

    itemTpl: 'picture:<tpl for=".">{picture}</tpl>'
```
```coffeescript:view/PictureBookComments.coffee
Ext.define "MyApp.view.PictureBookComments",
  extend: "Ext.DataView"
  xtype: "picturebookdetail"
  config:
    baseCls: "comment-list"

    itemTpl: 'comment:<tpl for=".">{comment}</tpl>'
```

これを、以下のように配置すると何も表示されない。

```coffeescript:controller/Main.coffee
      view = new Ext.Container
          fullscreen: true
          layout: 'card'
          items: [
            xtype: 'panel'
            layoute: 'vbox'
            items: [
              xtype:'picturebookdetail'
              store: pictureStore
            ,
              xtype: 'picturebookcomments'
              store: commentStore
            ]
          ]

      MyApp.Viewport.push view
```

height をつけてやるとちゃんと表示される

```coffeescript:controller/Main.coffee
      view = new Ext.Container
          fullscreen: true
          layout: 'card'
          items: [
            xtype: 'panel'
            layoute: 'vbox'
            items: [
              xtype:'picturebookdetail'
              store: pictureStore
              height: 100
            ,
              xtype: 'picturebookcomments'
              store: commentStore
              height: 100
            ]
          ]

      Ezuko.Viewport.push view
```
UINavigationBarの背景画像を設定する方法

iOSのバージョンによって色々やり方があるように思えますが、とても簡単な方法が以下。

```ObjectiveC:example.m

#import <QuartzCore/QuartzCore.h>

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    UIViewController *vc = [[UIViewController alloc] initWithNibName:@"ExampleView" bundle:nil];
    UINavigationController *nc = [[UINavigationController alloc] initWithRootViewController:vc];
    nc.navigationBar.tintColor = [UIColor blackColor];//画像の色に合う色にした方が良いと思う
    
    NSString *currentVersion = [[UIDevice currentDevice] systemVersion];
    if ([currentSystemVersion compare:@"5.0" options:NSNumericSearch] == NSOrderedAscending) {
        // iOS5.0以前の場合
        UIImageView *navBg = [[UIImageView alloc] initWithImage:[[UIImage imageNamed:@"bg-nav.png"] stretchableImageWithLeftCapWidth:0 topCapHeight:1]];
        navBg.layer.zPosition = -FLT_MAX;
        [nc.navigationBar insertSubView:navBg atIndex:0];
    } else if (([currentSystemVersion compare:@"5.0" options:NSNumericSearch] == NSOrderedSame) || ([currentSystemVersion compare:@"5.0" options:NSNumericSearch] == NSOrderedDescending)) {
        // iOS5.0以降の場合
        nc.navigationBar setBackgroundImage:[UIImage imageNamed:@"bg-nav.png"] forBarMetrics:UIBarMetricsDefault];
    }

}

```

※やはりiOSのバージョンで切り分けるやり方が無難のようです。ボタンとかが隠れちゃう現象も上記のやり方
なら大丈夫です。
UIView に影をつける


````objectivec
#import <QuartzCore/QuartzCore.h>

self.layer.masksToBounds = NO;
self.layer.cornerRadius = 8; // if you like rounded corners
self.layer.shadowOffset = CGSizeMake(0, -10); // 上向きの影
self.layer.shadowRadius = 3;
self.layer.shadowOpacity = 0.8;
````

http://stackoverflow.com/questions/805872/how-do-i-draw-a-shadow-under-a-uiview

上の方法は簡単だが、アニメーション、リサイズする際などに遅い。
以下の blog 記事が詳しい。

http://www.omnigroup.com/blog/entry/ipad_drop_shadow_performance_test/

結局影の画像を貼っちゃうのが簡単で速度も速そう。
標準出力と標準エラー出力とパイプとリダイレクションまとめ(2016年9月9日現在実に怪しい)

標準出力と標準エラー出力へ文字を出すだけの実験プログラム．

```c:a.c
#include <stdio.h>
int main(int argc, char *argv[])
{
  fprintf(stdout, "1\n");
  fprintf(stderr, "2\n");
  return 0;
}
```

~~以下を試してみた．~~

```
./a                         # 1 2 と表示される (実態は 2 は標準エラー出力)
./a > b.txt                 # 2 と表示され 1 は b.txt へ
./a >& b.txt                # 2 1 と b.txt へ出力される
./a 2>&1 > b.txt            # 2 と表示され 1 は b.txt へ (実態は 2 は標準出力)
./a | less                  # less で 1 が見られ 2 は標準エラー出力で見られる
./a |& less                 # less で 2 1 が見られる
./a >& /dev/null | less     # less で 1 が見られる (2 は捨てられる) ※これが理解不能
./a 2>&1 > /dev/null | less # less で 2 が見られる (1 は捨てられる) (2016年9月9日追記 これが再現しません…どういうことなの…)
./a 2> /dev/null | less     # less で 1 が見られる (2 は捨てられる)
```

~~`>&` が割と謎い…~~

参考 :
 http://x68000.q-e-d.net/~68user/unix/pickup?%A5%EA%A5%C0%A5%A4%A5%EC%A5%AF%A5%C8
 http://cns-guide.sfc.keio.ac.jp/2004/2/4/14.html

(追記) 上記の結果，あまりあてにしないで下さい．過去のものです．

私が本当に必要だったもの(顧客が本当に必要だったもの的な)は，「標準エラー出力だけをパイプに流したい」でした．

```bash
./a 2> b.txt
```

こうすれば，標準エラー出力が `b.txt` に垂れ流されます．そして別の場所で

```bash
tail -f b.txt | less
```

すれば，随時 `b.txt` の内容が得られてパイプに流せます．多分これが一番簡単だと思います．

ファイルの容量が気になって昼寝しか出来なくなる各位におかれましては，この世界には `mkfifo` というコマンドがありまして，これを使うと実際にディスク上に吐き出されることなく先に入ったものが先に出てくる(取り出せる，と言うべきか) First In First Out な擬似的なファイルが出来ますので，以下のようにしてやれば良いと思います．

```bash
mkfifo b.txt

# 気になる人は ls -l b.txt してみると普段見慣れないものが見れると思います

./a 2> b.txt
```

```bash
tail -f b.txt | less
```

(追記おわり)

(追記その2)

一応なんとかなった気ではいますが，やっぱり一個のコマンドで出来てこそな気もしますので，

```bash
./a >>>???&&& | less
```

のようなナニかをするだけで，`less` に標準エラー出力「だけ」が流し込まれる方法をご存知の方が居ましたら，教えて頂ければ幸いです．

(追記その2おわり)
echoの後にスペースを開けなくてよい場合

すっげーどうでもいい話ですが、単語の区切りがはっきり分かる場合はスペースを開けなくても構文エラーになりません。

```php
<?php
echo"引用符\n";
$a = "変数\n";
echo$a;
```

まあ、読みにくくなるだけですけどね。
.emacsでダウンロードが必要なコードの管理

auto-install(install-elisp)をEmacsにインストールしているなら、.emacsで使用しているダウンロードが必要なrequireに対しては、インストールするためのS式をコメントとして記述しておくのがオススメ。

S式のあるコメント行で C-e C-x C-e (すなわち、S式の閉括弧の後ろで C-x C-e) を入力するだけで、新しい環境に移行した時に足りなかったelispファイルをインストールしたり、古くなったelispファイルを更新したりできる。

例

```cl
;; (install-elisp "https://raw.github.com/hoge/hoge.el")
(require 'hoge)

;; (install-elisp-from-emacswiki "huga.el")
(require 'huga)
```
gitoliteはどうやってユーザを判別しているか

ちょっとしたコネタの紹介

gitoliteを`host`に`git`というユーザ名でインストールすると`ssh://git@host:reponame.git`で`reponame`というリポジトリに対するアクセス制御をすることができる。
当然ながら`ssh://git@host:reponame.git`は`host`に`git`というユーザ名でSSH接続することを意味する。

で、不思議なのはgitoliteは一体どうやってユーザの判別をしているのか、ということだ。

なにせgitoliteはサーバ上にインストールされているのだから、gitoliteから見たらどのアクセスも`git`というユーザなのだ。どうやってgitoliteは「このアクセスはyuku_tからだ」「こっちのはyaottiからだ」という風に判断しているのだろう。（むしろこれができなければアクセス制御なんてできっこない）

答えは`git`ユーザの`authorized_keys`ファイルにある。

`authorized_keys`が単なる公開鍵置き場だと思ったら大間違い。実はもっといろいろな設定ができるのだ。
以下に`authorized_keys`の例を引用する。

```
# gitolite start
command="/home/git/gitolite/src/gitolite-shell taka84u9",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa AAAAB3NzaC1y...== taka84u9
# gitolite end
```

`ssh-rsa`以降が普段我々が公開鍵を設定している箇所だ。
そしてその前半部分に`command`や`no-port-forwarding`など見覚えのない部分がある。
実はsshdは公開鍵でユーザの認証を取ったあとの制御をこの部分で記述することができるのだ。
そして、`command`というのがユーザがログイン後に実行するコマンドになる。よくよく見てみると

```
command="/home/git/gitolite/src/gitolite-shell taka84u9"
```

`gitolite-shell`というコマンドに対して引数でユーザ名が渡されている。
先ほどの疑問の答えがこれで、このスクリプトの中でアクセス制御が行われる。
またこのユーザ名は`$GL_USER`という環境変数に格納されるためgitoliteで管理されているgitリポジトリのhookの中でユーザの判別もできる、という訳。

なかなか面白い実装だと思う。
Difference of Gaussian

画像に対して、Difference of Gaussian (DoG) を求める。

```C++
cv::Mat_<float> src; // input
double sigma1, sigma2; // variance of two gaussians. sigma1 < sigma2
cv::Mat_<float> sigma1_conv(src.size()), sigma2_conv(src.size());
cv::GaussianBlur(src, sigma1_conv, cv::Size(0, 0), sigma1);
cv::GaussianBlur(src, sigma2_conv, cv::Size(0, 0), sigma2);
cv::Mat_<float> dst = sigma1_conv - sigma2_conv;
```
null と unset

```PHP
<?php
echo 'start:' . memory_get_usage() . "\n"; 

$a = str_repeat("Hello", 4242);

echo '$a = string:' . memory_get_usage() . "\n";

$a = null;

echo '$a = null:' . memory_get_usage() . "\n";

$a = str_repeat("Hello", 4242);

echo '$a = string:' . memory_get_usage() . "\n";

unset($a);

echo '$a unsetted: '. memory_get_usage() . "\n"; 
```
世界中でただ１つの重複しない値UUIDを生成する

```java:qiita.rb
String id = UUID.randomUUID().toString()
```

参考：http://android-developers.blogspot.jp/2011/03/identifying-app-installations.html

__注意：__
分散システム上においても、一意な識別子を作成できます.
ただし, 一意性に100%の保証があるわけではなくID重複の可能性は0ではありません.
UUIDは偶然の一致がまず起こりえないレベルのものと考えて運用できる代物です.
特定のサーバにCapistranoデプロイする時、任意のcallbackを削除する


たとえば、バッチサーバにdeployする時はassetsで付与されたタスクを無効化する。

```ruby:config/deploy/batch.rb
callbacks[:before].delete_if{|c| c.source == "deploy:assets:symlink"}
callbacks[:after].delete_if{|c| c.source == "deploy:assets:precompile"}
````



### そもそも不用なcallbackをロードしない

Capfileで

~~~~~
load 'deploy/assets'
~~~~~

とする代わりに、assetsを必要とするサーバでのみ`load 'deploy/assets'`してやるという解決策もあるかもしれない。

今回はassetsを有効化するサーバの数に対してバッチサーバの方が小数であったためこの方法を使った。
Ext.data.Store のサーバサイドへの問い合わせ時に、動的に url に パラメータをつける方法


こういう store があったとして、

```coffeescript:store/UserComment.coffee
Ext.define 'MyApp.store.UserComment'
  extend: 'Ext.data.Store'
  config:
    model: 'MyApp.model.UserComment',
    proxy:
      type: "ajax"
      url: 'http://hoge.com/usercomment.ajax'
      reader:
        type: "json"
        rootProperty: "user_pictures"
```

ユーザID1のコメントを取得する場合は
http://hoge.com/usercomment.ajax?user_id=1
のようなパラメータを付与する必要があったとする。
ユーザリストから遷移してきた場合など、呼び出し時にパラメータを動的に変更したい。
その場合は、`Store:load {params:{}}` を使って上げると良い。例えばコントローラー内で呼び出す場合こんな感じ


```coffeescript:controller/Main.coffee
Ext.define 'MyApp.controller.Main',
    extend: 'Ext.app.Controller'
    config:
      routes:
        'user/comment/:id' : 'showUserComment'

    showUserComment: (id) ->
      comments = new MyApp.store.UserComment()
      comments.load
        params:
          user_id: id
        callback:(records, operation, success) ->
          console.log records
          # good job!
        scope: this

```

load 時に、http://hoge.com/usercomment.ajax に自動的に ?user_id={id} を付与してくれる。
ユーザーエージェント調べる


WindowsPhoneのアプリでChromiumが出たんですけど、これって一体UserAgentは何かと気になりました。

ということで、さっと作ってみました。

## 準備

Rubyとbundleは既にインストール済の前提です。

```ruby:Gemfile
source :rubygems
gem 'sinatra'
gem 'slim'
```

```
$ bundle install
```

## 本体

```ruby:check_agent.rb
require 'sinatra'
require 'slim'

get '/' do
	@ua = request.user_agent
	slim :index
end
```

```slim:views/index.slim
doctype html
html
  head
    title UserAgentCheck

  body
    h1 User Agent Checker
    = @ua
```

では実行。

```
$ bundle exec ruby check_agent.rb
```

モバイル機器とかから「http:// PCのIPアドレス:4567/」にアクセスすると、Agent情報が表示されます。
Terminalで階層フォルダを一括作成


階層構造のフォルダをサクッと作りたい。
でもフォルダだけ。ファイルはいらん！という時に。

```
mkdir -p hoge/hoge/hoge
```

オプションを頻繁に忘れるのでメモ。現在地を表示させる`pwd`もセットでどうぞ。
set_error_handlerではfatal errorはハンドリングしてくれない


##問題点

[set_error_handler](http://php.net/manual/ja/function.set-error-handler.php)は、phpのERRORやNOTICEなどが発生した際に実行する関数を指定できるが、FATAL_ERROR(例外)の場合は関数を実行してくれない。

```php:not_working.php
set_error_handler('error_handler');

throw new Exception('hoge');

function('error_handler')
{
	echo 'ERROR!!';
}
```

上記では'ERROR!!'は出力されない

##解決策

[register_shutdown_function](http://php.net/manual/ja/function.register-shutdown-function.php)という関数を使う。

```php:working.php
register_shutdown_function('shutdown_handler');

throw new Exception('foo');

function('shutdown_handler')
{
	echo 'ERROR!!';
}
```

上記は'ERROR!!'が出力される。

###メソッド指定の場合

set_error_handlerもそうだが、メソッドを指定したい場合は

```php:use_method.php
$foo = new Foo();
register_shutdown_function(array($foo, 'bar'));


class Foo{
	function bar()
	{
		echo 'ERROR!!';
	}
}
```

このように行う。

##補足1

今回に限っては解決しますが、FATAL_ERRORを拾っているというわけではないので、厳密には違いますね・・・。まあphpのFATAL_ERRORは回避できないっぽいのでほぼ同義なのでしょうが、なにかいい方法を知ってる方いましたら教えて下さいませ。

詳細はマニュアルページを見て下さい。

##補足2

[set_exception_handler](http://www.php.net/manual/ja/function.set-exception-handler.php)のほうが適切かもしれない。

##参考

* http://postoro.blogspot.jp/2009/10/php-seterrorhandler-fatal-error.html
subversionのリポジトリをdropboxで雲の上へ

http://blog.dateofrock.com/2010/01/dropboxsubversionno.html

ローカルリポジトリをDropboxに突っ込む
確かにいいな

ちなみに下記リンクからDropboxに登録してもらうと、俺もあなたも容量が増えるらしいので、よろしくお願いします。
http://db.tt/vsCgMzAf
screenを使って遠隔で画面共有するメモ

#ペアプロ設定

```shell
ユーザーAのユーザーIDは UserA  
ユーザーBのユーザーIDは UserB  
```
## ユーザーＡの作業

```shell:初期設定
which screen
sudo chmod u+s /usr/bin/screen
sudo chmod 755 /var/run/screen/
```

```shell:~/.screenrc
vi ~/.screenrc
multiuser on
acladd UserB
```

```shell:共有A
screen -S display1
```
## ユーザーBの作業

```shell:Aの画面を共有したい人
screen -r -x UserA/display1
```
NSRegularExpression を使って GitHub Flavored Markdown の改行に対応させる

Sundown などのパーサに送る前に「改行」を「スペース2個+改行」に置き換えるとBRタグにしてくれるようになる。

```objc
- (NSString*)preProcess:(NSData*)data{
    
    NSMutableString* string=[[NSMutableString alloc]initWithData:data encoding:NSUTF8StringEncoding];
    NSRegularExpression *regex;
    NSError *error = NULL;

    // ref github.github.com/github-flavored-markdown
    // NSRegularExpression は OS X 10.7 and later
    regex = [NSRegularExpression regularExpressionWithPattern:@"^[\\w\\<>][^\\n]*(\\n+)"
      options:NSRegularExpressionCaseInsensitive|NSRegularExpressionAnchorsMatchLines error:&error];
    
    if (!error) {
        NSArray *matches = [regex matchesInString:string options:0 range:NSMakeRange(0, [string length])];
        NSEnumerator* e = [matches reverseObjectEnumerator];
        NSTextCheckingResult *match;
        while (match = [e nextObject]) {
            NSRange firstHalfRange = [match rangeAtIndex:1];
            if (firstHalfRange.length==1) {
                [string replaceCharactersInRange:firstHalfRange withString:@"  \n"];
            }
        }
    }
    
    #if !__has_feature(objc_arc)
    [string autorelease];   
    #endif
    
    return string;
}
```
rvm 環境の ruby-1.9.3-p125 で ruby-deubg19 をインストールする方法


既に [@udzrua さんが書いて](http://blog.udzura.jp/2012/02/15/ruby-debug19-install-on-ruby193-p0-and-rvm/) いたりするけどもう少し簡単だったのでメモ。

[ここ](http://blog.wyeworks.com/2011/11/1/ruby-1-9-3-and-ruby-debug) を参考にした。

```
% wget http://rubyforge.org/frs/download.php/75414/linecache19-0.5.13.gem -O ~/src/linecache19-0.5.13.gem

% wget http://rubyforge.org/frs/download.php/75415/ruby-debug-base19-0.11.26.gem -O ~/src/ruby-debug-base19-
0.11.26.gem

% gem install ~/src/linecache19-0.5.13.gem --no-ri --no-rdoc

% gem install ~/src/ruby-debug-base19-0.11.26.gem --no-ri --no-rdoc -- --with-ruby-include=$HOME/.rvm/src/ruby-1.9.3-p125
```

本当は --no-ri --no-rdoc をデフォルトにしておくと良いらしい
unicodeとdecodeとencodeについて実験した

いつも忘れるのでメモっておく
str:unicode = "あ":"U+3042"
unicodeをencodeするとstrになる
strをdecodeするとunicodeになる
二つの文字列を組み合わせて操作するときは、どちらかに揃える必要がある
unicodeにはshift_jis,utf-8などの種類があるので指定する必要がある
u"日本語"はunicodeになる(これについてぐぐると、utf-8であることを明示すると書いてあったが、意味がわからない。unicodeになってるじゃん)
"\#!-*- coding: utf-8 -*-"が何者なのかよくわからない(これもソースがutf-8で書かれていることを宣言している旨の説明があったが、やさしいウソな気がしている。sjisで保存してその宣言がされていたらどうすんの？)

```python:unicode_encode_decode
#!-*- coding: utf-8 -*-
import re
course_key = "テスト:2012年04月05日:00:00〜00:00"
print type(course_key)
#<type 'str'>
u_course_key = u"テスト:2012年04月05日:00:00〜00:00"
print type(u_course_key)
#<type 'unicode'>
unicode_key = course_key.decode("utf-8")
print type(unicode_key)
#<type 'unicode'>
encode_key = unicode_key.encode("utf-8")
print type(encode_key)
#<type 'str'>
time_zone =  re.sub(r'.*(\d{2}月\d{2}日:\d{2}:\d{2}〜\d{2}:\d{2}).*',r'\1',course_key)
print type(time_zone)
#<type 'str'>
print time_zone
#04月05日:00:00〜00:00
Sencha Touch 2 で、controller から view へデータを渡す方法


http://stackoverflow.com/questions/8391551/sencha-touch-2-mvc-how-to-pass-cache-data-between-views-and-controllers
にかかれているように、controller でビジネスロジックを持つようにし、view では表示のみを受け持つ方が良い。
その為、受け渡したい model のインスタンスを controller 側で生成してから、View を呼び出す方法が望ましい

たとえばこういう model があるとする

```coffee:model/UserPicture.coffee
Ext.define("MyApp.model.UserPicture", {
  extend: "Ext.data.Model",
  config: {
    fields: [
      {
        name: "id",
        type: "int"
      }, {
        name: "login_id",
        type: "string"
      }, {
        name: "time",
        type: "string"
      }, {
        name: "description",
        type: "auto"
      }, {
        name: "picture",
        type: "auto"
      }
    ],
  }
});
```

このデータを http://hoge.com/fuga.json から取ってきて、以下の PictureListView に表示したい。

```coffee:view/PictureListView
Ext.define "Ezuko.view.PictureListView",
  extend: "Ext.List"
  xtype: "picturelist"
  id: 'picturelist'
  config:
    itemTpl:[ '<img src="{picture}"/>',
              '<div>{description}</div>'].join('')
```

まずは app/store/ 以下に Proxy を定義した Store クラスを作成する。

```coffee:store/UserPicture
Ext.define 'MyApp.store.UserPicture'
  extend: 'Ext.data.Store'
  config:
    model: 'MyApp.model.UserPicture',
    proxy:
      type: 'ajax'
      url: 'http://hoge.com/fuga.json'
      reader:
        type: 'json'
        rootProperty: "user_pictures"
```

fuga.json では、'user_pictures' 以下が UserPicture model に対応しているものとする。

この store を Controller で呼び出して、View に渡すには以下のようにする

```coffee:controller/Main.coffee
Ext.define 'MyApp.controller.Main',
    extend: 'Ext.app.Controller'
    config:
      routes:
        'picture/index' : 'pictureIndex'
      models: ['UserPicture']
      stores: ['UserPicture']

    pictureIndex:() ->
      store = new MyApp.store.UserPicture()
      store.load (records, operation, success) ->
          view = new Ext.Container
            layout: 'card'
            items: [
              xtype:'picturelist'
              store: store
            ]
          Ezuko.Viewport.push(view);
        , scope: this
```
vimでquickfixリストに独自エラーを表示させる方法

```vim
let errors = []

" Errorline(ファイルパス, エラーのライン, エラーのタイプ, エラー文)
call add(errors, Errorline('hogehoge.js', 0, 'Notice', 'ここにエラー文を追加'))

setlocal errorformat=%f:%l:%m
cgetexpr join(errors, "\n")
copen

function! Errorline(file, line, type, txt)
    return a:file.':'.a:line.':[ '.a:type.' ] '.a:txt
endfunction
```
IEでDOMContentLoaded相当の処理をする

```javascript
function _IE_DOMContentLoaded(){
    try {
        (new Image()).doScroll(); // [!] if DOM is not ready to throw error.
        //if aleady DOM loaded, do something.
    } catch(err) {
        setTimeout(_IE_DOMContentLoaded, 64); // delay after 64ms
    }
}
```
deviseに関して


よく忘れるのでメモ

## 導入
まずはじめは

```
gem 'devise'
```

とGemfileに書く。次に

```
rails generate devise:install
```

とするのだけど、なにも設定してないと下記のようなエラー

```

chabashilah@CHABA_MAC% rails generate devise:install                                                               [~/prv/.../heroku/senstat]
      create  config/initializers/devise.rb
      create  config/locales/devise.en.yml
===============================================================================

Some setup you must do manually if you haven't yet:

  1. Ensure you have defined default url options in your environments files. Here 
     is an example of default_url_options appropriate for a development environment 
     in config/environments/development.rb:

       config.action_mailer.default_url_options = { :host => 'localhost:3000' }

     In production, :host should be set to the actual host of your application.

  2. Ensure you have defined root_url to *something* in your config/routes.rb.
     For example:

       root :to => "home#index"

  3. Ensure you have flash messages in app/views/layouts/application.html.erb.
     For example:

       <p class="notice"><%= notice %></p>
       <p class="alert"><%= alert %></p>

  4. If you are deploying Rails 3.1 on Heroku, you may want to set:

       config.assets.initialize_on_precompile = false

     On config/application.rb forcing your application to not access the DB
     or load models when precompiling your assets.

===============================================================================

```

とても親切。仰るとおりにする。それを終えたら、もう一度

```
rails generate devise:install
```

を打つ。すると

```
    conflict  config/initializers/devise.rb
Overwrite /Users/chabashilah/Dropbox/chabashilah/prv/dev/git/heroku/senstat/config/initializers/devise.rb? (enter "h" for help)
```
とでるが、Yを押して先に進む。
するとまた同じエラーが出る。。。なんでだろう。。。
あ、ちがう。これエラーじゃないんだ！と気づく。
気を取りなおして次に進む。
Modelを作成するわけですが、まぁUserと名をつけておけばいいでしょう。ということで

```
rails generate devise User
```

migrateするのをわすれずに

```
rake db:migrate
```

さて次に、Controllerを作成します。

```
rails generate controller home index
```

とりあえずのログイン情報を表示するためviews/home/index.html.erbに

```
<h1>TOP</h1>
	<% if user_signed_in? %>
	<%= link_to "Logout", 	destroy_user_session_path, method: delete %>
	<% else %>
	<%= link_to "Login", new_user_session_path %>
<% end %>
```

を追加する。

ログイン画面のデザインなどを変更したいので、ここでViewを作成する。

```
rails generate devise:views
```

## さて使いましょう

ログインしてないUserがページを見れないようにするためには
Controllerで`before_filter :authenticate_user!`を
加える。

```
class SensorController < ApplicationController
  before_filter :authenticate_user!

```

とりあえずここまで。時間があるときに追記する予定。




#Reference

https://github.com/plataformatec/devise
http://kitbc.s41.xrea.com/main/?use_devise
Twitter Bootstrapでタブを使ったサンプル

以下にタブを使ったサンプルを置いた。2.x系の話ですよ。
（1.x系から乗り換えの際はチト苦労した）

http://abrakatabura.hatenablog.com/entry/2012/02/02/230010

ポイント

``` client.html
<div class="tabbable">
 <ul class="nav nav-tabs">
  <li class="active"><a href="#home" data-toggle="tab">Home</a></li>
  <li><a href="#tab1" data-toggle="tab">タブ1</a></li>
  <li><a href="#tab2" data-toggle="tab">タブ2</a></li>
 </ul>
 <div id="my-tab-content" class="tab-content">
  <div class="tab-pane active" id="home">
  </div>
  <div class="tab-pane" id="tab1">
   <p>タブ1の中身</p>
  </div>
  <div class="tab-pane" id="tab2">
   <p>tab2</p>
  </div>
 </div>
</div>
```
タブがクリックされイベントをJavaScript側で以下のように受け取れる。

``` control.js
$('a[data-toggle="tab"]').on('shown', function (e) {
 // クリックされたタブ名はこんな感じで取得する。
 var tabName = e.target.href;
 var items = tabName.split("#"); // activated tab

 // 処理内容を書く
	
 //e.relatedTarget // 直前のタブはこんなんで取得可能らしい
});
```

# タブのhref名とtab-paneのID名
タブのhref名とtab-paneのID名を同じ文字列にしないと思ったように動きません！
これ意外と忘れてしまい、最近もハマりましたｗ


# 動的にタブを扱うJsdo.itの作品
- [Bootstrapのタブを動的に扱う 削除追加版](http://jsdo.it/kjunichi/Ah5d)

# GLSLを試せる、わりと実用的な作品
- [forked: WebGLでポリゴン1枚を描く](http://jsdo.it/kjunichi/cAQi)

# 関連記事

- [Bootstrapのプログレスバーを試す - non vorrei lavorare](http://abrakatabura.hatenablog.com/entry/2013/02/13/071645)
- [MarkDownで書いたリンク集をHTMLに変換する](http://abrakatabura.hatenablog.com/entry/2018/01/29/135023)
カスタム属性の設定、取得方法

__①属性を宣言__

```attrs.xml
<declare-styleable name="ActionButton">
    <attr name="ident">
        <enum name="LAB" value="-300" />
        <enum name="RAB" value="-400" />
        <enum name="LAB2" value="-500" />
        <enum name="RAB2" value="-600" />
        <enum name="MAB" value="-700" />
    </attr>
</declare-styleable>
```
　
__②ビューに属性を記述__

```xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout>
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:launcher="http://schemas.android.com/apk/res/XXXXX" <!--アプリケーションのパッケージを設定-->

    <ActionButton>
        android:src="@drawable/ab_empty"
        android:background="@drawable/lab2_bg"
        android:scaleType="center"
        android:layout_height="wrap_content"
        android:id="@+id/btn_lab2"
        launcher:ident="LAB2" <!--属性を指定-->
        android:layout_width="64dip"
        launcher:direction="horizontal"
    </ActionButton>
</LinearLayout>
```
　
　
__③属性を取得__

```ActionButton.java
TypedArray a=context.obtainStyledAttributes(attrs,R.styleable.ActionButton,defStyle,0);
int mIdent=a.getInt(R.styleable.ActionButton_ident, mIdent); // ここで取得！
a.recycle();
```
Gitで特定のファイルのローカル環境での変更を無視する


Git管理されたレポジトリで、ローカル環境でのみ必要な設定ファイルの変更が修正ファイルとして出てきてしまうので、それを無視する方法です。


特定のファイルの変更を無視する

```
git update-index --assume-unchanged [path]
```


特定のファイルの変更の無視を解除する

```
git update-index --no-assume-unchanged [path]
```

接続先DBのローカル設定ファイルなどに利用しています。
標準出力に色をつける


# クラスを作る

```ruby
class TermColor
  class << self
    # 色を解除
    def reset   ; c 0 ; end 
    
    # 各色
    def red     ; c 31; end 
    def green   ; c 32; end 
    def yellow  ; c 33; end 
    def blue    ; c 34; end 
    def magenta ; c 35; end 
    def cyan    ; c 36; end 
    def white   ; c 37; end
 
	# カラーシーケンスを出力する
    def c(num)
      print "\e[#{num.to_s}m"
    end 
  end 
end
```
# 使う

```ruby
TermColor.red
puts 'hoge' # 赤くなる
TermColor.reset
puts 'fuga' # 元にもどる
```
FuelPHP の View_Twig で Asset を使う

※ 1.2 で下記三つの Function 含め、asset_render の合計四つの Function が追加された様です。

単純に拡張した場合
Asset は XHTML 形式でしかタグを吐き出せないので注意

```php:APPPATH/classes/twig/fuel/extension.php
<?php

class Twig_Fuel_Extension extends \Parser\Twig_Fuel_Extension
{
	public function getFunctions()
	{
		return array_merge(parent::getFunctions(), array(
			'asset_js'  => new Twig_Function_Function('Asset::js'),
			'asset_img' => new Twig_Function_Function('Asset::img'),
			'asset_css' => new Twig_Function_Function('Asset::css'),
		));
	}
}

```

```php:APPPATH/bootstrap.php
<?php

Autoloader::add_classes(array(
	// Add classes you want to override here
	// Example: 'View' => APPPATH.'classes/view.php',
	'Twig_Fuel_Extension' => APPPATH.'classes/twig/fuel/extension.php',
));

```

```twig:hoge.html.twig
{{ asset_js('bootstrap.js') }}
{{ asset_css('bootstrap.css') }}
```
Safari など外部アプリで開く


````objectivec
        NSURL *url = [NSURL URLWithString:urlString];
        if ([[UIApplication sharedApplication] canOpenURL:url]) {
            [[UIApplication sharedApplication] openURL:url];
        } else {
            // エラー処理
        }
````

Apple 標準アプリを開く URL は [Apple URL Scheme Reference](http://developer.apple.com/library/ios/#featuredarticles/iPhoneURLScheme_Reference/Introduction/Introduction.html) を参照。
Mail, Phone, Text, Map, YouTube, iTunes へのリンクが掲載されている。
NSRecursiveLock runLockBlock: メモ


NSRecursiveLock を Category 拡張して、ブロックでロックした状態の処理を実行させる。

Category 拡張した NSRecursiveLock は[Github/a-yasui/MyObjC-Ext](https://github.com/a-yasui/MyObjC-Extension)にあります。

```objective-c
static NSRecursiveLock* globalLock = [[NSRecursiveLock alloc] init];
static NSMutableString* infoLog    = [[NSMutableString alloc] init];
#define info(__FORMAT__, ...) [globalLock runLockBlock:^{\
    [infoLog appendFormat:(@"%s [Line %d] " __FORMAT__), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__]; \
}]

// some a code...
if ([args length])
    info(@"infomation: %@ is found", args);
```
Ruby1.9時代の文字化け対策 (その1)


そろそろ[Ruby1.8のノーマルサポートも終了](http://counting.hatelabo.jp/count/60325)しますしね・・・

## デフォルトエンコーディング

```ruby:default_encoding.rb
# 環境変数$LANGの値
p ENV['LANG'] # => ja_JP.UTF-8 等

# ロケールエンコーディングを決定するために用いる、locale charmap 名
# $LANG > GetConsoleCP(Winのみ)
p Encoding.locale_charmap

# デフォルトの外部エンコーディング
# コマンドラインオプションの -E / -U / -K > RUBYOPT の -E 等 > shebang の -E 等 > locale
p Encoding.default_external #=> #<Encoding:UTF-8>(Mac), #<Encoding:Windows-31J> (Win)

# デフォルトの内部エンコーディング
# コマンドラインオプションの -E / -U > RUBYOPT の -E 等 > shebang の -E 等 > nil
p Encoding.default_internal #=> nil
```

OSXでの実行結果

```
"ja_JP.UTF-8"
"UTF-8"
#<Encoding:UTF-8>
nil
```

$stdin, $stdout, $stderr は```Encoding.default_external```と```Encoding.default_internal```の値を参考に出力や入力時のエンコーディングを決定する。

Encoding.default_… の値は ```Encoding.locale_charmap``` の値を元に決定し、local_charmapは```環境変数LANG```の値等を参考に決定される。

File.open 時にエンコーディングが未指定の場合、```Encoding.default_external```の値が読み込んだ文字列のエンコーディングに採用される。

## 設定例
MacやUnixであれば```環境変数LANG```が適切に設定されていればシェルのエンコーディングと一致するため、特に気にする必要は無いです。

Windowsの場合は、使用するシェル(cmd? cygwin? git bash?)のエンコーディングと```環境変数LANG```の値を合わせておけば日本語の入出力で化けるようなことが無くなるはず。

続きます。

## 参考文献
* [Ruby M17N の設計と実装](http://jp.rubyist.net/magazine/?0025-Ruby19_m17n#l19)
重い処理の実行中にプログレスバー{IsIndeterminate=True}付きウィンドウを表示する

ユーザーに待ってもらうような重い処理をしている間に、アプリケーションがフリーズせず動作していることをウィンドウとして明示的に示す。
重い処理はBackgroundWorkerインスタンスにバックグラウンド実行させる。

#XAML

````xml:ProcessingSplash.xaml
<Window x:Class="hoge.ProcessingSplash"
		 xmlns="(略)"
		 xmlns:x:="(略)"
		 Title="ProcessingSplash"
		 Width="300"
		 Height="110"
		 WindowStyle="SingleBorderWindow"
		 WindowStartUpLocation="CenterScreen"
		 ResizeMode="NoResize">
	<Grid>
		<Grid.RowDefinitions>
			<RowDefinition Height="40" />
			<RowDefinition Height="30" />
		</Grid.RowDefinitions>
		<ProgressBar	x:Name="progressbar"
						VerticalAlignMent="Center"
						HorizontalAlignment="Stretch"
						Height="20"
						Margin="10,15,10,5"
						Width=250"
						IsIndeterminate="True" />
		<Label x:Name="label_status"
				Grid.Row="1"
				HorizontalAlignment="Center"
				Content="{Binding}" />
	</Grid>
</Window>
````

#実装

````cs:ProcessingSplash.xaml.cs
using System;
using System.Windows;
using System.ComponentModel;

namespace hoge
{
	public partial class ProcessingSplash : Window
	{
		BackgroundWorker _backgroundWorker = new BackgroundWorker();
		Action action;
		public bool complete { get; private set; }
		public bool close { get; private set; }

		public ProcessingSplash(string message, Action action)
		{
			InitializeComponent();
			this.action = action;
			DataContext = message;
			complete = false;
			close = false;

			_backgoundWorker.DoWork += _backgroundWorker_DoWork;
			_backgroundWorker.RunWorkerCompleted += _backgroundWorker_RunWorkerCompleted;
			_backgroundWorker.RunWorkerAsync();
		}

		private void _backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
		{
			if (action != null)
				action.Invoke();
		}

		private void _backgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
		{
			if (e.Cancelled)
			{
				//Cancelled
				complete = false;
				close = true;
			}
			else if (e.Error != null)
			{
				//Exception Thrown
				complete = false;
				close = true;
			}
			else
			{
				//Completed
				complete = true;
				close = true;
			}
			Close();
		}

		protected override void OnClosing(CancelEventArgs e)
		{
			if (!close)
				e.Cancel = true;
		}
	}
}
````

ProcessingSplash.closeプロパティは、privateな変数の方が良いかもしれない。

#用例

````cs:example.cs
//(略)

ProcessingSplash ps = new ProcessingSplash("Initializing", ()=>
{
	//ここで重い処理を処理させる
});

//バックグラウンド処理が終わるまで表示して待つ
ps.ShowDialog();

if (ps.complete)
{
	//処理が成功した
}
else
{
	//処理が失敗した
}
````

[ラムダ式のスコープ外部にある変数やメソッドの利用](www.atmarkit.co.jp/fdotnet/rapidmaster/rapidmaster_01/rapidmaster_01.html, "@IT C#ラムダ式基本文法最速マスター")にあるように、ラムダ式中ではそのままスコープ外部の変数が使えるので、わざわざ変数をProcessingSplashクラスへ委譲せずに済む。
wineでx-ctuを動かす



基本的には

```
brew install wine
```

をやったあとに予めダウンロードしたx-ctuを

```
wine x-ctu.exe
```

とやるだけなんだけど、その前に

```
ln -s /dev/tty.usbserual-A600ezYy ~/.wine/dosdevices/com1
```

のようにシンボリックリンクを貼る。そうするとUSBを認識する。
RSpecでプライベートメソッドをテストする

send を使用するのもいいが、以下のコードを RSpec ファイルで require すると便利。

```ruby:test_helper.rb
def describe_internally(*args, &block)
  example = describe(*args, &block)
  cls = args[0]
  if cls.is_a? Class
    saved_private_instance_methods = cls.private_instance_methods
    example.before do
      cls.class_eval { public *saved_private_instance_methods }
    end
    example.after do
      cls.class_eval { private *saved_private_instance_methods }
    end
  end
end
```

これを require した RSpec ファイルで、describe の代わりに describe_internally を使えば、内部で private メソッドが public メソッドと同じように呼び出せる。

例

```ruby:example_spec.rb
require 'test_helper'

describe_internally MyClass, "は、" do
  it "private メソッドをテストできる" do
    obj = MyClass.new
    # my_private_method は private メソッド
    obj.my_private_method.should == 1
  end
end
```
SelfのVMにパスを通す


[OS Xむけに用意されたインストーラ](http://selflanguage.org/download/index.html#virtual-machine)でインストールすると `/Library/Self/0` 以下にアプリケーションが配置される。

`/usr/bin/Self` というシェルスクリプトがインストールされるよ、と書いてある (<q>and add a small shell script at /usr/bin/Self.</q>) けど、インストールされておらず、パスも通っていないのでVMが見つからない。

なのでシンボリックリンクを張る。

```shell
ln -s /Library/Self/0/Self.app/Contents/MacOS/Self /usr/local/bin/
```

SelfはSmalltalkに影響を受けてOOP言語の研究のために開発された言語、あるいは実行環境です。
NewtonScript, JavaScript, IoやAgoraなどに影響を与えたとてもシンプルなプロトタイプベースとして設計されています。

研究目的で開発が進められてきた経緯があり、たとえばVMがまずインタプリタとしてコードを実行しつつプロファイリングを行い、選択的にコンパイルを行うAdaptive compilationはJavaのHotSpotでも採用されました。

他にもJSやRubyなどと近いエッセンス (それらがSelfやSmalltalkから影響を受けたのですから当然ですね) を感じるところが多く、心踊る言語といえます。

みんなでSelfを書こう。
OSX 10.6のmanコマンドを日本語化


manコマンドの内容を日本語化する方法をメモします。

## jmanのダウンロード

下記のサイトからjmanをダウンロードします。

hiroto sakai's site - UNIX 的ユーティリティ
http://www.fan.gr.jp/~sakai/softwares/unix

指示通りインストールしましょう。jman.pkgからインストールできます。

## インストールされているかを確認

インストールできているかどうかをターミナルから調べてみます。

```
$ which jman
/usr/local/bin/jman
```

必要に応じて```/usr/local/bin```をPATHに加えると楽です。

## (オプション)manコマンドをjmanに置き換え

もし日本語manを常用するなら、manコマンドをjmanに置き換えてもいいでしょう。下記のようなAliasを設定します。

``` .bachrc
alias man='/usr/local/bin/jman'
```
Mac に Eclipse PDT + Pleiades な環境を構築してみるメモ


### 0. 環境
* MacBook Air (Mid 2011)
* 1.8 GHz Intel Core i7
* Memory 4GB
* Mac OS X Lion 10.7.3


### 1. Eclipse (Classic) のインストール
* [Eclipse Classic 3.7.2](http://www.eclipse.org/downloads/)

Indigo (3.7.2) のバージョンの Mac OS X 64bit 版をゲト。
インストーラはないので、解凍したのを適当なフォルダに入れる。(/Applications/eclipse とか)


### 2. PDT (PHP Development Tools) のインストール
Eclipse を起動して、「Help > Install New Software」を開く。
「Work with:」のプルダウンから、

> Indigo - http://download.eclipse.org/releases/indigo

を選んで、しばし待つ…( ￣ω￣)旦~

リストが表示されたら、

> Programming Languages > 
> PHP Development Tools (PDT) SDK Features

を選んで「Next」(下図)を選択する。

![Eclipse PDT Install](https://img.skitch.com/20120506-pk94qasawwkt87amnse3b9c1t4.jpg)

次の「Install Details」のダイアログはそのまま「Next」を選択。

その次の「Review Licenses」のダイアログでは、「Licences:」のリストから項目を選んで、右下の

> 「I accept the terms of the license agreements」

のラジオボタンにチェックを入れて、「Finish」(下図)を選択。

![Eclipse PDT Install - Review Licenses](https://img.skitch.com/20120506-dquewrj8t39yr2wxhkmgux3c5c.jpg)

ダウンロードとインストールが始まるので、しばし待つ…( ￣ω￣)旦~

インストールが終わると、

> You will need to restart Eclipse SDK for the 
installation changes to take effect…

とダイアログが出るので「Restart Now」を選択。


### 3. Pleiades のインストール(Eclipse 日本語化)

![Pleiades](https://img.skitch.com/20120506-ma5n742cswkb3k6rdm28e9j5gn.jpg)

* [Pleiades](http://mergedoc.sourceforge.jp/index.html#pleiades.html)

サイトの「Pleiades 本体ダウンロード」のリンクから、安定版の Pleiades をゲトする。
「Pleiades All in One」は Windows 版しかないのです…(´・ω・｀)

ダウンロードしてきた、pleiades_*X.X.X*.zip (*X.X.X* はバージョン)を解凍して、中の

> features
> plugins

のフォルダの中身をそれぞれ、1.で作成した Eclipse フォルダにある同じ名前(features、plugins)のフォルダの中に入れる。

次に、Eclipse フォルダの Eclipse.app を右クリックして、「パッケージの中身を表示」を選択して、中にある

> Contents/MacOS/eclipse.ini

のファイルをエディタで開き、最後の行に、

> -javaagent:../../../plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar

と追加して保存。

Eclipse を再起動して、スプラッシュ画面が Pleiades のもの(下画像)に変わっていれば、おｋ。

![Pleiades Splash](https://img.skitch.com/20120506-m4n52dke62epkgbwxcusp2i8ff.jpg)


#### References
* [Eclipsepedia - PDT/Installation](http://wiki.eclipse.org/PDT/Installation)
* Pleiades 本体付属ドキュメント - readme/readme_pleiades.txt
ファイルを監視して、変更されたらコピーする。

複数のファイルを監視して、どれか１つでも更新されたら指定したディレクトリにコピーします。
Dropboxにバックアップするのに使ってます。

```zsh:copy_file_when_modified.zsh
#!/bin/zsh -f                                                                                                                 
if [[ $# < 2 ]]; then
    echo "Copy file to a directory when any one of files was modified." >&2
    echo "usage: `/usr/bin/basename $0` destDir(Such as DropBoxDir) file1 file2 ..." >&2
    exit 1
fi

DESTDIR=$1
if [[ ! -d $DESTDIR ]]; then
    echo "directory $DESTDIR doesn't exist." >&2
    exit 1
fi
shift

ALLREADABLE=true
for fidx in {1..$#}
do  
    if [[ ! -r $argv[$fidx] ]]; then
        echo "can't read file " $argv[$fidx] >&2
        ALLREADABLE=false
    fi
done

if [[ false == $ALLREADABLE ]]; then
    exit 1
fi

/usr/bin/inotifywait -e modify -m $argv | while read LINE
do
    FILENAME=`echo $LINE | /bin/sed "s/ MODIFY$//"`
    echo "copy $FILENAME to $DESTDIR" >&2
    /bin/cp "$FILENAME" "$DESTDIR"
done
```
String#sqz

```ruby
class String
  def sqz
    gsub(/^(.)(.*)(.)$/) { "#{$1}#{$2.size}#{$3}" }
  end
end

'internationalization'.sqz # => "i18n"
'localization'.sqz # => "l10n"

<<EOS.sqz # => "i18n\nl10n\n"
internationalization
localization
EOS

```
3S法。S = 1^2 + 2^2 + 3^2 + ... + n^2 はいくつ？

問題。次の $S$ の値はいくつだろうか。

$$
S = 1^2 + 2^2 + 3^2 + ... + n^2
$$

答え。次の計算により求まります。

$$
S = \frac{n(n+1)(2n+1)}{6}
$$

上の式を導き出す、3S法というのを紹介します。

たとえば、$n = 5$ として、$S$ の式を変形してみます。

$$
S = 1^2 + 2^2 + 3^2 + 4^2 + 5^2
$$ $$
S = (1) + (2+2) + (3+3+3) + (4+4+4+4) + (5+5+5+5+5)
$$

上の式を下図のように三角形の形に配置します。

```
    1
   2 2
  3 3 3
 4 4 4 4
5 5 5 5 5
```

この三角形をさらにもう 2 つ用意します。ただし、それぞれを回転させます。

```
    5              5
   4 5            5 4
  3 4 5          5 4 3
 2 3 4 5        5 4 3 2
1 2 3 4 5      5 4 3 2 1
```

これら 3 つの三角形を足すと、それぞれの要素は全て 11 となります。

```
        11
      11  11
    11  11  11
  11  11  11  11
11  11  11  11  11
```

この三角形の中に 11 はいくつあるでしょうか。1 + 2 + 3 + 4 + 5 個あります。よって、$S$ は次の式で表せます。

$$
3S = 11 \times \frac{5 \times 6}{2}$$ $$
3S = 165$$ $$
 S = 55
$$

一般化すると、

$$
3S = (2n+1) \times \frac{n(n+1)}{2}
$$

よって S の式は次のようになります。

$$
S = \frac{n(n+1)(2n+1)}{6}
$$

この方法は、3S法と呼ばれるものらしいです。2S法とはガウスが $1 + 2 + \dots + n$ を求めるときに用いた方法。他に、4S法というのもあるようです。

参考:

- http://www004.upp.so-net.ne.jp/s_honma/sum/sum.htm
Milkode0.7リリース - githubに公開されているソースコードを簡単に追加＆検索


![Milkode](http://cdn-ak.f.st-hatena.com/images/fotolife/t/tuto0621/20110731/20110731004041.png)

Milkode(ミルコード)はソースコード検索エンジンです。手元にある大量のソースコードを登録し、ブラウザで閲覧したり検索することが出来ます。20000ファイル位であれば1秒位で特定の一行を見つけることが可能です。

## 0.7の新機能
* `milk add git://..` に対応(自動pull付き)
* gmilkのgotolineモード(-g)で複数パスを渡せるように
* WindowsでもRuby1.9に対応
* Thorに対応

## デモサイト
いくつかの有名なオープンソースプロジェクトを検索出来るようにしてみました。

* [Kodeworld](http://kodeworld.ongaeshi.me/)
  * [mruby](http://kodeworld.ongaeshi.me/home/mruby)
  * [rails](http://kodeworld.ongaeshi.me/home/rails)
  * [ruby](http://kodeworld.ongaeshi.me/home/ruby)

## 詳細記事
[詳細へ](http://d.hatena.ne.jp/tuto0621/20120506/1336278687)
JSON.stringifyとtoJSON

JSON.stringifyを呼び出した時、そのオブジェクトにtoJSONメソッドがあればそれをフックするそうです。
https://developer.mozilla.org/en/JSON#toJSON()_method

```JSON.stringify.js
var obj = {
  toJSON: function() {
    console.log("toJSON called");
  }
};
JSON.stringify(obj); // output "toJSON called"
```

フックすると通常のJSON.stringifyの出力は当然ながら出力されません。
これはMDNで知ったのですが、ECMAScriptで標準化された仕様なのでしょうか？
djangoでリレーションを張ったテーブルをobjects.filterでフィルタリングする時に必要なのはモデルなのかなんなのか


```python:django_api
#単なるユーザーID
In [3]: uid=466435431
#ユーザーIDを指定して取得したuserDataインスタンス
In [4]: user=userData.objects.get(uid=uid)
#ユーザーが取得できているか確認
In [5]: user
Out[5]: <userData: _wats>

#ここから本題
#インスタンスを指定して取得
In [6]: m1=MusicData.objects.filter(musicuser=user)
#ユーザーID（PRIMARY KEY）だけ指定して取得
In [7]: m2=MusicData.objects.filter(musicuser=uid)
#結果
#どっちでも同じように取得できる。
In [8]: m1
Out[8]: [<MusicData: 恋をとめないで>, <MusicData: Take Cover>]

In [9]: m2
Out[9]: [<MusicData: 恋をとめないで>, <MusicData: Take Cover>]
```
Chain method


This code snipet gives flow controling to you for callback chain.

```javascript
(function (global, doc) {

    /**
    * Chain callbacks.
    * @param {Function[]} [No arguments name] Call function objects as chain method.
    * @return undefined
    * @example
    *   chain(function (next) {... next(); }, function (next) {... next(); }, function (next) {... next(); }...);
    *       -> next is callback.
    */
    function chain() {

        var actors = Array.prototype.slice.call(arguments);

        function next() {
        
            var actor = actors.shift(),
                arg = Array.prototype.slice.call(arguments);

            //push `next` method to argumetns to last.
            arg.push(next);

            //when `actor` is function, call it.
            (Object.prototype.toString.call(actor) === '[object Function]') && actor.apply(actor, arg);
        }

        next();
    }

    /* -----------------------------------------------
       EXPORT
    -------------------------------------------------- */
    global.chain = chain;
}(this, document));
```
Rails+DynamoDB(AWS::Record::HashModel)でTokyoリージョンを使う方法

`#{Rails.root}/config/initializers/aws.rb`に以下を追記:

```ruby:aws.rb
# ... other AWS configurations
AWS::Core::Configuration.module_eval do
  add_service 'DynamoDB', 'dynamo_db', 'dynamodb.ap-northeast-1.amazonaws.com'
end
```
JavaScriptで引数の有無でsetter/getterを切り替えるのはアリでしょうか

つまり、setXxx/getXxxを作らずに、xxx()/xxx(arg)にしてしまう感じ。

```example.js
var Hoge = (function() {
  var prop;
  return function() {
    var that = {};
    that.prop = function() {
      if (arguments.length > 0)
        prop = arguments[0];
      else
        return prop;
    };
    return that;
  };
})();
```

使う側はこんな感じ

```use.js
var hoge = new Hoge();
hoge.prop(100);
console.log(hoge.prop()); // output 100
```

僕が知らないだけで、これって結構常套句だったりしますでしょうか？
MacOSX lionでrbenv0.3.0+Ruby1.9.3-p194+bundler1.1.3+Rails3.2.3+passenger3.0.12+apache2(MacOSX lion標準のもの)を動かしてみる


前提として，rbenv0.3.0環境内にRuby1.9.3-p194をインストール済み且つbundler1.1.3・Rails3.2.3で適当なRailsアプリを作成済みというところからスタートです．

#RailsアプリをApache2のサブディレクトリで動作させる準備
`ln -s /somewhere/rails_sample/public Apache2のドキュメントルート/rails_sample`でシンボリックリンクを作成しておきましょう．
OSXのApache2のドキュメントルートは/Library/WebServer/Documentsだと思います．

#passengerのインストール
まず`gem install passenger`でpassengerをインストールします(今回は3.0.12)．

次にpassengerのapache2モジュールをインストールする必要があるので，`~/.rbenv/versions/1.9.3-p194/bin/passenger-install-apache2-module`を実行します．

#Apache2周りの設定
passenger-install-apache2-moduleを実行するとhttp.confを編集しましょうという旨が表示されるので，言われた通りにします．
今回はOSX環境なので，/private/etc/apache2/other/passenger.confを新たに作成して以下のように書きます．

```/private/etc/apache2/other/passenger.conf
LoadModule passenger_module /Users/ユーザ名/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/passenger-3.0.12/ext/apache2/mod_passenger.soPassengerRoot /Users/ユーザ名/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/passenger-3.0.12PassengerRuby /Users/ユーザ名/.rbenv/versions/1.9.3-p194/bin/ruby

RailsEnv development

RubyBaseURI /rails_sample```

上から三行分はpassengerのインストール時にhttpd.confに書くように言われるものです．
また，真ん中の`RailsEnv development`ですが，passengerはデフォルトでproductionモードでRailsを動作させるので，productionではなく別のモードで動かしたいという場合はこのように`RailsEnv モード名`と書いてください．

最後の一行はRailsアプリケーションの場所を指定しています．このように指定すると　http://localhost/rails_sample　でRailsアプリのルートにアクセスできます．

#passenger+bundler問題
ここまでの状態ではpassenger経由でRailsアプリを呼んだ時にbundlerでインストールしたgemを読んでくれないので，Railsアプリのルート/config/setup_load_paths.rbを作成しましょう．
このファイルはどうやらアプリの読み込み時に実行されるものらしく(参考:http://www.modrails.com/documentation/Users guide Apache.html#bundler_support)，環境変数の設定などに利用できます．
ここに以下のように書きます．

```ruby:config/setup_load_paths.rb
ENV['GEM_HOME'] = "/somewhere/rails_sample/vendor/bundle/ruby/1.9.1"
```

GEM_HOME環境変数に使用したいgemのホームを代入しています．こうすることでbundlerでインストールされたgemが読み込まれ，正常にrailsが動作します．